AWS CloudFormation を使ったデプロイと動作確認
本カタログのサンプルコードを AWS CloudFormation を使用してデプロイし、動作確認を行う方法を記載したドキュメントです。デプロイ完了後の状態は 5. AWS Management Console 上での環境構築と動作確認 と同じですが、カタログ AMI にはワンコマンドでデプロイできるように Shell Script が用意されています。
デプロイ構成
デプロイ手順
事前準備
ECR リポジトリに関しては、デプロイスクリプトを実行する前に手動作成が必要です。これを手動で作成しておくことで、以降のスクリプトをスムーズに動かすことが可能です。具体的なやり方は 5. AWS Management Console 上での環境構築と動作確認 の「ECR リポジトリ作成」セクションと同じですが、命名規則を以下のフォーマットに従うようにしてください。
{APP_NAME}-{ENV_NAME}-{AWS_REGION}-{AWS_ACCOUNT_ID}
# e.g.
# APP_NAME: my-react-router-app
# ENV_NAME: dev, stg, prd, etc.
# AWS_REGION: us-west-2, ap-northeast-1, etc.
# AWS_ACCOUNT_ID: 111122223333
# my-react-router-app-dev-ap-northeast-1-111122223333
デプロイで利用する IAM Role と権限を確認
AMI で作成したインスタンスに付与したインスタンスロールの権限を確認してください。おすすめするやり方は、Administrator 権限付与後実行し、以降は AWS IAM Access Analyzer を利用して必要な権限を絞り込んで適用するやり方です。
- AWS IAM Access Analyzer の詳細については関連する公式ドキュメントを参照してください。
デプロイスクリプトの実行
EC2 に接続してターミナルより以下のコマンドを実行します。アプリケーションのビルド・Docker イメージのビルドとプッシュ・Lambda@Edge/CloudFront/Lambda本体のデプロイまで完了します。
./deploy/build-and-deploy.sh {APP_NAME} {ENV_NAME} {AWS_REGION}
# ECR リポジトリに作成した名前と同じになるようにしてください。
スクリプトの中には、以下のように CloudFormation を実行しています。
# iam-auth-edge という名前は、「5. AWS Management Console 上での環境構築と動作確認」で記載した「add-content-hash」と同義です。
aws cloudformation deploy \
--region us-east-1 \
--stack-name ${_APP_NAME}-${_ENV_NAME}-iam-auth-edge \
--template-file ./deploy/cloudformation/iam-auth-edge.yaml \
--parameter-overrides \
AppName=${_APP_NAME} \
EnvName=${_ENV_NAME} \
--capabilities CAPABILITY_NAMED_IAM
aws cloudformation deploy \
--region ${_AWS_REGION} \
--stack-name ${_APP_NAME}-${_ENV_NAME}-cloudfront-lambda \
--template-file ./deploy/cloudformation/cloudfront-lambda.yaml \
--parameter-overrides \
AppName=${_APP_NAME} \
EnvName=${_ENV_NAME} \
LambdaEdgeArn=arn:aws:lambda:us-east-1:${_AWS_ACCOUNT_ID}:function:${_APP_NAME}-${_ENV_NAME}-iam-auth-edge:1 \
ImageUri=${_IMAGE_URI} \
--capabilities CAPABILITY_NAMED_IAM
動作確認
数分ほどでデプロイが完了したら、AWS マネジメントコンソールで CloudFront が発行したドメインを開きます。
以下のように表示されていれば完了です。以降も同じく Shell Script を実行するだけで、AWS Lambda のコンテナイメージをプッシュして、Lambda を更新していくだけの運用が可能です。