[Serverless Framework]Lambda FunctionをVPCの中に入れる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Serverless Frameworkについて調べ始めた、t.hondaです。Lambda FunctionをVPCの中に入れられるのかを試してみたところ、ちょっとした工夫が必要だったので記事にしてみたいと思います。

VPCの中に入れる

Lambda FunctionをVPCの中に入れる方法は、以下の公式ドキュメントに記載があります。

Configuring your functions to run in a VPC

ドキュメントを参考にserverless.ymlにVPCの記述をします。

provider:
  name: aws
  (中略)
  vpc:
    securityGroupIds:
      - sg-xxxxxx # your security group id
    subnetIds:
      - subnet-xxxxxx # your subnet id

ですがこの設定をしてデプロイすると、以下の様なエラーとなります。

     your function execution role have permission to CreateNetworkInterface.                                                       
     EC2 Error Code: UnauthorizedOperation. EC2 Error Message:                                                                     
     You are not authorized to perform this operation.. 

ロールの設定が足りないようです。serverless.ymlに以下の記述を追加しました。

  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "ec2:CreateNetworkInterface"
        - "ec2:DescribeNetworkInterfaces"
        - "ec2:DeleteNetworkInterface"
      Resource:
        - "*"

この状態でデプロイすると、Lambda FunctionがVPCの中に作成されます。マネージドコンソール上でLambda Functionを確認しても、VPCが設定されているはずです。

まとめ

以上、簡単でしたがServerless Frameworkを用いてVPCの中にLambda Functionを作成する方法でした。何かの参考になれば幸いです。

参考サイト

Configuring your functions to run in a VPC
serverless-plugin-vpc