昨日ECS+ALBのインフラを構築しようとして失敗しましたが、どんな感じでALBが機能するのかもイメージは掴むことができました。
昨日はマネージメントコンソールから操作したので今日はCloudFormationでスクリプトを書く練習をしました。
こちらの動画のコードを参考にして勉強します。解説も丁寧でありがたいです。
動画で使用されているコードのGItHubリポジトリはこちら。
まず、READMEに書かれてる手順で以下のAWS CLIコマンドを実行すると想定通りにECSタスクが立ち上がってブラウザでアクセスできることまで確認できました。
aws cloudformation create-stack --template-body file://$PWD/infra/vpc.yml --stack-name vpc aws cloudformation create-stack --template-body file://$PWD/infra/iam.yml --stack-name iam --capabilities CAPABILITY_IAM aws cloudformation create-stack --template-body file://$PWD/infra/app-cluster.yml --stack-name app-cluster # api.yml のDockerイメージURLは自分んECRから取得したURLに変更する必要があります aws cloudformation create-stack --template-body file://$PWD/infra/api.yml --stack-name api
やっぱり動くことが確認できているコードを参考にできると大変ありがたいですね。
しっかりコード分析したいと思います。
以下は上記のコードを参考に自分でCloudFormationテンプレート書いてみた記録です。
まずVPCを作成するためにinfra0130というディレクトリにvpc0130.ymlというファイル名で以下のテンプレートを書きました。
AWSTemplateFormatVersion: '2010-09-09' Description: VPC created at 20210130 Resources: VPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: '10.0.0.0/16' EnableDnsSupport: true EnableDnsHostnames: true InstanceTenancy: default
10.0.0.0/16のVPCを作成するだけのシンプルなテンプレートです。
このテンプレートでCloudFormationスタックを作成するために以下のAWS CLIコマンドを実行します。
aws cloudformation create-stack --template-body file://$PWD/infra0130/vpc0130.yml --stack-name vpc0130
コマンドを実行するとCloudFormationのStackIdが出力されました。
{ "StackId": "arn:aws:cloudformation:ap-northeast-1:428351874559:stack/vpc0130/be2f0270-62fa-11eb-b445-060c99a0ecc6" }
そしてClodFormation Stackが作成されているのがマネジメントコンソールから確認できました。
ResourcesタブではこのStackに含まれてるAWSリソースが確認できるようです。
このStackで作成されたVPCが表示されていました。
VPC IDをクリックするとCloudFormationから作成されたVPCが表示されました。
しかしNameタグがないと何かと不便そうなのでテンプレートにNameタグを追加する書き方を調べるため、公式ドキュメントを読んでみました。
公式ドキュメントに一通り必要な情報はまとまっているので調べやすいですね。
ドキュメントの内容を参考にテンプレートを以下のように修正しました。
AWSTemplateFormatVersion: '2010-09-09' Description: VPC created at 20210130 Resources: VPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: '10.0.0.0/16' EnableDnsSupport: true EnableDnsHostnames: true InstanceTenancy: default Tags: - Key: "Name" Value: "VPC0130"
上記テンプレート実行する前に先に作成したStackを以下のコマンドで削除しました。(もしかしたらupdateするコマンドを使ったほうが効率良いかも。後々改善する)
aws cloudformation delete-stack --stack-name vpc0130
そして再度以下のコマンドでStackを作成して、StackIDが出力されました。。
aws cloudformation create-stack --template-body file://$PWD/infra0130/vpc0130.yml --stack-name vpc0130 { "StackId": "arn:aws:cloudformation:ap-northeast-1:428351874559:stack/vpc0130/6c8861d0-62fc-11eb-b45b-0e15f647217b" }
作成されたVPCを確認すると想定通りNameタグがついていました。
まだVPC作っただけですが、ClodFormationの雰囲気が掴めてきました。
やっぱりマネジメントコンソールでの操作よりも再現性があるし、自分が書いたテンプレートも見直せるので良いですね。
ひとつずつ確認しながら練習して、CloudFormationでECSの構築までできるように進めていきたいと思います。