タダです.
ずっと起動しておく必要ないけど,特定の時間帯にだけ自動作成・削除される NAT Gateway が必要になり,SSM オートメーション を使ったパターンを考えてみたのでこの記事でどんなことをやったかを紹介します.
概要
SSM Automation の AWS-UpdateCloudFormationStack
を使って NAT Gateway の自動作成と削除を定期実行しています.このオートーメーションでは自動で作成される Lambda が指定して CloudFormation テンプレートでスタックの更新をかけます.パラメーターとして3つの定義が必要です.
パラメーター名 | 備考欄 |
---|---|
LambdaAssumeRole | CloudFormation を実行するための Lambda 用 IAM ロール |
StackNameOrId | 更新をかける CloudFormation スタック名 |
TemplateUrl | 自動作成と削除の S3 にアップロードしたテンプレートまでの URL |
NAT Gateway の作成と削除のテンプレートを予め S3 にアップロードしておくのですが,以下のようなテンプレートをアップロードしてます.Conditions
の中で作成と削除それぞれの処理を分岐しています.また,作成のテンプレートを使って NAT Gateway を作成しておきます.
作成用テンプレート
Parameters: CreateNatGateway: Description: Enable NAT Gateway. Type: String Default: true Conditions: CreateNatGateway: !Equals [true, !Ref EnableNatGateway] Resources: NatGatewayRoute: Type: AWS::EC2::Route Condition: EnableNatGateway Properties: RouteTableId: rtb-xxx DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref CreateNatGateway CreateNatGateway: Type: AWS::EC2::NatGateway Condition: EnableNatGateway Properties: AllocationId: !GetAtt NatGatewayEIP.AllocationId SubnetId: subnet-xxx NatGatewayEIP: Type: AWS::EC2::EIP Properties: Domain: vpc
削除用テンプレート
Parameters: CreateNatGateway: Description: Enable NAT Gateway. Type: String Default: false Conditions: CreateNatGateway: !Equals [true, !Ref EnableNatGateway] Resources: NatGatewayRoute: Type: AWS::EC2::Route Condition: EnableNatGateway Properties: RouteTableId: rtb-xxx DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref CreateNatGateway CreateNatGateway: Type: AWS::EC2::NatGateway Condition: EnableNatGateway Properties: AllocationId: !GetAtt NatGatewayEIP.AllocationId SubnetId: subnet-xxx NatGatewayEIP: Type: AWS::EC2::EIP Properties: Domain: vpc
そして,オートメーションの実行のロールと Lambda 用の IAM ロールも定義しておきます.オートメーションの実行のロールには SSM オートメーションの実行と Lambda を作成するための CloudFormation の権限を与えておき,Lambada の IAM ロールには CloudFormation の変更権限と NAT Gateway の作成と変更権限を与えておきます.
SSM オートメーションの定期実行設定
定期実行設定は CloudWatch Events で行い,作成と削除それぞれ作成します.これで定期的に実行され,事前に作ったスタック に対して更新がかかり,作成の時は NAT Gateway 作成とルートテーブルへの関連づけ処理が走り,削除の時は NAT Gateway 削除とルートテーブルから NAT Gateway の経路削除が走ります.なお,EIP は削除対象に入っていないようにしているので定期実行時には作成や削除されず元々確保した EIP を使えます.
まとめ
NAT Gateway の自動作成と削除を SSM オートメーションを使って実現したのでその設定内容をまとめました.Lambda を使ってこの辺を仕組み化することも考えたのですが,Lambda をメンテするよりも CloudFormation テンプレートを適宜使い分けて定期実行するように SSM オートメーションで定義するほうがメンテのコストは低いと思いこの手法を使いました.同じことをやりたいと思っている方の参考になれば幸いです!