[英]Passing parameters from parent stack to child stack in nested stack - Cloudformation
[英]Passing values from parent stack to nested stack for Cloudformation
我是嵌套堆棧的新手,我正在嘗試將輸入參數從父模板傳遞給子模板。 我的父堆棧如下所示:
AWSTemplateFormatVersion: "2010-09-09"
Transform: 'AWS::Serverless-2016-10-31'
Description: "ParentStack with all child stack"
Parameters:
AccountName:
Description: Please Enter valid Account Name.
Type: "CommaDelimitedList"
Default: "citi"
Region:
Description: Enter Region
Type: "CommaDelimitedList"
Default: "us-east-2"
S3BucketName:
Type: "CommaDelimitedList"
Default: ""
S3KeyName:
Type: "CommaDelimitedList"
Default: "Test-LambdaFunction.zip"
Resources:
LambdaStack1:
Type: "AWS::CloudFormation::Stack"
Properties:
Parameters:
TemplateURL: https://test272t3.s3.us-east-2.amazonaws.com/CFTemplates/lambda.yaml
CodeUri:
Bucket: Fn:Join [ ' ', [!Ref S3BucketName] ]
Key: Fn::Join [ ' ', [!Ref S3KeyName] ]
S3Stack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://test272t3.s3.us-east-2.amazonaws.com/CFTemplates/s3child.yaml
Parameters:
BucketName: <<not sure how !sub can be paased in parent stack>>
AccessControl: PublicReadWrite
VersioningConfiguration:
Status: Suspended
部分子模板如下:
Parameters:
AccountName:
Description: Please Enter valid Account Name.
Type: String
Default: citi
Region:
Description: Enter Region
Type: String
Default: us-east-2
S3BucketName:
Type: "String"
Default: ""
S3KeyName:
Type: "String"
Default: "MeghFlow-DBConnMgmt-Lambda-DBConnMgmtFunction.zip"
testLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri:
Bucket: !Ref S3BucketName
Key: !Ref S3KeyName
Handler: com.testff.testinghand.dbconnmgmt.lambda.testLambda::handleRequest
Runtime: java8
MemorySize: 1024
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
REGION: us-east-2
DYNAMODB_NAME: DBConnectionInfo
ArtifactBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Delete
Properties:
BucketName: !Sub ${AccountName}-${Region}-artifacts
AccessControl: PublicReadWrite
VersioningConfiguration:
Status: Suspended
問題:我不太確定如何將輸入參數從父級傳遞給子級。 我提到了幾個鏈接,但我更困惑於何時輸入類型必須是 CommaDelimitedList 還是字符串。 我什至嘗試在父級和子級中將 param 類型保持為字符串,但仍然出現以下錯誤:“屬性參數的值必須是具有字符串(或簡單類型)屬性的對象”,並且在使用 Fn::join 時出現如下錯誤:“Fn::Join 對象需要兩個參數,(1) 字符串分隔符和 (2) 要連接的字符串列表或返回要連接的字符串列表(例如 Fn::GetAZs)的函數。”
已引用鏈接: 嘗試將參數從 Master 傳遞到子模板但沒有運氣。 任何人都可以指導我正確的方向。 提前致謝。
感謝@gandaliter 的指導。 根據上面標記的答案 CloudFormation 父堆棧只接受字符串而不接受任何對象級參數(參數下的子參數就像我上面代碼中的 CodeURI 一樣)。 我做了一些調整並將所有父模板更改為以下:注意:所有參數類型都設置為子模板和父模板中的字符串
AWSTemplateFormatVersion: "2010-09-09"
Transform: 'AWS::Serverless-2016-10-31'
Description: "ParentStack with all child stack"
Parameters:
apiGatewayStageName:
Type: String
Default: "dev"
HandlerName:
Type: String
Default: "com.test.tehgsaLambda::handleRequest"
S3BucketName:
Type: String
Default: ""
S3KeyName:
Type: String
Default: "Test-LambdaFunction.zip"
Resources:
LambdaStack1:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL:
Fn::Sub: "https://testyu2y73.s3.us-east-2.amazonaws.com/CFTemplates/lambda.yaml"
Parameters:
S3BucketName: !Ref S3BucketName
S3KeyName: !Ref S3KeyName
HandlerName: !Ref HandlerName
apiGatewayStageName: !Ref apiGatewayStageName
```
我想您上面給出的代碼並不是您嘗試過的唯一組合,並且參數在您的父級和子級堆棧之間並不完全一致,但無論如何,問題在於您正在嘗試給出以下參數值:
CodeUri:
Bucket: Fn:Join [ ' ', [!Ref S3BucketName] ]
Key: Fn::Join [ ' ', [!Ref S3KeyName] ]
和
VersioningConfiguration:
Status: Suspended
這兩個都是對象,而不是“字符串(或簡單類型)屬性”。 錯誤是說整個Parameters
對象必須只有簡單的值。
順便說一下, TemplateURL
需要在Parameters
對象之外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.