less is more

心のフルスタックエンジニア👨‍💻バイブスでコードを書いています🤘

AWS

cloudformation:CreateStack のオプションを整理する

aws-cli のドキュメントをもとに一つずつ見ていく。 create-stack — AWS CLI 1.18.78 Command Reference --stack-name スタック名。必須。 英数字またはハイフンのみ。 最大128文字で、先頭は英文字でなければならない。 また、リージョン内でユニークという…

CloudFormationを扱う際のIAMの考え方

あるスタックを作成するケースを考える SQSのキューを1つだけ作るテンプレートを用意する。 # sample.cf.yml AWSTemplateFormatVersion: "2010-09-09" Resources: SampleQueue: Type: AWS::SQS::Queue とあるIAMユーザーのプロファイルを指定してcreate-stac…

Lambdaの関数をランタイムごとに数える

完成イメージ $ abc lambda stats | RUNTIME | COUNT | |--------------------------|-------| | nodejs12.x | 2 | | nodejs8.10(Deprecated) | 1 | | python3.6 | 2 | | ruby2.5 | 8 | | ruby2.7 | 2 | --verboseオプションで関数名も表示 $ abc lambda s…

イメージが残っているECRを含んだCloudformationスタックは削除できない。なのでできるようにした。

できない ECR単体の削除であれば、例えばCLIだったらecr delete-repository --forceとすればイメージごとリポジトリを削除できるのだが、Cloudformationのスタックとして作成されている場合、イメージが残っているとスタックの削除に失敗する。このケースに…

GoでAWS APIをモックする

開発中のCLIツールのテストで、AWS API の呼び出しをモックする仕組みを試行錯誤したのでメモ。 github.com ツールでは aws-sdk-go を用いてAPIを呼び出している。 例として、CloudFormation の ListStacks API をモックする。 サービスクライアントを差し替…

Redashにつながらなくなった時の調査メモ

Redashが落ちてたのでその時の調査と対応の記録。 前提 EC2で運用 冗長化はしていない 公式のAMIを使用(つまりdocker-composeで動かすスタイル) 事象 ブラウザでRedashの固定IPアドレスを叩くと画面が真っ白。 原因のあたりをつける 真っ白な画面は返って…

CloudFormationでECSのBlue/Greenデプロイができるようになったので試す

概要 これまで CodeDeploy と連携させて実現していた ECS の Blue/Green デプロイが CloudFormation にインテグレートされて、Externalなデプロイメントコントローラーとして使用できるようになりました。これによって、一連のデプロイパイプラインをテンプ…

cobraでGoのCLIツールを作る

概要 この記事で作ったCLIツールの裏側の話です。 bluepixel.hatenablog.com OSSとしてバイナリの配布も始めました。 github.com GoでCLIツールを作る手段 いくつか候補が見つかったんですが、何分 Go に入門したばかりなのでPros/Consが判断できず。 とりあ…

Amazon Linuxの最新のAMI IDを正しく取得する

言わずと知れたAWS製のLinuxマシンイメージですが、 結構頻繁にアップデートされるので、最新のIDを追う必要があります。 特にIaCが当たり前のいまでは、CloudFormationでもTerraformでもAMI IDをあらかじめ変数化しておくことが多いと思いますが、ついつい…

ap-northeast-1a は概念

AWS

アベイラビリティゾーンについて学ぶ 東京リージョンap-northeast-1 では4つの利用可能なAZ(アベイラビリティゾーン)が提供されている。 ap-northeast-1a ap-northeast-1b ap-northeast-1c ap-northeast-1d これらは実体として1つずつの独立したデータセンタ…

aws-sdk-goを触ってみた所感

普段はcli, Ruby, Node.jsなどでAWSと戯れていますが、今回初めてaws-sdk-goを使ってみたので所感をしたためておきます。 ▼題材はこれです。 bluepixel.hatenablog.com Rubyで書いた40行ほどのスクリプトをGo実装で焼き直してみました。 rezept/main.go at m…

SQSのイベントをトリガーに起動するLambdaの仕組みを完全に理解する🧘‍♀️

先日S3のイベント駆動でLambdaをトリガーする記事を書きましたが、今回はSQSのイベントをトリガーにします。 bluepixel.hatenablog.com LambdaのイベントソースにSQSが指定できるようになったのは意外にだいぶ遅めで、2018年4月です。FIFOキューはさらにその…

CloudFormationで使われていないExportを洗い出す

