我在AWS cloudformation模板中有一个参数
Parameters:
ExecRole:
Type: String
Description: Required. Lambda exec role ARN
Default: arn:aws:iam::123456789:role/lambdaExecRole
假设123456789是我要使用伪参数引用的AcountId,但是我做不到,我尝试以下操作均未成功
Default: arn:aws:iam::!Ref{AWS::AccountId}:role/exLambdaExecRole
Default: !Sub 'arn:aws:iam::${AWS::AccountId}:role/exLambdaExecRole'
在最后一种情况下,我抛出一个错误
默认成员必须是字符串。
答案 0 :(得分:1)
假设这始终是角色,为什么您不能作为参数要求传入nae,然后在CloudFormation模板的“资源”部分中使用Sub内在函数进行替换。
这样,您的get-object on a file in the folder, I get access denied
部分的arn不需要成为该参数的一部分。
答案 1 :(得分:1)
似乎!Sub
的默认值不支持函数(例如Parameters
)。
这是我们正在使用的解决方法。
我们有一个名为Parameters
的单独堆栈,该堆栈导出其他堆栈中所需的任何参数。例如:
Outputs:
VpcId:
Description: Id of the VPC.
Value: !Ref VpcId
Export:
Name: !Sub 'stk-${EnvType}-${EnvId}-VpcId'
在其他堆栈中,我们仅导入以下导出的值:
VpcId: !ImportValue
'Fn::Sub': 'stk-${EnvType}-${EnvId}-VpcId'
EnvType
和EnvId
对于一个环境的所有堆栈都是相同的。
使用角色,您可能需要执行以下操作。创建一个单独的Roles
模板,在其中实现您的角色并导出其ARN:
Outputs:
LambdaExecutionRoleArn:
Description: ARN of the execution role for the log-and-pass function.
Value: !GetAtt
- LambdaExecutionRole
- Arn
Export:
Name: !Sub 'stk-${EnvType}-${EnvId}-roles-LambdaExecutionRole-Arn'
同样,在其他堆栈中,您也可以简单地ImportValue
:
Role: !ImportValue
'Fn::Sub': 'stk-${EnvType}-${EnvId}-roles-LogAndPassFunctionExecutionRole-Arn'