在一个serverlss.yml中定义Http和websocket API的角色

时间:2019-02-27 07:27:11

标签: lambda serverless-framework

我正在将AWS Websocket API与无服务器框架1.38.0一起使用,并且我想通过单个serverless.yml和一个现有IAM角色来部署http和websocket事件lamda。因此,为此,我已经在提供程序选项卡中声明了角色arn,但是当我运行sls deploy -v时,它显示了error - cannot read properties undefined

我的理解是,我们只能在功能级别为事件类型httpwss定义角色arn,反之亦然。

请帮助我如何在全局级别或功能级别上为这两个API定义现有角色,示例YAML配置将真正有帮助。

我的样本YAML:

hello:
  handler: CsharpHandlers::AwsDotnetCsharp.Handler::Hello
  role: arn:aws:iam::019095984934:role/LambdaDeployment
  name: APITypeHello
  events:
    - http:
        path: api/shipments
        method: post
        cors: true
chatMessage:
  handler: CsharpHandlers::AwsDotnetCsharp.WebsocketHandler::GetWSSRequest
  #role: arn:aws:iam::019095984934:role/websocketTesting-dev-ap-southeast-1-lambdaRole - below is the custom admin role
  #role: arn:aws:iam::019095984934:role/LambdaDeployment
  name: chatMessage
  iamRoleStatements:
    - Effect: Allow
      Action:
        - lambda:InvokeFunction,
        - lambda:InvokeAsync
      Resource: “arn:aws:lambda:::function:*”

谢谢 安库尔

1 个答案:

答案 0 :(得分:0)

您可以在role级别上设置iamRoleStatementsprovider,以将自定义角色和角色声明应用于服务中的所有功能。

例如

provider:
  role: arn:aws:iam::019095984934:role/LambdaDeployment
  iamRoleStatements:
    - Effect: Allow
      Action:
        - lambda:InvokeFunction,
        - lambda:InvokeAsync
      Resource: “arn:aws:lambda:::function:*”

functions:
  hello:
    # ...
  chatMessage:
    # ...

提供者设置将同时应用于hellochatMessage函数。

我建议您坚持在iamRoleStatements级别设置provider,并且仅在必须在无服务器部署之外使用预先存在的角色时才使用role

检查IAM documentation以获得更多详细信息。