你必须克服一些困难才能到达那里。
文件合并限制
无服务器框架允许在配置中的任何位置导入文件,但只合并resources and functions https://github.com/serverless/serverless/blob/master/lib/classes/Service.js#L158部分。
你的例子:
provider:
iamRoleStatements:
- ${file(__environments.yml):dev.iamRoleStatements, ''}
- ${file(custom.yml):provider.iamRoleStatements, ''}
结果是一个数组数组,如下所示:
{
"provider": {
"iamRoleStatements": [
[
{
"Effect": "Allow",
"Action": "execute-api:Invoke",
"Resource": "*"
}
],
[
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
]
}
}
您也许可以提交一个非常小的拉取请求来纠正这个问题。
使用引用的 IAM 托管策略
可以将每个 IAM 角色定义为自定义资源,并使用iamManagedPolicies提供者配置 https://serverless.com/framework/docs/providers/aws/guide/iam#the-default-iam-role指向其中每一个资源。就像是:
provider:
name: aws
iamManagedPolicies:
- Ref: DevIamRole
- Ref: CustomIamRole
resources:
- ${file(__environments.yml):resources, ''}
- ${file(custom.yml):resources, ''}
当然,您需要将这两个文件的结构更改为AWS::IAM::Role
资源。
自定义 IAM 角色
该框架还为您提供了完全控制的选项,即完整记录 https://serverless.com/framework/docs/providers/aws/guide/iam#custom-iam-roles.
我希望这有帮助。