0

EC2インスタンスを設定するクラウドフォーメーションがあります。私は現在、EC2インスタンスのサブネットIDと、セキュリティグループのVPC ID(EC2インスタンスによって順番に使用される)を指定するためにパラメータを使用しています。クラウドフォーメーション:サブネットIDからVPCを取得する方法

私の状況では、指定されたサブネットIDがVPCの一部である必要があり、パラメータにサブネットIDを指定するだけでよいです。しかし、私はサブネットID(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html)からVPCを引き出す方法を見つけることができません。

リソース属性を返すためにGetAtt関数を使うことができます。リソースプロパティを返すのと同等のものがありますか?

+1

これは便利な機能ですが、私はCloudFormationにネイティブな方法があるとは思いません。それが十分であれば、ラムダ支援カスタムリソースを使ってルックアップを行うことができます(同様の例:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-custom-resources-lambda-lookup -amiids.html)。 – jarmod

答えて

1

ドキュメントFn:GetAttから、サブネットのAvailabilityZoneおよびIpv6CidrBlocksの詳細のみを取得できます。 CFnテンプレートでは、指定されたサブネットのVpcIdを取得するための組み込みサポートはありません。

しかし、回避策があります。 aws-cli documentationを使用している場合は、describe-subnetsメソッドを使用して、必要なサブネットのVpcIdを取得し、入力としてCloudformテンプレート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を取得し、それをcreate/updateスタックコマンドに渡す必要があります。 – n00b

1

私はcli2cloudformationという小さなプロジェクトを作成しました。これを使用すると、クラウドのスタック内でcliコマンドを実行し、コマンドの結果を使用することができます。

hereにチェックしてください。それがあなたを助けることを願っています

+0

ああ、それは素晴らしい汎用ソリューションです、ありがとう。 CFの制限のための良い回避策。 – ysalmi

関連する問題