CloudFormationを使ったデプロイと動作確認
本カタログのサンプルコードを AWS CloudFormation を使用してデプロイし、動作確認を行う方法を記載したドキュメントです。AWS CloudFormation を使って実際にリソースをAWS上にデプロイしていきます。
デプロイ構成
デプロイ手順
1. デプロイで利用する IAM Role を作成
以下の IAM ポリシーを適用した IAM ロールを作成し、AWS CloudFormationデプロイを実行するEC2インスタンスにアタッチします。
CloudFormation スタック生成時に利用する IAM Policy の内容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:AddPermission",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionCodeSigningConfig",
"lambda:GetFunctionRecursionConfig",
"lambda:GetPolicy",
"lambda:GetRuntimeManagementConfig",
"lambda:RemovePermission"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"apigateway:POST",
"apigateway:GET",
"apigateway:PUT",
"apigateway:PATCH",
"apigateway:DELETE"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"lambda:DeleteLayerVersion",
"lambda:GetLayerVersion",
"lambda:PublishLayerVersion"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:PutBucketNotification"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:DeletePolicy",
"iam:CreatePolicy",
"iam:CreatePolicyVersion",
"iam:AttachRolePolicy",
"iam:DeleteRolePolicy",
"iam:DetachRolePolicy",
"iam:PutRolePolicy",
"iam:GetRole",
"iam:DeleteRole",
"iam:UpdateRole",
"iam:PassRole"
],
"Resource": "*"
}
]
}
2. VPCデプロイ
まずはVPCをデプロイするためにaws-cliを使ってCloudFormationのデプロイを実行します。コマンド実行後AWSのマネジメントコンソールからデプロイの成功を待ちます。--stack-name
、AppName
、EnvName
はあなたの環境に合わせて好きな値を入れて下さい
[ec2-user ~]aws cloudformation create-stack \
--region us-east-1 \
--stack-name vpc \
--template-body file://deploy/cloudformation/vpc.yaml \
--parameters \
ParameterKey=AppName,ParameterValue=myapp \
ParameterKey=EnvName,ParameterValue=dev \
--capabilities CAPABILITY_NAMED_IAM
デプロイ完了後、マネジメントコンソールの出力タブを開いて以下の値を確認します。これらの値はその後のスタックのデプロイにて使用します。
3. データベースのデプロイ
Amazon Aurora PostgreSQLを先ほどデプロイしたVPC内にデプロイします。
[ec2-user ~]aws cloudformation create-stack \
--region us-east-1 \
--stack-name db \
--template-body file://deploy/cloudformation/db.yaml \
--parameters \
ParameterKey=AppName,ParameterValue=myapp \
ParameterKey=EnvName,ParameterValue=dev \
ParameterKey=DBUserName,ParameterValue=postgreAdmin \ # 好きな値を入れて下さい
ParameterKey=DBUserPassword,ParameterValue=SuperSecurePass123 \ # 8文字以上の好きな値を入れて下さい
ParameterKey=VpcId,ParameterValue=vpc-01187493c944a7ff0 \ # VPCの出力タブに出てきた値を入れます
ParameterKey=PrivateSubnet1,ParameterValue=subnet-0ba1ff7efe656281e \ # VPCの出力タブに出てきた値を入れます
ParameterKey=PrivateSubnet2,ParameterValue=subnet-0007df266992e3a06 \ # VPCの出力タブに出てきた値を入れます
--capabilities CAPABILITY_NAMED_IAM
DBのデプロイが完了したらマネジメントコンソールの出力タブよりAuroraクラスターのライターインスタンスのエンドポイントを確認します。
4. API Gateway + LambdaのCloudFormationスタックのデプロイ
同様にaws-cliにてスタックのデプロイを行います。
[ec2-user ~]aws cloudformation create-stack \
--regio us-east-1 \
--stack-name apigateway-lambda \
--template-body file://deploy/cloudformation/apigateway-lambda.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--parameters \
ParameterKey=AppName,ParameterValue=myapp \
ParameterKey=EnvName,ParameterValue=dev \
ParameterKey=VpcId,ParameterValue=vpc-01187493c944a7ff0 \
ParameterKey=PrivateSubnet1,ParameterValue=subnet-0ba1ff7efe656281e \
ParameterKey=PrivateSubnet2,ParameterValue=subnet-0007df266992e3a06 \
ParameterKey=S3SourceCodeBucket,ParameterValue=$BUCKET_NAME \
ParameterKey=S3SourceCodeKey,ParameterValue=api.zip \
ParameterKey=DbHost,ParameterValue=db-postgresql-rqoopbocmcqq.cluster-chptakso6oan.us-east-1.rds.amazonaws.com \ # Auroraクラスターのライターインスタンスのエンドポイント
ParameterKey=DbUser,ParameterValue=postgreAdmin \
ParameterKey=DbPassword,ParameterValue=SuperSecurePass123 \
ParameterKey=DbName,ParameterValue=mydb \
ParameterKey=AppLayerArn,ParameterValue=arn:aws:lambda:us-east-1:<アカウントID>:layer:python-lambda-application-template-lib-layer:1 \ # パッケージ作成の際にメモしたpython-lambda-application-template-lib-layerのARNを指定
ParameterKey=Psycopg3LayerArn,ParameterValue=arn:aws:lambda:us-east-1:<アカウントID>:layer:psycopg3-layer:1 # パッケージ作成の際にメモしたpsycopg3-layerのARNを指定
デプロイが成功するとAPIエンドポイントが出力タブに表示されます。これを使って動作確認を行いましょう。
5. S3イベント + LambdaのCloudFormationスタックのデプロイ
[ec2-user ~]aws cloudformation create-stack \
--region us-east-1 \
--stack-name s3-lambda \
--template-body file://deploy/cloudformation/s3-lambda.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--parameters \
ParameterKey=AppName,ParameterValue=myapp \
ParameterKey=EnvName,ParameterValue=dev \
ParameterKey=VpcId,ParameterValue=vpc-01187493c944a7ff0 \
ParameterKey=PrivateSubnet1,ParameterValue=subnet-0ba1ff7efe656281e \
ParameterKey=PrivateSubnet2,ParameterValue=subnet-0007df266992e3a06 \
ParameterKey=S3SourceCodeBucket,ParameterValue=$BUCKET_NAME \
ParameterKey=S3SourceCodeKey,ParameterValue=event.zip \
ParameterKey=DbHost,ParameterValue=db-postgresql-rqoopbocmcqq.cluster-chptakso6oan.us-east-1.rds.amazonaws.com \
ParameterKey=DbUser,ParameterValue=postgreAdmin \
ParameterKey=DbPassword,ParameterValue=SuperSecurePass123 \
ParameterKey=DbName,ParameterValue=mydb \
ParameterKey=AppLayerArn,ParameterValue=arn:aws:lambda:us-east-1:<アカウントID>:layer:python-lambda-application-template-lib-layer:1 \
ParameterKey=Psycopg3LayerArn,ParameterValue=arn:aws:lambda:ap-northeast-1:<アカウントID>:layer:psycopg3-layer:1
デプロイが成功するとイベントがトリガーされるS3バケットが生成されます。ここにユーザデータのCSVをアップロードするとLambdaファンクションが起動してDBにデータが作成されます。
動作確認
お疲れ様でした。こちらのページより動作確認が行えます。