Lambdaを実行するときのIAM Role設定方法
AWS LambdaのIAM Role設定のメモです。
AWS LambdaのFunctionを作ってAWS SDK Javaから利用しようとしたときの話です。
開発時はAdminまたはPowerに類するAWSアカウントで開発をするので良いと思いますが、いざ本番環境でAWS LambdaをコールするJavaプログラムを動かすとなると話は変わってきます。
場合によると思いますが、そのプログラムを動くマシンや、そのマシンが利用するAWSアカウントが制限されたユーザ(ロール)だったりする場合に少し困ります。たいていそういうケースで初めてLambdaを使う開発をした場合はLambdaのFunctionをコールする権限が設定されていないのではないでしょうか?
自分はそうでした・・・。というわけでその設定に少し手間取ったのでメモしておきます。
設定方法
と言ってもそれほど難しい話では無いです。
IAMのコンソールに行って
まずはポリシーを作成。
Policy Generatorで設定します。
アクションの部分はInvokeAsyncとInvokeFunctionを選択します。
ARNは自分が持っているLambdaFunctionのARNです。「arn:aws:lambda:ap-northeast-1:xxxxx:function:*」とか設定しておけば全関数使えます。(xxxxxのとこあたりは人によって違うはず)
「ステートメントを追加」を押して、後は作成したPolicyを自分の対象のRoleやUserに割り当てれば完了です。自分はなぜかJavaプログラムがうまく動かなかったので、プログラム(JVM)を再起動したらちゃんと権限いけてました。
人によってはこれだけでは足りません。自分の場合はLambdaから他のAWSリソースにアクセスしないのでこれで終わりですが、アクセスする人は例えばDynamoDBへのExecution権限も必要になります。
以下の記事が参考になると思います。自分も助けられました・・・!
http://qiita.com/studio-kakky/items/3791ba5f383f1797f73f
まとめ
- Policyを作って自分のLambdaFunctionをInvokeできるようにしよう
- LambdaFunctionが他のAWSリソースにアクセスする場合は権限追加しよう(自分はやってないので詳細不明)
- PolicyをRoleかUserに割り当てよう
- 一応AWS SDKを利用するプログラムを再起動したほうがいいかも
できればこういうところでは躓きたくないですよね!誰かの役に立てば幸いです。