はじめに
ServerlessFrameworkで作成したLambdaにRDS通信を設定する作業を行っていたときに、VPC設定でつまづいたのでまとめます
設定の参考になる記事はあったのですが、説明が不足していたようだったので解決方法をまとめます
問題
ServerlessFrameworkでVPCの設定を行います
そこで以下の記事を参考に、IAMにEC2の権限を付与しました
serverless.yml
iamRoleStatements:
- Effect: "Allow"
Action:
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
Resource:
- "*"
しかし、実行コマンドを叩くと以下のエラーが発生します
ApiLambdaFunction (AWS::Lambda::Function) Resource handler returned message: "Your access has been denied by EC2, please make sure your request credentials have permission to DescribeSecurityGroups
解決方法
コマンドを実行するユーザーにも権限を付与する必要がありました
以下のコマンドの場合、アクセスキーを持っているユーザーのポリシーにもEC2の権限を追加しました
docker-compose -f docker-compose.production.yml run --env AWS_ACCESS_KEY_ID=XXXXXXXX --env AWS_SECRET_ACCESS_KEY=XXXXXXX --rm app make deploy
# 以下の権限をsls実行ユーザーに追加
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface
おわりに
よく読むと解決できるのですが、さらっと読んでいる感じではserverless.ymlの修正だけでいけそうにみえました
少し時間はかかりましたが無事VPCの中に入れられました
参考