業務時間だけ使うAWSリソースがあり、それをCloudFormationを使って管理しているという場合、Lambdaからスタックの作製・削除ができると便利です。

削除するのは簡単なのですが、作成するときは少し手こずったのでそれを書いておきます。

作成

TemplateURLにS3バケット内のファイルを指定する場合は次のようにします。 ※httpsとスキームが付きますが、Webホスティングの設定は必要ありません。

https://s3-ap-northeast-1.amazonaws.com/(S3バケット名)/ファイル名

ということで作成するときはこんな感じになります。

    cf = boto3.client('cloudformation')
    res = cf.create_stack(
        StackName=(スタック名),
        TemplateURL='https://s3-ap-northeast-1.amazonaws.com/(S3バケット名)/ファイル名',
        Parameters=[
            {
                'ParameterKey': 'パラメータ名1',
                'ParameterValue': '設定値1'
            },
            {
                'ParameterKey': 'パラメータ名2',
                'ParameterValue': '設定値2'
            },
        ],
        Capabilities=[
            'CAPABILITY_NAMED_IAM',
        ],
    )

削除

削除はスタック名を指定するだけなのでとても簡単。

    cf = boto3.client('cloudformation')
    res = cf.delete_stack(
        StackName=(スタック名)
    )