この記事は公開されてから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