こんにちは。高知からリモートインターンしている森田ドラゴンです。最近はLive Codingがやりたいなと思っています。Credentialとかが漏れて請求きたらいやだなーと思っていたんですが、Cloud9でやればいんじゃね?とアドバイスもらったので、近々始めてみます。
今日は、前回残してしまったInvalid permissions on Lambda functionのエラーを解消しようと頑張っていました。
Invalid permissions on Lambda function
単純に考えれば権限周りのエラーで、適当にRoleを追加すればいけそうな気がしますが、なぜかエラーを吐いたまま。テンプレートいじっていても解決策が見つからなさそうだったので、CLIで直接Permissionを付与してみました。ドキュメントにコマンドラインが乗っていたので、そのまま打ち込みました。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/500-error-lambda-api-gateway/
aws lambda add-permission --function-name arn:aws:lambda:us-east-1:youraccount-id:function:yourlambdafunction --source-arn arn:aws:execute-api:us-east-1:youraccount-id:api-id/*/GET/lambdasv1 --principal apigateway.amazonaws.com --statement-id statement-id-guid --action lambda:InvokeFunction
権限を付与して、AWSコンソールでテストするとレスポンスが返ってきましたが、なぜかレスポンスは {"message": "Internal server error"}
ただ、ログでは正解の出力がされていたので、とりあえずOKとして元々のエラーを解消することにしました。
Templateが2つ?
コマンドラインで権限を付与すればAPI GWがこの上のエラーを吐くことはない。テンプレートで付与する方法を調べて実行したが、Roleから付与するやり方も、Permissionから付与するやり方も動作していない。
権限周りが原因なはず、と思いながらも正解がわからないので、メンターの森さんに質問をして見ると「Role作ったらいけるんじゃない?」とアドバイスが。
森さんから見ても権限周りが原因だと思うなら、どこか細かいミスがあるはず。そう思ってテンプレートからファイルの構成まで確認すると、なぜかtemplateファイルが二つ存在していました。
ハイライトされているのが間違ったファイルで、一番下にあるのが作業していたファイルです。パッケージ化するコマンドを打ち込むと、build直下にあるtemplateが優先されるみたいです。なぜここにこんなファイルがあるのかはわかりませんが、削除すると正しい記述のtemplateが読み込まれるようになりました。
Reason: Template format error: Unresolved resource dependencies [ApiFuntion] in the Resources block of the template
先ほどのエラーで終わればよかったんですが、また別のエラーが発生しました。依存関係を整理したり、色々やってみましたが、解決しなかったので次回に持ち越しです。
感想
以前のインターンで作った、確実に動くSAMのテンプレートを見ながら作業していたので、コードが間違っている可能性を減らして作業できました。そのおかげでファイルの構成等の、以前は気づけなかっただろうエラーに気づけました。
ちょっとは成長したなーと思いつつ、やはりSAMの時間が長いです。ちょっとづつできるようになってきたので、楽しいといえば楽しいですが。ちなみに今回のサムネはSAMのリスをイメージして見ました。今期は大学の授業をほとんど無くしたので、自分の方でもAWS関連の勉強を進めていきます。