サーバーレスフレームワークを使用して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にはまったくデプロイされていません。私は最終的に:
次のようにVPCIDを直接指定してみました。
customer_callback:
vpc:
id: vpc-something
handler: myservice/event_stream.customer_callback
しかし、それも何もしません。この問題のドキュメントは基本的に存在せず、私はたくさん検索しようとしたので、助けを求めるために最終的にここに投稿する必要があります。
から 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: "*"