AWS CloudFormationスタックの階層 を再帰的に掃除しようとしています。 のすべてのリソースを参照する必要があります。階層構造のリソースをスキャンする
1つのCloudFormationスタックに、もう1つのスタックを含めることができます。
describe_stack_resources
によって返されたこれらのサブスタックの説明は役に立ちません。
私の問題の例を以下に示します。
In [22]: resources = cfn.describe_stack_resources(StackName=my_stack_name)['StackResources']
In [23]: len(resources)
Out[23]: 8
In [24]: [r['ResourceType'] for r in resources]
Out[24]:
['AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack',
'AWS::CloudFormation::Stack']
不思議
、これらすべてのsubstacksが の名前を持つと報告されています。私たちは、このスタックは持って見ることができるBoto3を使用
は8 substacksを持っています親はPhysicalResourceId
を区別していますが、それらを作成した親です。私が代わりに親のリソース取得
In [25]: [r['StackName'] == my_stack_name for r in resources]
Out[25]: [True, True, True, True, True, True, True, True]
In [29]: resources[0]['PhysicalResourceId'] == resources[1]['PhysicalResourceId']
Out[29]: False
私は彼らの物理的なIDを使用してsubstackのリソースを要求した場合、それは動作しません、:
In [32]: p_id_0 = resources[0]['PhysicalResourceId']
In [33]: child_resources = cfn.describe_stack_resources(PhysicalResourceId=p_id_0)['StackResources']
In [34]: child_resources == resources
Out[34]: True
は、回避策はありますか?
ありがとう!しかし、2つのこと。私はあなたが名前を取るパラメータにIDを渡すことは非常に興味があることがわかります。まず、StackName = x ['PhysicalResourceId']と記述します。第二に、Xの子どもたちにXの親を返すようなビザのような動作をしていると書いているのはいいのですが、私の混乱は妥当かどうか、それを混同してはいけない理由があります。 –
私は、代替の修正をハッキングしました。つまり、PhysicalResourceIDからスタックの名前を抜き出しました。 –
[AWS :: CloudFormation :: Stack'](http://)のために、抜粋ルーチンが必要ではないと思います。 /docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html)リソース、 'PhysicalResourceID'(返されるもの)(http://docs.aws.amazon.com/AWSCloudFormation/最新の/ UserGuide/aws-properties-stack.html#d0e43649)['Ref'](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html)テンプレート内の組み込み関数)_is_スタックID、 'DescribeStackResources'の' StackName'には、スタックの名前かスタックIDのいずれかを指定できます。 – wjordan