Amazon web services 无服务器-如何将多个文件添加到IAroleStatement?

Amazon web services 无服务器-如何将多个文件添加到IAroleStatement?,amazon-web-services,yaml,serverless-framework,Amazon Web Services,Yaml,Serverless Framework,在我的serverless.yml文件中,我希望能够从两个不同的文件中添加iamRoleStatements(这不能更改)。所以我试着这样做: provider: iamRoleStatements: - ${file(__environments.yml):dev.iamRoleStatements, ''} - ${file(custom.yml):provider.iamRoleStatements, ''} { "provider": { "iamRo

在我的
serverless.yml
文件中,我希望能够从两个不同的文件中添加
iamRoleStatements
(这不能更改)。所以我试着这样做:

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": [
            "*"
          ]
        }
      ]
    ]
  }
}
每个文件都有一个
iarolestatements
部分

__environments.yml:

custom.yml:

就个人而言,它们每一个都非常有效。但是,当我尝试使用这两个工具运行
sls deploy
时,我遇到以下错误:

IAroleStatements应该是一个对象数组,其中每个对象都有Effect、Action/NotAction、Resource/NotResource字段。具体来说,语句0缺少以下属性:Effect、Action/NotAction、Resource/NotResource;语句1缺少以下属性:Effect、Action/NotAction、Resource/NotResource

我在网上搜索过,这似乎适用于无服务器文件的其他部分,如
参考资料

# This works perfectly well.
resources: 
  - ${file(custom.yml):resources, ''}
  - ${file(__environments.yml):resources, ''}
因此,我想知道是否有任何解决方案,或者它是否是无服务器框架目前不支持的


谢谢你的帮助。

你要想到达那里,得先跳过几圈

文件合并限制 无服务器框架允许在配置中的任何位置导入文件,但不包括节

你的例子是:

provider:
  iamRoleStatements: 
    - ${file(__environments.yml):dev.iamRoleStatements, ''}
    - ${file(custom.yml):provider.iamRoleStatements, ''}
结果会产生如下数组:

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角色定义为自定义资源,并使用指向这些资源的。比如:

provider:
    name: aws
    iamManagedPolicies:
        - Ref: DevIamRole
        - Ref: CustomIamRole

resources:
    - ${file(__environments.yml):resources, ''}
    - ${file(custom.yml):resources, ''}
当然,您需要将这两个文件的结构更改为
AWS::IAM::Role
resources

自定义IAM角色 该框架还为您提供了完全控制的选项,即

我希望这有帮助