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

デプロイ

作成
  • 作成者: moritalous
  • 作成日: 2023/08/14

デプロイ

CDKのデプロイはコマンドで行います。

デプロイの前にbootstrapコマンドを実行します。このコマンドはAWSのアカウントとリージョンごとに1度だけ実施します。

shell
cdk bootstrap

作成されるリソースは以下のとおりです。デプロイ時のロールやアセットを保管するS3バケットなどが生成されます。

Resource TypeLogical ID
AWS::SSM::ParameterCdkBootstrapVersion
AWS::IAM::RoleCloudFormationExecutionRole
AWS::ECR::RepositoryContainerAssetsRepository
AWS::IAM::RoleDeploymentActionRole
AWS::IAM::RoleFilePublishingRole
AWS::IAM::PolicyFilePublishingRoleDefaultPolicy
AWS::IAM::RoleImagePublishingRole
AWS::IAM::PolicyImagePublishingRoleDefaultPolicy
AWS::IAM::RoleLookupRole
AWS::S3::BucketStagingBucket
AWS::S3::BucketPolicyStagingBucketPolicy

Bootstrapが完了したらデプロイします。

shell
cdk deploy

IAMに関する変更が発生するため、確認メッセージが表示されます。yで返答し、デプロイを行います。

IAM Statement Changes
┌───┬───────────────────────────────────────────────────────────────────────────────┬────────┬───────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼───────────────────────────────────────────────────────────────────────────────┼────────┼───────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┼───────────┤
│ + │ ${Custom::VpcRestrictDefaultSGCustomResourceProvider/Role.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │
├───┼───────────────────────────────────────────────────────────────────────────────┼────────┼───────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┼───────────┤
│ + │ arn:${AWS::Partition}:ec2:${AWS::Region}:${AWS::AccountId}:security-group/${V │ Allow │ ec2:AuthorizeSecurityGroupEgress │ AWS:${Custom::VpcRestrictDefaultSGCustomResourceProvider/Role} │ │
│ │ PCB9E5F0B4.DefaultSecurityGroup} │ │ ec2:AuthorizeSecurityGroupIngress │ │ │
│ │ │ │ ec2:RevokeSecurityGroupEgress │ │ │
│ │ │ │ ec2:RevokeSecurityGroupIngress │ │ │
└───┴───────────────────────────────────────────────────────────────────────────────┴────────┴───────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────┐
│ │ Resource │ Managed Policy ARN │
├───┼────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────┤
│ + │ ${Custom::VpcRestrictDefaultSGCustomResourceProvider/Role} │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"} │
└───┴────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Do you wish to deploy these changes (y/n)?

CDKのデプロイの実態はCloudFormationで行われます。デプロイ後のCloudFormationの画面がこちらです。

image.png

注記

マネジメントコンソールでVPCを作成する際にはIAMロールの作成はありませんでした。

ec2.VpcにはrestrictDefaultSecurityGroupというプロパティがあり、デフォルトでtrueが指定されています。

If set to true then the default inbound & outbound rules will be removed
from the default security group

@default true if '@aws-cdk/aws-ec2:restrictDefaultSecurityGroup' is enabled, false otherwise

これは、AWSのベストプラクティスの 「デフォルトセキュリティグループを使用しない」 というものに準拠させるための設定変更を行うため、LambdaとLambdaに付与するIAMロールが生成されるからです。(デフォルトセキュリティグループは自動で作成され削除はできないので、インバウンドルールとアウトバウンドルールをすべて削除する動きをします)

参考:[EC2.2] VPC のデフォルトのセキュリティグループでは、インバウンドトラフィックとアウトバウンドトラフィックを許可しないようにする必要があります

このようにAWSのベストプラクティスに沿った環境が構築できるのもCDKのメリットです。

この先はハンズオンの設定値通りではなく、CDKのデフォルト値を使用しながら構築していきます。