在Lambless.yml中将Lambda函数分配给特定的VPC ID

时间:2017-09-14 09:46:51

标签: amazon-web-services aws-lambda serverless-framework

我使用无服务器框架将Python lambda函数部署到AWS。在我的serverless.yml文件中,我已经定义了一个我需要部署到具有特定ID的VPC的功能,因为只有VPC具有从lambda函数发出一些与业务相关的请求所需的网络连接。

  customer_callback:
    vpc:
      subnetIds:
        - subnet-something
    handler: myservice/event_stream.customer_callback

在文档中,上面的示例是他们提到的将函数附加到VPC的方法:

https://serverless.com/framework/docs/providers/aws/guide/functions/

但是,该功能根本没有部署到VPC,例如我最终得到了:

enter image description here

我已尝试直接指定VPC ID:

  customer_callback:
    vpc:
      id: vpc-something
    handler: myservice/event_stream.customer_callback

但这也没有任何作用。这个问题的文档基本上不存在,我尝试了很多搜索,所以我最后要在这里发帖寻求帮助。

1 个答案:

答案 0 :(得分:8)

来自https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

  

此对象应包含为此函数构造VPC所需的securityGroupIds和subnetIds数组属性。

functions:
  customer_callback:
    handler: myservice/event_stream.customer_callback
    vpc:
      securityGroupIds:
        - sg-deadbeef
      subnetIds:
        - subnet-fadecafe

您还需要添加VPC IAM权限。

  

Lambda函数执行角色必须具有创建,描述和删除弹性网络接口(ENI)的权限。提供VPC配置时,默认的AWS AWSLambdaVPCAccessExecutionRole将与您的Lambda执行角色相关联。

为此,请在serverless.yml中添加以下内容:

resources:
  Resources:
    AWSLambdaVPCAccessExecutionRole:
      Type: AWS::IAM::ManagedPolicy
      Properties:
        Description: Creating policy for vpc connetion.
        Roles:
          - {"Ref" : "IamRoleLambdaExecution"}
        PolicyDocument:
            Version: '2012-10-17'
            Statement:
            - Effect: Allow
              Action:
                - ec2:CreateNetworkInterface
                - ec2:DescribeNetworkInterfaces
                - ec2:DeleteNetworkInterface
              Resource: "*"