【发布时间】:2021-09-05 09:07:07
【问题描述】:
我想定义可重用策略,类似于 AWS 托管策略,将其目标资源作为参数。
我的目标是学习实现它的一般方法,但让我们考虑 StepFunctionsExecutionPolicy,并假设我想定义它的双胞胎 StepFunctionsKillingPolicy。我想以与原始策略相同的方式将我的策略附加到我的 Lambda。
myLambdaFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: myLambdaCodeFolder/
Handler: app.lambda_handler
Runtime: python3.8
FunctionName: !Sub "${ProjectName}_DataProcessor_${StageParam}"
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref DynamoDBTable
- StepFunctionsExecutionPolicy:
StateMachineName: !Ref MySampleStateMachine
- StepFunctionsKillingPolicy:
StateMachineName: !Ref MySampleStateMachine
在AWS repo on gitlab,我发现了 AWS IAM 托管策略的定义和 StateMachineName 似乎是一个策略范围的参数(所有这些策略都有自己的参数):如何定义类似的东西?
当然,我可以为我计划通过 Lambda 杀死的每个 SFN 编写一个(一个)“普通”AWS::IAM:Policy 并将正确的策略附加到正确的 Lambda,但它基本上是( evil) 代码复制,我不想这样做。
有什么提示吗?
{
"Version":"0.0.1",
"Templates":{
... other policy definitions omitted ...
"StepFunctionsExecutionPolicy":{
"Description":"Gives permission to start a Step Functions state machine execution",
"Parameters":{
"StateMachineName":{
"Description":"The name of the state machine to execute."
}
},
"Definition":{
"Statement":[
{
"Effect":"Allow",
"Action":[
"states:StartExecution"
],
"Resource":{
"Fn::Sub":[
"arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:stateMachine:${stateMachineName}",
{
"stateMachineName":{
"Ref":"StateMachineName"
}
}
]
}
}
]
}
}
}
}
【问题讨论】:
-
对您的函数使用嵌套模板和全局值有什么想法(在每个嵌套的 yaml 中分组)?
标签: amazon-web-services amazon-cloudformation amazon-iam aws-step-functions aws-sam