- ソリューションアーキテクト
- プロジェクトマネージャー
- テクニカルオペレーション
- Other occupations (4)
- Development
- Business
- Other
こんにちは、高知からリモートインターンしている、森田ドラゴンです。作業もこのブログも投稿が遅れてしまって、申し訳ないです。ただSAMのデプロイがやっとできたので、喜びに打ち震えてます。原因が権限周りだったことは解せないですが。
詰まったところは
- S3やLambdaに付与するRoleやPolicy
- LambdaにTriggerが付与されないエラー
- 細かいところ
権限付与の方法1 Function のPolicyから
Lambdaに権限を付与するためのやり方として、AWS:Serverless:FunctionのPolicyという値を設定する方法があります。順当にRoleを作成して付与してもいいんですけど、Role周りをドキュメント見ながら作っていくと、「足りてない要素があるよ〜」とエラーが連発。ドキュメントを見ても足りていないようには見えず、このやり方はやめることにしました。
Policies:
- SQSSendMessagePolicy:
QueueName:
!GetAtt mysqsswxkensyu.QueueName
policyからアタッチするやり方は簡単で、上記の用に描いてあげるだけです。ただ、SQSのリソースはQueueNameでQueueの名前を取得できますが、S3のリソースはBucketNameで取得できないので、直接S3バケット名を書いてあげる必要があります。
権限付与の方法2 Roleを作成後に付与
作業の後半までFunctionから付与するやり方でやっていたのですが、最終的にはRoleを作成して付与するやり方に変えました。FunctionのPolicyから付与するやり方は決められたPolicyしか付与できないので、テンプレートにない権限を付与するにはRoleを自作する必要があるからです。
Roleを作成する前に、ぼんやりとマネージメントコンソールでI AM Policyを見ていると
「JSON Policyをそのまま持って来たら、それだけで完成じゃない?」ということを思いました。試して見ると、簡単にRoleを付与することができました。
Roleがエラーの原因だと気づくことや、Roleの簡単な作成方法に気づくことに、かなりの時間を取られましたが、どちらも簡単に解決できたので、力が抜けてしました。I AM Roleは、どのサービスを使うことにも必要なので、理解した気分になっていました。反省です。
Triggerが付与されないエラー
AWS:Serverless:FunctionにはEventsという要素があり、値を設定することでTriggerを付与できます。が、そのTriggerはLambdaの関数からは見ることができません。
https://github.com/awslabs/serverless-application-model/issues/300
上のリンクによると、AWS SAMのバグみたいです。トリガーを確認するには、S3のイベントからみればいいと、森さんに教えてもらいました。LambdaからS3の状態を一方的に監視しているイメージがあったので、意外でした。
このバグに気づかずに「S3が作成される前に、Lambdaが作成されているから、Triggerが付与されない」
と勘違いして、DependsOnを付与するにはどうしようかと、悩んでいました。
DependsOnを付与すると、リソースが作成される順序をコントロールすることができますが「循環参照になっている」というエラーで詰まっていました。
感想
コードを見返すと、とてもシンプルで、つまるところなどなさそうに見えてしまいます。SDKを触れるようになったりして、ドキュメントが読めるようになったと思っていましたが、ドキュメントを読む以前に、AWSサービスに対する基礎的な知識が足りていないように感じます。
ともあれ、RoleやS3について勉強することができたので、この知識を忘れないようにして行きたいです。ではまた、よろしくお願いします。