[Serverless Framework]Lambda FunctionをVPCの中に入れる
はじめに
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