メインコンテンツまでスキップ

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 を利用して必要な権限を絞り込んで適用するやり方です。

デプロイスクリプトの実行

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 を更新していくだけの運用が可能です。