AWS CloudFormation を使用して、VPC のメインルートテーブルにルートを追加する方法を教えてください。

最終更新日: 2019 年 5 月 8 日

AWS CloudFormation を使い、Amazon Virtual Private Cloud (Amazon VPC) を作成した際にデフォルトとして作成されたメインルートテーブルに、AWS CloudFormation を使いルートを追加したいと思います。

簡単な説明

AWS CloudFormation では、AWS CloudFormation を使用して VPC を作成 した時にデフォルトで作成されるメインのルートテーブルを認識できません。これは、ルートテーブルについての情報が VPC と AWS CloudFormation 間では手渡されないということを意味します。つまり、メインルートテーブルからは、ルートを追加または削除することができません。AWS CloudFormation テンプレートからメインルートテーブルを参照できないためです。

解決方法

この問題は、AWS CloudFormation テンプレートにある AWS Lambda-backed カスタムリソースを使用して解決できます。このテンプレートでは、VPC に関連付けられたメインルートテーブルの ID を取得するため、Lambda 関数を利用します。

1.    RouteTable.template およびRoutetable.py ファイルを、AWS GitHub リポジトリから ダウンロードします。

2.    Lambda 関数 のために Routetable.zip という名前の zip ファイルを作成します。次の例を参照してください。

-> Routetable.zip
        |
        |-> Routetable.py

重要: 必ず Routetable.py が、zip ファイルのルートレベルに配置されるようにしてください。

3.    Amazon S3 コンソールの AWS CloudFormation スタックと同じ AWS リージョンにある、Amazon Simple Storage Service (Amazon S3) バケットに、zip ファイルをアップロードします。AWS コマンドラインインターフェイス (AWS CLI) を使い zip ファイルをアップロードするには、Routetable.zip フォルダから次のコマンドを実行します。

aws s3 cp ./Routetable.zip s3://awsexamplebucket1/Routetable.zip

4.    RouteTable.template ファイルを使ってスタックを起動するには、AWS CloudFormation コンソールによるか、次の AWS CLI コマンドを使用します。

aws cloudformation create-stack --stack-name myvpcstack --template-body file://RouteTable.template --parameters ParameterKey=Bucket,ParameterValue=awsexamplebucket1 ParameterKey=Key,ParameterValue=Routetable.zip ParameterKey=Lambdahandler,ParameterValue=Routetable --capabilities CAPABILITY_NAMED_IAM --region us-east-1

重要: AWS CloudFormation スタックを作成または更新する際には、zip ファイルをアップロードした Amazon S3 バケット (awsexamplebucket1) の名前と共に、zip ファイル名 (Routetable.zip) と Lambda 関数を作成したファイル名 (Routetable) を、パラメータとして渡す必要があります。

スタックは VPC を作成し、Lambda-backed カスタムリソースを使用して、VPC のメインルートテーブル ID をフェッチするようになります。この ID は、AWS::EC2::Route において、メインルートテーブルにパブリックのルートを追加するために使われます。その後、スタックがルートテーブル ID を表示出力します。


この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合