2017-09-14 42 views
2

我正在使用無服務器框架將AWS lambda函數部署到AWS。在我的serverless.yml文件中,我已經定義了一個函數,我需要將它部署到具有特定ID的VPC,因爲只有該VPC具有網絡連接,以便從lambda函數發出一些與業務相關的請求。將lambda函數分配給serverless.yml中的特定VPC ID

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 

但這並沒有爲好。這個問題的文檔基本上是不存在的,我嘗試了很多搜索,所以我最終不得不在這裏發帖尋求幫助。

+0

您好理查德,你有沒有發現這個任何解決方案?我試圖將我的lambda函數附加到默認vpc沒有成功:( –

回答

4

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函數執行角色必須具有創建,描述和刪除Elastic Network Interfaces(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: "*" 
相關問題