1
/
5

森田ドラゴンのインターンシップ ~20日目~ SAMというかAWSに詳しくない

こんにちは、高知からリモートインターンしている、森田ドラゴンです。作業もこのブログも投稿が遅れてしまって、申し訳ないです。ただSAMのデプロイがやっとできたので、喜びに打ち震えてます。原因が権限周りだったことは解せないですが。

詰まったところは

  1. S3やLambdaに付与するRoleやPolicy
  2. LambdaにTriggerが付与されないエラー
  3. 細かいところ

権限付与の方法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について勉強することができたので、この知識を忘れないようにして行きたいです。ではまた、よろしくお願いします。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング
株式会社サーバーワークスからお誘い
この話題に共感したら、メンバーと話してみませんか?