ハマったポイントが沢山あったので、まとめてみました。
東京リージョンでテスト実行すると500エラー
問題
http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html#api-root-get-as-s3-get-service
上記を見ながらAPI Gatewayを触って見ていた。説明どおりに設定して、テスト実行!
すると、以下のエラーが。
{
"message": "Internal server error"
}
解決(?)
うーん、これ、バグなんですかね?
デプロイした先のエンドポイントを呼び出すと正常に動くから・・・
テストを行いたかったら、東京リージョン以外で作成するのが良いのかもしれません。
デプロイ先から呼び出すとAccessDenied
問題
気を取り直して、東京リージョンではなく、バージニア北部に作り直してさくさく作成!
テスト実行して、問題なさそうだったので試しにデプロイして、生成されたエンドポイントからAPIGatewayを呼び出したら以下のエラーが。
$ curl "https://xxxx.execute-api.us-east-1.amazonaws.com/production"
~~~xml
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>xxxx</RequestId><HostId>xxxx</HostId>
</Error>
解決
cloudfrontのアクセス権限が必要みたいです。
統合リクエストで指定している「実行ロール」に、cloudfrontの権限を付加するとアクセス出来るようになります。
PermanentRedirect
問題
http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html#api-items-in-folder-as-s3-objects-in-bucket
上記を試している時に。
設定完了して、テスト実行!存在するバケットを指定して、存在するファイル名を指定しているのに、以下のエラーが出てしまった。
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>PermanentRedirect</Code>
<Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
<Bucket>xxxxxx</Bucket>
<Endpoint>xxxxxx.s3.amazonaws.com</Endpoint>
<RequestId>xxxx</RequestId>
<HostId>xxxx</HostId>
</Error>
解決
- GUI上からだと、S3はリージョンが存在しないように見えるが、ちゃんとリージョンで分かれている。
- 各バケットのプロパティを見ると、バケットのリージョンが確認できる。
- 統合リクエストで指定するリージョンと同じ場所に存在するバケットを指定するとうまく行く。
リソースを作るときにパスパラメータが指定できない
問題
リソース作るじゃないですか。
パスパラメータが使えるから、リソース名に入力するじゃないですか。
なんか{username}
じゃなくて-username-
になってるけどこれで設定できたと思うじゃないですか。
意図した通りに動かないです。
解決
リソース名に入力しないで、リソースパスに直接入力してください。
そのあとにリソース名も入力しましょう。