1
/
5

森田ドラゴンのインターンシップ ~29日目~ SAMが現れた !

こんにちは。高知からリモートインターンしている森田ドラゴンです。最近は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関連の勉強を進めていきます。

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