AWS CDK に触れてみた。AWS CDK とは AWS Cloud Development Kit の略称で、日本語にすると AWS クラウド開発キットのこと。
AWS CloudFormation の設定は通常は JSON や YAML 形式で設定するが、とてもじゃないが人間が書ける代物ではない。

AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
  MyEC2Instance: #An inline comment
    Type: "AWS::EC2::Instance"
    Properties: 
      ImageId: "ami-0ff8a91507f77f867" #Another comment -- This is a Linux AMI
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:

もはや英語だ。CDK はこのファイルを生成するのに手慣れたプログラミング言語を利用できるよ、というツールである(たぶん)。
自分が手慣れた言語である、TypeScript でも書くことができた。プログラミングかのように設定が書けるってことだと認識している。

試してみた CDK コマンドたち

# cdkプロジェクトの作成
cdk init app --language typescript

# 新しい環境をデプロイする際に、最初の一回に必要なコマンド。S3バケットなど、AWS CDKが利用するキットをCloudFormationスタックとしてAWSにデプロイする
cdk bootstrap

# aws cdkのコードを合成してCloudFormationテンプレートを表示する。コードが正しいかの確認がMacローカルで可能
cdk synth

# 書いたコードをAWSにデプロイする
cdk deploy
cdk deploy --all
cdk deploy FirstCdkStack

こんなかんじのスタックを書いてみた。

import { CfnOutput, Duration, Stack, StackProps, CfnParameter } from 'aws-cdk-lib';
import { Construct } from 'constructs';
// import * as sqs from 'aws-cdk-lib/aws-sqs';
import { Bucket } from 'aws-cdk-lib/aws-s3'

export class FirstCdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const duration = new CfnParameter(this, 'duration', {
      type: 'Number',
      default: 6,
      minValue: 1,
      maxValue: 10
    })


    const myBucket = new Bucket(this, 'someBucket', {
      lifecycleRules: [{
        expiration: Duration.days(duration.valueAsNumber)
      }]
    })

    new CfnOutput(this, 'mybucket', {
      value: myBucket.bucketName
    })
  }
}

おお!

ちゃんとできてる。AWS凄いな。これが Infrastructure as Code ってやつか。