如何在 cf 模板中设置出口时使用 fn::att 或 fn::select 或任何其他内置函数获取当前 VPC CIDR
How to get current VPC CIDR using fn::att or fn::select or anyother builtin functions while setting egress in cf template
我看到有 Fn::GetAtt 和 Fn::Select 功能,但我如何使用此类或任何其他可以 return VPC CIDR 并在出口上设置为 CidrIp 属性下面列出(cf tempalate)
"OutboundRule": {
"Type": "AWS::EC2::SecurityGroupEgress",
"Properties":{
"IpProtocol": "tcp",
"FromPort": "80",
"ToPort": "80",
"CidrIp" : "<VPC Cidr>"
}
}
如果您已经在同一模板中将您的 VPC 声明为另一个资源,您可以像这样使用 Fn::GetAtt
来引用它的 CIDR(假设 "MyVPC" 是您为该 VPC 指定的逻辑名称资源):
{
"OutboundRule": {
"Type": "AWS::EC2::SecurityGroupEgress",
"Properties":{
"IpProtocol": "tcp",
"FromPort": "80",
"ToPort": "80",
"CidrIp" : { "Fn::GetAtt" : [ "MyVPC", "CidrBlock" ] }
}
}
Fn::GetAtt
可以 return 的属性特定于它 return 从中获取它们的资源类型,并且它支持的资源类型和属性数量有限.您可以找到 list of supported resources and attributes here.
如果您没有在同一模板中声明 VPC,另一种选择是将 CIDR 作为 CloudFormation parameter 传递并使用 { "Ref": "<parmeterName>" }
代替 Fn::GetAtt
。
更新:
Announced on Sept 19, 2016, you can use cross-stack references by exporting and importing values 在堆栈之间共享值而不是参数。
示例(在 YAML 中,而不是在同一公告中提供的 JSON):
部分模板 1:
...
Outputs:
VpcCidrBlock:
Description: My VPC's CIDR block.
Value:
Fn::GetAtt:
- MyVpc
- CidrBlock
Export:
Name: MyVpcCidrBlock
部分模板 2:
...
Resources:
Type: "AWS::EC2::SecurityGroupEgress"
Properties:
CidrIp:
Fn::ImportValue: MyVpcCidrBlock
FromPort: 80
IpProtocol: tcp
ToPort: 80
注意:必须先在同一区域中从模板 1 创建堆栈,然后才能从模板 2 创建堆栈。
我看到有 Fn::GetAtt 和 Fn::Select 功能,但我如何使用此类或任何其他可以 return VPC CIDR 并在出口上设置为 CidrIp 属性下面列出(cf tempalate)
"OutboundRule": {
"Type": "AWS::EC2::SecurityGroupEgress",
"Properties":{
"IpProtocol": "tcp",
"FromPort": "80",
"ToPort": "80",
"CidrIp" : "<VPC Cidr>"
}
}
如果您已经在同一模板中将您的 VPC 声明为另一个资源,您可以像这样使用 Fn::GetAtt
来引用它的 CIDR(假设 "MyVPC" 是您为该 VPC 指定的逻辑名称资源):
{
"OutboundRule": {
"Type": "AWS::EC2::SecurityGroupEgress",
"Properties":{
"IpProtocol": "tcp",
"FromPort": "80",
"ToPort": "80",
"CidrIp" : { "Fn::GetAtt" : [ "MyVPC", "CidrBlock" ] }
}
}
Fn::GetAtt
可以 return 的属性特定于它 return 从中获取它们的资源类型,并且它支持的资源类型和属性数量有限.您可以找到 list of supported resources and attributes here.
如果您没有在同一模板中声明 VPC,另一种选择是将 CIDR 作为 CloudFormation parameter 传递并使用 { "Ref": "<parmeterName>" }
代替 Fn::GetAtt
。
更新: Announced on Sept 19, 2016, you can use cross-stack references by exporting and importing values 在堆栈之间共享值而不是参数。
示例(在 YAML 中,而不是在同一公告中提供的 JSON):
部分模板 1:
...
Outputs:
VpcCidrBlock:
Description: My VPC's CIDR block.
Value:
Fn::GetAtt:
- MyVpc
- CidrBlock
Export:
Name: MyVpcCidrBlock
部分模板 2:
...
Resources:
Type: "AWS::EC2::SecurityGroupEgress"
Properties:
CidrIp:
Fn::ImportValue: MyVpcCidrBlock
FromPort: 80
IpProtocol: tcp
ToPort: 80
注意:必须先在同一区域中从模板 1 创建堆栈,然后才能从模板 2 创建堆栈。