CloudFormationにおいてスタック間で値を受け渡したいときに、参照される側で出力値をエクスポートして、参照する側でFn::ImportValueで読み込む方法があります。 docs.aws.amazon.com エクスポートされている値は各スタック詳細の出力や[エクスポート]から…

S3のイベント通知を完全に理解する🧘‍♀️

概要 今回はS3のイベント通知に関して掘り下げます。 よくあるユースケースとしては、S3に画像が置かれたのをトリガーにLambdaを起動してサムネイル画像を作成するとかでしょうか。 アーキテクチャはこんな感じ。 ターゲット イベントの送信先として指定でき…

CloudFormationのスタックのdiffをGithubで参照できるようにする

続きです。 bluepixel.hatenablog.com 自前のGithub Actionを作っていきます。 ワークフローの内容 CloudFormationで作成したスタックを更新する際、変更セットというものを作る必要があります。 この変更セットには、どのリソースの何が変更されるのが、置…

自前のGithub Actionsを作ってみる

この記事を書いた時に、プラットフォームの発展に結構可能性を感じたので自分でも作ってみる。 bluepixel.hatenablog.com 何を作るかはさておき、まずは作り方を一通り調べてみる。 ドキュメントはここから。 help.github.com 基本的な仕様 About actions - …

Slackのスラッシュコマンドとダイアログを使ってEC2のセキュリティグループを編集する

経緯 フルリモート体制になっているので、sshの接続元などにオフィス以外の任意のIPアドレスを追加する必要が出てきた。 メンバーの自宅はIPが固定されていないため、IPアドレスが変わるたびにインフラ担当に作業を依頼する必要がある。 作業の手間とヒュー…

Fargateにおけるpuma+Nginxのソケット通信のやり方

やること pumaサーバーのアプリをFargateにデプロイする。 リクエストはNginxで受ける。 Nginxとpumaの通信はソケットを用いて行う。 pumaとNginxは同じFargateタスクの別コンテナとして扱う。 こちらの記事にある下図の右側の部分のイメージです。 bluepixe…

Github ActionsでFargateをデプロイする

Github Actions github.co.jp これまではCodePipeline上に構築することが多かったんですが、もう少しサクッと作れないかなーと思い試してみました。 環境 Ruby製のアプリケーション 。 コンテナは、pumaを動かすアプリケーションとNginxの2台構成。 ECS Serv…

ECSのタスク実行をCLIからやる

すでに作成済みのタスク定義を指定して、CLIから任意のタスクを実行する環境を整えます。 IAMポリシーのセットアップ タスク実行に必要な ecs:RunTask の他に、タスク定義を参照するための ecs:DescribeTasksや、 CloudWatchへのログ出力のためのポリシーが…

SQSを完全に理解する🧘‍♀️

AWS SQS Amazon Simple Queue Service とは デフォルト 全部デフォルトでいいならこれだけのテンプレートでキューが作成できる。 AWSTemplateFormatVersion: "2010-09-09" Resources: SampleQueue: Type: AWS::SQS::Queue 名前すら指定する必要はない。 名前…

Lambda@Edgeを完全に理解する🧘‍♀️

とは 2017年7月17日に正式リリースされたサービス。 Lambda@Edge の一般提供を開始 AWS Lambda にコードをアップロードし、Amazon CloudFront イベント (ビューワーリクエスト、ビューワーレスポンス、オリジンリクエスト、オリジンリクエストなど) によって…

ECSのサービスディスカバリーを試す

概要 サービスディスカバリーとは、マイクロサービスなんかを作るときには必須となるあれである。 AWSにおいては、各種リソース間で通信を行う際に、相手先のエンドポイントを解決する仕組みが用意されている。 外向き、つまり対インターネットに対しては、…

ElasticBeanstalkのログまわりの設定ベストプラクティス

CloudWatchへのストリーミング マネジメントコンソールからダウンロードしてgrepかけるのはしんどいので、 基本的にはCloudWatchに流したい。 [設定] => [ソフトウェアの変更] で、CloudWatch Logs へのインスタンスログのストリーミング を有効化できる。 …

CloudFront×S3で403 Access Deniedが出るときに確認すべきこと

前提 S3をオリジンとしたCloudFrontディストリビューションを作成している HTMLや画像ファイルをCloudFront経由で配信したい 独自ドメインのCNAMEを登録している CloudFrontのドメイン、またはCNAMEで登録している独自ドメインにアクセスすると以下のような…