cdk synth

アプリからテンプレートを総合的に扱う (synthesize)

AWS CDKアプリは、事実上、コードを使用したインフラストラクチャの 定義 にすぎません。CDKアプリが実行されると、アプリケーションで定義された各スタックのAWS CloudFormationテンプレートが作成されます(CDKの用語では “synthesize” )。

CDKアプリを総合的に扱うには、 cdk synth コマンドを実行してください。サンプルアプリから合成されたCloudFormationテンプレートを確認してみましょう。

$ cdk ls
hello-cdk-1
hello-cdk-2
$

スタックの1つが統合的に扱われます。

$ cdk synth hello-cdk-1

上記コマンドを実行すると、次のCloudFormationテンプレートを出力します。

Resources:
  MyFirstQueueFF09316A:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 300
    Metadata:
      aws:cdk:path: hello-cdk-1/MyFirstQueue/Resource
  MyFirstQueuePolicy596EEC78:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Statement:
          - Action: sqs:SendMessage
            Condition:
              ArnEquals:
                aws:SourceArn:
                  Ref: MyFirstTopic0ED1F8A4
            Effect: Allow
            Principal:
              Service: sns.amazonaws.com
            Resource:
              Fn::GetAtt:
                - MyFirstQueueFF09316A
                - Arn
        Version: "2012-10-17"
      Queues:
        - Ref: MyFirstQueueFF09316A
    Metadata:
      aws:cdk:path: hello-cdk-1/MyFirstQueue/Policy/Resource
  MyFirstQueuehellocdk1MyFirstTopicB252874C505090E8:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: sqs
      TopicArn:
        Ref: MyFirstTopic0ED1F8A4
      Endpoint:
        Fn::GetAtt:
          - MyFirstQueueFF09316A
          - Arn
    Metadata:
      aws:cdk:path: hello-cdk-1/MyFirstQueue/hellocdk1MyFirstTopicB252874C/Resource
  MyFirstTopic0ED1F8A4:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: My First Topic
    Metadata:
      aws:cdk:path: hello-cdk-1/MyFirstTopic/Resource
  MyHelloConstructBucket0DAEC57E1:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: hello-cdk-1/MyHelloConstruct/Bucket-0/Resource
  MyHelloConstructBucket18D9883BE:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: hello-cdk-1/MyHelloConstruct/Bucket-1/Resource
  MyHelloConstructBucket2C1DA3656:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: hello-cdk-1/MyHelloConstruct/Bucket-2/Resource
  MyHelloConstructBucket398A5DE67:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: hello-cdk-1/MyHelloConstruct/Bucket-3/Resource
  MyUserDC45028B:
    Type: AWS::IAM::User
    Metadata:
      aws:cdk:path: hello-cdk-1/MyUser/Resource
  MyUserDefaultPolicy7B897426:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - s3:GetObject*
              - s3:GetBucket*
              - s3:List*
            Effect: Allow
            Resource:
              - Fn::GetAtt:
                  - MyHelloConstructBucket0DAEC57E1
                  - Arn
              - Fn::Join:
                  - ""
                  - - Fn::GetAtt:
                        - MyHelloConstructBucket0DAEC57E1
                        - Arn
                    - /*
          - Action:
              - s3:GetObject*
              - s3:GetBucket*
              - s3:List*
            Effect: Allow
            Resource:
              - Fn::GetAtt:
                  - MyHelloConstructBucket18D9883BE
                  - Arn
              - Fn::Join:
                  - ""
                  - - Fn::GetAtt:
                        - MyHelloConstructBucket18D9883BE
                        - Arn
                    - /*
          - Action:
              - s3:GetObject*
              - s3:GetBucket*
              - s3:List*
            Effect: Allow
            Resource:
              - Fn::GetAtt:
                  - MyHelloConstructBucket2C1DA3656
                  - Arn
              - Fn::Join:
                  - ""
                  - - Fn::GetAtt:
                        - MyHelloConstructBucket2C1DA3656
                        - Arn
                    - /*
          - Action:
              - s3:GetObject*
              - s3:GetBucket*
              - s3:List*
            Effect: Allow
            Resource:
              - Fn::GetAtt:
                  - MyHelloConstructBucket398A5DE67
                  - Arn
              - Fn::Join:
                  - ""
                  - - Fn::GetAtt:
                        - MyHelloConstructBucket398A5DE67
                        - Arn
                    - /*
        Version: "2012-10-17"
      PolicyName: MyUserDefaultPolicy7B897426
      Users:
        - Ref: MyUserDC45028B
    Metadata:
      aws:cdk:path: hello-cdk-1/MyUser/DefaultPolicy/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.39.0,@aws-cdk/assets=0.39.0,@aws-cdk/aws-cloudwatch=0.39.0,@aws-cdk/aws-ec2=0.39.0,@aws-cdk/aws-events=0.39.0,@aws-cdk/aws-iam=0.39.0,@aws-cdk/aws-kms=0.39.0,@aws-cdk/aws-lambda=0.39.0,@aws-cdk/aws-logs=0.39.0,@aws-cdk/aws-s3=0.39.0,@aws-cdk/aws-s3-assets=0.39.0,@aws-cdk/aws-sns=0.39.0,@aws-cdk/aws-sns-subscriptions=0.39.0,@aws-cdk/aws-sqs=0.39.0,@aws-cdk/aws-ssm=0.39.0,@aws-cdk/core=0.39.0,@aws-cdk/cx-api=0.39.0,@aws-cdk/region-info=0.39.0,jsii-runtime=Python/3.7.0

As you can see, this template includes a bunch of resources:

ご覧のとおり、このテンプレートには4つのリソースが含まれています。

  • AWS::SQS::Queue - キュー
  • AWS::SNS::Topic - トピック
  • AWS::SNS::Subscription - キューとトピックの間のサブスクリプション
  • AWS::SQS::QueuePolicy - このトピックがメッセージをキューに送信できるようにするIAMポリシー
  • AWS::S3::Bucket - 4つの S3 buckets
  • AWS::IAM::User - IAM user
  • すべてのリソースに適切なアクセス許可を付与するためのさまざまなIAMポリシー。

AWS::CDK::Metadata リソースは、自動的にすべてのスタックへのツールキットによって追加されます。AWS CDKチームが分析のために使用し、セキュリティ上の問題があるバージョンを特定できるようにします。詳細については、AW​​S CDKユーザーガイドのバージョンレポートを参照してください。このワークショップの残りの説明では、メタデータリソースに関する詳細は省略しております。