我使用无服务器框架将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,例如我最终得到了:
我已尝试直接指定VPC ID:
customer_callback:
vpc:
id: vpc-something
handler: myservice/event_stream.customer_callback
但这也没有任何作用。这个问题的文档基本上不存在,我尝试了很多搜索,所以我最后要在这里发帖寻求帮助。
答案 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: "*"