将 Lambda 函数分配给 serverless.yml 中的特定 VPC ID
Posted
技术标签:
【中文标题】将 Lambda 函数分配给 serverless.yml 中的特定 VPC ID【英文标题】:Assign Lambda Function To Specific VPC ID in serverless.yml 【发布时间】:2018-02-23 05:49:48 【问题描述】:我正在使用无服务器框架将 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
但这也无济于事。这个问题的文档基本上是不存在的,我尝试了很多,所以我最终不得不在这里发帖寻求帮助。
【问题讨论】:
你好,理查德,你找到解决方案了吗?我正在尝试将我的 lambda 函数附加到默认 vpc,但没有成功:( @ЕлинЙ。下面的答案不适合你吗? @dashmug 谢谢,确实有效。我还有其他一些错误,这就是为什么我一开始认为它不起作用。 你好理查德!您是否找到了使用特定 VPC id 部署功能的解决方案?我遇到了完全相同的问题,出现以下错误:“EC2 错误代码:InvalidGroup.NotFound。EC2 错误消息:安全组 'sg-cfd1ccbd' 不存在” 【参考方案1】:来自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: "*"
【讨论】:
我相信 OP 是在询问有关部署到特定 VPC ID 的问题。我有同样的场景,我可以很好地部署到默认 VPC,但是当我指定存在于不同 VPC 中的安全组/子网组合时,它会引发错误“安全组 'xxx' 不存在” @lukiffer 您指的是专用租赁 VPC 吗? @lukiffer 你是对的。我的回答仅适用于默认 VPC。我还没有看到任何关于非默认 VPC 的信息。以上是关于将 Lambda 函数分配给 serverless.yml 中的特定 VPC ID的主要内容,如果未能解决你的问题,请参考以下文章