Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie übergebe ich Werte zwischen verschachtelten Stacks innerhalb desselben übergeordneten Stacks in AWS CloudFormation?
Ich möchte einen Wert zwischen zwei verschachtelten Stacks innerhalb desselben übergeordneten Stacks in AWS CloudFormation weitergeben oder teilen.
Lösung
Die folgende Lösung verwendet die AWS::CloudFormation::Stack-Ressourcen NestedStackA und NestedStackB, die Teil desselben übergeordneten Stacks sind, der als RootStack bezeichnet wird. Du übergibst einen Wert von NestedStackA an NestedStackB. NestedStackA hat die S3-Bucket-Ressource erstellt, und NestedStackB hat die S3-Bucket-Richtlinie erstellt, die an den S3-Bucket angehängt ist.
Führe die folgenden Schritte aus:
-
Gib im Abschnitt Ausgaben deiner CloudFormation-Vorlage für NestedStackA den Wert ein, den du teilen möchtest.
JSON:{ "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "DeletionPolicy": "Retain", "Properties": { "BucketName": "DOC-EXAMPLE-BUCKET" } } }, "Outputs": { "BucketNameOutput": { "Value": { "Ref" : "S3Bucket" }, "Description": "You can refer to any resource from the template." } } }YAML:
Resources: S3Bucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Retain Properties: BucketName: DOC-EXAMPLE-BUCKET Outputs: BucketNameOutput: Value: !Ref S3Bucket Description: You can refer to any resource from the template.Hinweis: Ersetze in den vorherigen Vorlagen DOC-EXAMPLE-BUCKET durch deinen Bucket-Namen. Der Abschnitt Ausgaben der vorherigen Vorlagen gibt den Bucket-Namen von !Ref zurück.
-
Füge im Abschnitt Parameter der CloudFormation-Vorlage für NestedStackB einen Parameter hinzu, um den S3-Bucket-Namen aus der Ausgabe von NestedStackA zu verwenden.
JSON:{ "Parameters": { "BucketNameValueParameter": { "Type": "String", "Description": "The shared bucket name value from nestedStackA that will be passed to this parameter from the parent stack." } }, "Resources": { "SampleBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "BucketNameValueParameter" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:aws:s3:::", { "Ref": "DOC-EXAMPLE-BUCKET" }, "/*" ] ] }, "Principal": "*", "Condition": { "StringLike": { "aws:Referer": [ "http://www.example.com/*", "http://example.net/*" ] } } } ] } } } } }YAML:
Parameters: BucketNameValueParameter: Type: String Description: >- The shared bucket name value from nestedStackA that will be passed to this parameter from the parent stack. Resources: SampleBucketPolicy: Type: 'AWS::S3::BucketPolicy' Properties: Bucket: !Ref BucketNameValueParameter PolicyDocument: Version: 2012-10-17 Statement: - Action: - 's3:GetObject' Effect: Allow Resource: !Join - '' - - 'arn:aws:s3:::' - !Ref DOC-EXAMPLE-BUCKET - /* Principal: '*' Condition: StringLike: 'aws:Referer': - 'http://www.example.com/*' - 'http://example.net/*' -
Um einen Wert zwischen NestedStackA und NestedStackB zu übertragen, konfiguriere RootStack so, dass die Funktion Fn::GetAtt im Abschnitt Parameter für NestedStackB verwendet wird. Verwende die logische ID von NestedStackA und den Ausgabewert des Bucket-Namens im Format Outputs.NestedStackOutputName.
JSON:{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "NestedStackA" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/<pathway to .template for NestedStack A>" } }, "NestedStackB" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/<pathway to .template for NestedStack B>", "Parameters" : { "BucketNameValueParameter" : { "Fn::GetAtt": [ "NestedStackA", "Outputs.BucketNameOutput" ] } } } } } }YAML:
AWSTemplateFormatVersion: 2010-09-09 Resources: NestedStackA: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/<pathway to .template for NestedStack A>' NestedStackB: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/<pathway to .template for NestedStack B>' Parameters: BucketNameValueParameter: !GetAtt - NestedStackA - Outputs.BucketNameOutput
Ähnliche Informationen
Stacks mithilfe verschachtelter Stacks in andere Stacks einbetten
- Themen
- Management & Governance
- Sprache
- Deutsch
