LoginSignup
2
0

More than 5 years have passed since last update.

AWS API Gateway + Lambda Proxy で苦労した話

Posted at

API GATEWAY PROXYって?

API GATEWAYから Lambdaなどにリンクする場合URIなどを具体的に設定しないといけないのだけど、 PROXYモードでまとめて全部Proxyされているサービスに投げることが可能なのだが。。。

例えば 
Link : https://<api ID>.execute-api.ap-southeast-2.amazonaws.com/<stage name>/`

API IDが abcdef, stage が development とすると。

Link : https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/

で、これに例えば IDとPhoneを追加したい場合、 普通は リソースに IDとPhoneを追加して

/{id}/{phone}
https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/1234/81-50-1234-1234

これを PROXYサービスに変えると

https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/user?id=1234&phone=81-50-1234-1234

すげーべんりじゃん?! ってのは、ふつーにだれでもわかるんだけど・・

テストでハマった

最初にCORSが面倒、LAMBDAにPROXYしてるんだけど、LAMBDAでも CORSの設定が必要とか 
下の例は、headers の アクセスコントロールとかを追加。

const returnvalue = {
                            statusCode: 200, 
                            headers: {
                                'Access-Control-Allow-Origin' : '*',
                                'Access-Control-Allow-Headers':'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
                                'Access-Control-Allow-Credentials' : true,
                                'Content-Type': 'application/json'
                            },
                            body: JSON.stringify(response) 
                    };
callback(null, returnvalue);

テストをしてみたけど えらーばかり リソースをヒットしていないのがテストが不可能な状態、 JqueryではHTTP OPTION, CORSではじかれ、CURLでも 403でおかしい。

なんで 403エラー?

パラメータのパスで問題だったのだが、なにせAWSのガイドを読んでもちんぷんかんぷん。ここでかなり無駄な時間。

jqueryで テストってことで ?ID=123  

$.ajax({ url: "https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/?id=123",
        type: "GET",
        dataType: 'json',
        crossDomain: true,
        contentType: 'application/json',
        success: function(data){
           console.log(data);
        }});

をなげてたのが403で弾かれまくり、 CURLでも同じく403、いろいろ検索したら リソースにヒットしてないのでは?ってことで、やっとわかったのが

https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/?id=1234

では だめで

https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/user?id=1234

USERってのが必要。。 (なんでやねんってかんじ)

これがちゃんと動くサンプル

$.ajax({ url: "https://abcdef.execute-api.ap-southeast-2.amazonaws.com/development/user?id="+id,
        type: "GET",
        dataType: 'json',
        crossDomain: true,
        contentType: 'application/json',
        success: function(data){
           console.log(data);
        }});

さいごに・・・

AWSさん・・ 文章をもっとちゃんとしてくれ。 なにもかんでも403ってなんだよ。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0