And*_*age 8 yaml aws-cloudformation aws-lambda
我一直在我的 CloudFormation Yaml 模板中使用 !Sub 函数就好了。当将它用作对象属性值时,它对我有用
Object:
Property1: !Sub some-value-with-a-${variable}-in-it
Run Code Online (Sandbox Code Playgroud)
变量的值按预期被替换。
但是,我不知道如何在字符串数组的元素中使用 !Sub 函数
Array:
- !Sub some-value-with-a-${variable}-in-it
Run Code Online (Sandbox Code Playgroud)
该数组元素会被忽略。
我正在 SAM 模板创建 AWS::Serverless::Function 类型资源的上下文中尝试此操作。Policies 属性可以采用字符串数组:
lambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: api
FunctionName: !Sub api-${MyStageName}
Handler: Lambda:Api.Function::HandleAsync
Runtime: dotnetcore1.0
Policies:
- AWSLambdaBasicExecutionRole
- !Sub arn:aws:iam::${AWS::AccountId}:policy/some-policy
- arn:aws:iam::123456789:policy/another-policy
Run Code Online (Sandbox Code Playgroud)
!Sub 函数FunctionName在此示例中的属性中起作用。但是我最终只将 2 个策略附加到我生成的角色 -AWSLambdaBasicExecutionRole和arn:aws:iam::123456789:policy/another-policy. 包括!Sub函数的那个被忽略。
我尝试过将函数放在新行中的选项:
Array:
-
!Sub some value with a ${variable} in it
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
@Tom Melo 指出这不是数组问题,所以我调整了我的问题。
进一步的调查显示,这不是 Cloud Formation 的问题,而是非常特定于AWS::Serverless::Function资源类型和Policiesin 中的属性。我怀疑这与该Policies属性在它可以接受的方面如此灵活这一事实有关。它可以接受引用策略名称或 Arns 的字符串,还可以接受描述新策略的策略文档。我怀疑这意味着它无法支持这些功能。
显然,元素数组中的 !Sub 函数没有任何问题。
我尝试在 Cloudformation 上创建以下堆栈并且它起作用了:
AWSTemplateFormatVersion: '2010-09-09'
Description: 'IAM Roles Template'
Parameters:
ArnBase:
Type: String
Default: arn:aws:iam::aws:policy/
AWSLambdaFullAccess:
Type: String
Default: AWSLambdaFullAccess
AmazonSESFullAccess:
Type: String
Default: AmazonSESFullAccess
Resources:
LambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: CloudFormationFullAccess
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action: "cloudformation:*"
Resource: "*"
ManagedPolicyArns:
- !Sub ${ArnBase}${AWSLambdaFullAccess}
- !Sub ${ArnBase}${AmazonSESFullAccess}
- !Sub arn:aws:iam::${AWS::AccountId}:policy/CustomAmazonGlacierReadOnlyAccess
Run Code Online (Sandbox Code Playgroud)
这应该可以使用 SAM 工作...
| 归档时间: |
|
| 查看次数: |
12810 次 |
| 最近记录: |