如何使用 AWS CloudFormation 将路由添加到我的 VPC 的主路由表?

上次更新时间:2019 年 5 月 8 日

我想使用 AWS CloudFormation 将路由添加到使用 AWS CloudFormation 创建 Amazon Virtual Private Cloud (Amazon VPC) 时默认创建的主路由表中。

简短描述

AWS CloudFormation 无法识别您使用 AWS CloudFormation 创建 VPC 时默认创建的主路由表。这意味着有关路由表的信息无法在您的 VPC 和 AWS CloudFormation 之间传递。因此,您不能将路由添加到主路由表,也不能从主路由表中移除路由,这是因为您不能引用来自您的 AWS CloudFormation 模板的主路由表。

解决方法

要解决此问题,您可以在 AWS CloudFormation 模板中使用 AWS Lambda 支持的自定义资源。该模板使用 Lambda 函数来检索与您的 VPC 关联的主路由表 ID。

1.    从 AWS GitHub 存储库下载 RouteTable.templateRoutetable.py 文件。

2.    为 Lambda 函数创建一个名为 Routetable.zip 的 Zip 文件。请参阅以下示例:

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

重要提示:请确保 Routetable.py 位于 Zip 文件的根级别。

3.    使用 Amazon S3 控制台将该 Zip 文件上传到与您的 AWS CloudFormation 堆栈位于同一 AWS 区域中的 Amazon Simple Storage Service (Amazon S3) 存储桶 。要使用 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 支持的自定义资源来获取与 VPC 的主路由表 ID。该 ID 用于在 AWS::EC2::Route 中向主路由表添加公有路由。然后,堆栈输出会显示路由表 ID。


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?