【发布时间】:2021-09-28 23:52:50
【问题描述】:
我有一个组织帐户,其下有多个客户帐户。每个托管账户中都有多个 VPC。每个托管账户中的一个 VPC 将有一个标签“ServiceName”:“True”,而该账户中的其他 VPC 将有一个“ServiceName”:“False”标签。
我正在尝试创建一个堆栈集,其堆栈专用于创建一个附加了入口规则的安全组,我需要将该安全组的“VpcId”属性动态分配为 VPC 的“VpcId”该帐户中的 "ServiceName":"True" 标记。
显然,如果我没有在 VpcId 字段中指定 VPC ID,它会创建安全组,但会将其附加到该帐户的默认 VPC。我也无法手动指定 VPC,因为它将在多个账户中运行。通过运行某种函数来提取“VpcId”,我只能选择搜索和分配 VPC。
堆栈本身运行良好,因为我在测试环境中运行它并指定了 VPC ID。因此,只需动态获取“VpcId”即可。
最后,我想做一些类似这样的事情:
{
"Parameters": {
"MyValidVPCID": {
"Description": "My Valid VPC ID where ServiceName tag equals true. Do some Lambda Kung Fu to get the VPC ID using something that would let me parse the equivalent of aws ec2 describe-vpcs command.",
"Type": "String"
}
},
"Resources": {
"SG": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Security Group Desc.",
"Tags": [
{
"Key": "Key1",
"Value": "ABC"
},
{
"Key": "Key2",
"Value": "DEF"
}
],
"VpcId" : { "Ref" : "MyValidVPCID" }
}
},
"SGIngressRule01":
{
"Type": "AWS::EC2::SecurityGroupIngress",
"DependsOn": "SG",
"Properties": {
"GroupId" : { "Fn::GetAtt": [ "SG", "GroupId" ] },
"Description": "Rule 1 description",
"IpProtocol": "tcp",
"FromPort": 123,
"ToPort": 456,
"CidrIp": "0.0.0.0/0"
}
}
}
我真的不知道这是否是一种可行的方法,或者根据标签恢复 VpcId 所需的额外步骤是什么。这就是为什么如果我能从曾经使用 CloudFormation 的人那里获得一些意见,那将对我有很大帮助。
【问题讨论】:
-
仍在努力,从星期四开始我就一直不在办公室。你绝对把我引向了正确的方向!到目前为止,我能够生成一个 python Lambda 函数来根据所需的过滤器返回我正在寻找的 VPC ID。正如我们所说,我正在努力将其植入我的 CloudFormation 模板中。我们会看看它是如何运行的,一旦它运行起来就会报告!
标签: amazon-web-services amazon-cloudformation