0

我有一個Cloud Formation來設置EC2實例。我目前使用參數指定EC2實例的子網ID以及安全組的VPC Id(EC2實例依次使用)。雲形成:如何從子網獲得VPC Id

在我的情況下,指定的子網ID需要成爲VPC的一部分,我只想在參數中指定子網ID。但我找不到從子網ID中獲取VPC的方法(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html

我看到GetAtt函數可用於返回資源屬性。是否有相當於返回資源屬性的東西?

+1

這將是一個有用的功能,但我不相信CloudFormation有一個本地的方式來做到這一點。如果它足夠重要,也許您可​​以使用Lambda支持的自定義資源來執行查找(類似示例:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-custom-resources-lambda-lookup -amiids.html)。 – jarmod

回答

1

從文檔Fn:GetAtt,您只能檢索Subnet的AvailabilityZone和Ipv6CidrBlocks詳細信息。在CFn模板中沒有內置的支持來獲得給定子網的VpcId。

雖然有一個解決辦法。如果使用的是aws-cli documentation,則可以使用describe-subnets方法獲取所需子網的VpcId,並將其作爲輸入傳遞給Cloudformation模板create_stack調用。

即使您使用的是任何SDK,此方法仍然有效。例如,在Java中。

//pseudo code only! 
DescribeSubnetsRequest request = new DescribeSubnetsRequest(); 
request.withSubnetIds("subnet-abcdefgh"); 

DescribeSubnetsResult result = awsClient.describeSubnets(request); 
String myVpc = result.getSubnets().get(0).getVpcId(); 

// add the above VPC Id to the parameters of your Cloud formation template create stack request. 

希望這會有所幫助。

+0

感謝您的建議。理想情況下,我希望直接在Cloud Formation控制檯中完成,但這似乎不可行。 – ysalmi

+0

正如krisnik所提到的,你需要獲得CFN之外的子網的VPC,並將它傳遞給創建/更新堆棧命令。 – n00b

1

我創建了一個名爲cli2cloudformation的小項目。使用該命令,您可以在您的cloudformation堆棧中執行cli命令並使用命令的結果。

只需檢查它here。我希望它能幫助你。

+0

啊,這是一個很好的通用解決方案,謝謝。爲CF的侷限性提供良好的解決方法。 – ysalmi

相關問題