Ich bin frustriert in meinen Versuchen, eine Hierarchie von AWS CloudFormation-Stapeln rekursiv zu durchlaufen. Ich muss mir alle ihre Ressourcen ansehen.Scannen der Ressourcen einer Hierarchie von Cloudformationsstapeln
Erinnern Sie sich, dass ein CloudFormation-Stapel noch einen weiteren Stapel enthalten kann.
Es scheint, dass die Beschreibung dieser Teilstapel, die von describe_stack_resources
zurückgegeben werden, nicht sinnvoll ist.
Ein Beispiel für mein Problem folgt:
Boto3 verwenden, können wir dieser Stapel sehen hat acht Teilstapel:
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']
Seltsamerweise, all diese Teilstapel werden als mit den Namen der berichtet Eltern, die sie erstellt, obwohl sie verschiedene PhysicalResourceId
s haben.
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
Wenn ich für die Ressourcen des Unterstapels bitten, ihre physische ID verwenden es nicht funktioniert, habe ich stattdessen die Ressourcen des Mutter:
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
Gibt es eine Abhilfe?
Ok, das funktioniert; Vielen Dank! Aber zwei Dinge. Ich finde es sehr merkwürdig, dass Sie eine ID an einen Parameter übergeben, der einen Namen hat. Zuerst schreiben Sie StackName = x ['PhysicalResourceId'].Zweitens, während es nett ist, dass sie dokumentieren, was wie bizarres Verhalten aussieht, gibt die Frage nach den Kindern von X die Kinder des Elternteils von X zurück. Ist meine Verwirrung angemessen oder gibt es einen Grund, warum ich nicht verwirrt werden sollte. –
Ich habe einen alternativen Fix gehackt, d. H. Den Namen des Stacks aus der PhysicalResourceID herausgezogen. stack_physical_resource_id.split (':') [5] .split ('/') [1] –
Ich glaube nicht, dass die Zupfroutine notwendig ist - für ein ['AWS :: CloudFormation :: Stack '] (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html) Ressource, die 'PhysicalResourceID' (was ist [returned] (http://docs.aws.amazon.com/AWSCloudFormation/ letzte/UserGuide/aws-Eigenschaften-stack.html # d0e43649) von der ['Ref'] (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) intrinsische Funktion in einer Vorlage) _ist_ die Stack-ID und für 'DescribeStackResources'' StackName' können Sie entweder den Namen des Stacks oder seine Stack-ID angeben. – wjordan