Create CloudFormation Template using AWS CDK (TypeScript)

AWS CDK is a great tool to define our AWS Infrastructure by code. If we using TypeScript, we can get type supp […]

広告ここから
広告ここまで

目次

    AWS CDK is a great tool to define our AWS Infrastructure by code. If we using TypeScript, we can get type support to define and understand AWS services.

    Why export CloudFormation?

    AWS CDK can deploy CloudFormation by itself. But, sometimes we need to get the CloudFormation stack templates.

    • Provide the template to AWS MarketPlace
    • Upload the template to AWS ServiceCatalog
    • Use the template into ASK CLI(v2)
    • etc…

    How can we export to CloudFormation template?

    AWS CDK has a cool utility! To use the SynthUtils.toCloudFormation method, we can easy to convert your CDK stack to CloudFormation JSON.

    import { Stack, Construct, StackProps, Fn, CfnMapping, App } from "@aws-cdk/core";
    import { SynthUtils } from '@aws-cdk/assert'
    import { CfnInstance } from "@aws-cdk/aws-ec2";
    
    // Example stack
    class DevStack extends Stack {
        constructor(scope: Construct, id: string, props?: StackProps) {
            super(scope, id, props)
            new CfnMapping(
                this,
                'OwnAMIID',
                {
                    mapping: {
                        "us-east-2": {
                          "ID": "ami-xxxxxxxx"
                        },
                        "us-east-1": {
                          "ID": "ami-yyyyyyyy"
                        }
                      }
                }
            )
            const ec2 = new CfnInstance(this, 'EC2', {
                imageId: Fn.findInMap(
                    'OwnAMIID',
                    this.region,
                    'ID'
                )
            })
        }
    }
    
    // Initialize Stack by AWS CDK
    const stack = new DevStack(new App(), 'test')
    
    // Convert to CloudFormation template
    const cfn = SynthUtils.toCloudFormation(stack)
    
    // STDOUT
    console.log(JSON.stringify(cfn))  

    Then, we can get template to execute the Script file using ts-node.

    % npx ts-node bin/dev.ts | jq .
    {
      "Mappings": {
        "OwnAMIID": {
          "us-east-2": {
            "ID": "ami-xxxxxxxx"
          },
          "us-east-1": {
            "ID": "ami-yyyyyyyy"
          }
        }
      },
      "Resources": {
        "EC2": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "ImageId": {
              "Fn::FindInMap": [
                "OwnAMIID",
                {
                  "Ref": "AWS::Region"
                },
                "ID"
              ]
            }
          }
        }
      }
    }

    広告ここから
    広告ここまで

    Random posts

    Home
    Search
    Bookmark