Come faccio a passare valori tra stack annidati all'interno dello stesso stack principale in AWS CloudFormation?
Desidero passare o condividere un valore tra due stack annidati all'interno dello stesso stack principale in AWS CloudFormation.
Risoluzione
La seguente risoluzione utilizza le risorse NestedStackA e NestedStackB di AWS::CloudFormation::Stack che fanno parte dello stesso stack principale denominato RootStack. Passi un valore da NestedStackA a NestedStackB. NestedStackA ha creato la risorsa del bucket S3 e NestedStackB ha creato la policy del bucket S3 collegata al bucket S3.
Completa i seguenti passaggi:
-
Nella sezione Output del modello CloudFormation per NestedStackA, includi il valore che desideri condividere.
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.Nota: nei modelli precedenti, sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket. La sezione Outputs dei modelli precedenti restituisce il nome del bucket da !Ref.
-
Nella sezione Parametri del modello CloudFormation per NestedStackB, includi un parametro per utilizzare il nome del bucket S3 dall'output di NestedStackA.
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/*' -
Per passare un valore da NestedStackA a NestedStackB, configura RootStack in modo che utilizzi la funzione Fn::GetAtt nella sezione Parametro per NestedStackB. Utilizza l'ID logico di NestedStackA e il valore di output del nome del bucket nel formato 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
Informazioni correlate
Incorpora stack all'interno di altri stack utilizzando stack nidificati
- Argomenti
- Management & Governance
- Lingua
- Italiano
