Mar*_*tik 10 yaml amazon-web-services aws-cloudformation
我试图在 AWS Cloudformation YAML 文件中实现类似于下面的内容:
AWSTemplateFormatVersion: 2010-09-09
testAttribute = "test"
Resources:
Lambda:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.7
Role: !GetAtt iam.Arn
MemorySize: 128
Timeout: 10
Handler: lambda_function.lambda_handler
FunctionName: "testName"+${testAttribute}
Description: 'This is my lambda'
Code:
S3Bucket: myBucket
S3Key: "lambda/testName"+${testAttribute}+".zip"
Run Code Online (Sandbox Code Playgroud)
我知道上面不太正确,但在搜索如何实现它时找不到好的答案。有人对这个问题有一些指导吗?
Dou*_*roa 13
这取决于用例,但如果“变量”是静态的并且您在部署堆栈时不需要更改它,我建议使用替代解决方案,即使用映射部分。
这允许您定义一些静态值,而无需在部署堆栈时发送它们(您将拥有更清晰的部署命令,并且逻辑将位于模板端而不是部署端)。
在本例中,我使用带有映射的!Sub内部函数(您可以使用 !Sub 设置要替换的多个变量):
AWSTemplateFormatVersion: 2010-09-09
Mappings:
attributes:
lambda:
testAttribute: "test"
Resources:
Lambda:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.7
Role: !GetAtt iam.Arn
MemorySize: 128
Timeout: 10
Handler: lambda_function.lambda_handler
FunctionName: !Sub
- "testName${attr}"
- {attr: !FindInMap [attributes, lambda, testAttribute]}
Description: 'This is my lambda'
Code:
S3Bucket: myBucket
S3Key: !Sub
- "lambda/testName${attr}.zip"
- {attr: !FindInMap [attributes, lambda, testAttribute]}
Run Code Online (Sandbox Code Playgroud)
注意:映射具有强制性的三级嵌套,在设计解决方案时请考虑到这一点
AWSTemplateFormatVersion: 2010-09-09
Parameters:
testAttribute:
Type: String
Default: test
Resources:
Lambda:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.7
Role: !GetAtt iam.Arn
MemorySize: 128
Timeout: 10
Handler: lambda_function.lambda_handler
FunctionName: !Sub "testName${testAttribute}"
Description: 'This is my lambda'
Code:
S3Bucket: myBucket
S3Key: !Sub "lambda/testName${testAttribute}.zip"
Run Code Online (Sandbox Code Playgroud)
[已编辑错字]
| 归档时间: |
|
| 查看次数: |
12261 次 |
| 最近记录: |