web-dev-qa-db-ja.com

serverless.ymlの特定のVPCIDにLambda関数を割り当てます

サーバーレスフレームワークを使用してPythonラムダ関数をAWSにデプロイしています。私のserverless.yml fileラムダ関数からビジネス関連のリクエストを行うために必要なネットワーク接続がVPCにあるだけなので、特定のIDを持つVPCにデプロイする必要がある関数を定義しました。

  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

次のようにVPCIDを直接指定してみました。

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

しかし、それも何もしません。この問題のドキュメントは基本的に存在せず、私はたくさん検索しようとしたので、助けを求めるために最終的にここに投稿する必要があります。

13
Richard Knop

から 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

また、VPCIAMアクセス許可を追加する必要があります。

Lambda関数の実行ロールには、Elastic Network Interface(ENI)を作成、記述、削除するための権限が必要です。 VPC設定が提供されると、デフォルトのAWSAWSLambdaVPCAccessExecutionRoleが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: "*"
7
dashmug