CloudFormationでAPI Gatewayを設置する時のエラー

投稿者: | 2019年8月20日

ここでは、CloudFormationを使ってAPI Gatewayを設置した時に発生したエラーについて紹介します。なぜ、解決したのか納得はしていないのですが、一応、解決できなので、メモとして残しておきます。

 

エラーが起こった状況について

まず、CloudFormationでLambdaをキックするAPI Gatewayを作成しました。API Gatewayを含む必要なコンポーネントの作成自体にはエラーが発生しませんでした。作成したコンポーネントは、Lambda用IAM、Lambda関数、API Gateway一式(RestAPI、Resource、Method)、Lambdaをinvokeするためのpermissionです。

しかし、作成したMethodをAPI GatewayのWebコンソールからたどれるテスト実行の画面で実行したところ、次のようなエラーメッセージが表示されました。

簡単にいうと、API GatewayからLambda関数へアクセスできず、HTTP 403のレスポンス(Access Denied)が返ってきました。当初は、permissionの設定だろうと思い、色々と調べて複数のサイトを比較して作成したのですが、同じように設定してもエラーが発生し続けました。

 

エラーの原因と対処法

今回のエラーの原因は、API GatewayからHTTP GETリクエストによるLambda関数の実行は、許可されていないことでした。それは、ここここここに書かれており、実際にAWS::ApiGateway::Methodで定義していたHttpMethodの値と、Integrationの子要素であるIntegrationHttpMethodの値をGETからPOSTに変更することで、問題が発生しなくなりました。

 

納得いっていない点

ただ、一点、納得いっていない点があります。それは、Webコンソールを使って、API Gatewayが呼び出すLambda関数を再設定し、再設定の時に表示されるここのページにある「Lambda関数に権限を追加する」ダイアログでアクセス権を再設定するとGETリクエストであっても、アクセス拒否されなくなるという点です。

すなわち、CloudFormationから設定するとGETリクエストが設定できないが、Webコンソールから設定すると、GETリクエストでも設定できる点が理由がわかっていない点です。今後、その理由がわかれば、更新します。

 

参考サイト

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください