#author("2021-05-06T02:15:38+00:00","default:wikiadmin","wikiadmin") #author("2021-05-06T02:33:03+00:00","default:wikiadmin","wikiadmin") -API Gateway *用語 [#jadd72b7] |リソース|WEBでいうパス| |メソッド|ANYにすると全部のメソッド、個別メソッド単位で定義も可能| |メソッドリクエスト|リクエストのパスやクエリーパラメータ| |統合リクエスト|リクエストの接続先を設定する。Mockも設定可能| |リクエストマッピング|指定したContenteTypeの時にパラメータの入れ替えなどができる仕組み。いらない| |ステージ|dev/prodなどの環境。URLのパスについてしまうのが残念だが、Custom Domain使うとなくてもいいらしい。ステージ変数を定義することもできるのでうまくやれば開発と本番で同じLambdaのバージョン違いを呼ぶなんてことも可能| |エッヂロケーション|エッジ(全世界)、リージョン、VPCが選択可能| *トラブルシューティング [#lf39973d] |{"message":"Missing Authentication Token"}|存在しないパスにアクセスしたときに出る| |パスが反映されない|リソース追加したら、デプロイ必須| |Malformed Lambda proxy response|レスポンスが正しくない。return { status: 200 ,body: 'hogehoge'}のようにJSONでキーは2つのみ| *HTTP API [#jfb806a1] -せっかくREST APIを学んだのに2020/08頃に新しいHTTP API形式がでてきた。 -こっちの方が安いのだがAPI Gatewayのコンソールからのテストができなかったり情報が古かったりでまだ詳細調査できてない。 -パラメータも微妙に違うのだ! https://blog.serverworks.co.jp/api-gateway-http-apis-now-supports-lambda-and-iam-authorization-options {'version': '2.0', 'routeKey': '$default', 'rawPath': '/path/to/rutake', 'rawQueryString': 'foo=var&dryrun=true', 'headers': {'accept': '*/*', 'content-length': '37', 'content-type': 'application/json', 'host': 'xxxxx.execute-api.ap-northeast-1.amazonaws.com', 'user-agent': 'curl/7.68.0', 'x-amzn-trace-id': 'Root=1-60801384-26c43f936e8a22b8720a4e3d', 'x-forwarded-for': '106.154.129.243', 'x-forwarded-port': '443', 'x-forwarded-proto': 'https'}, 'queryStringParameters': {'dryrun': 'true', 'foo': 'var'}, 'requestContext': {'accountId': 'xxxxxx', 'apiId': 'bqksiliurc', 'domainName': 'bqksiliurc.execute-api.ap-northeast-1.amazonaws.com', 'domainPrefix': 'bqksiliurc', 'http': {'method': 'POST', 'path': '/path/to/rutake', 'protocol': 'HTTP/1.1', 'sourceIp': '106.154.129.243', 'userAgent': 'curl/7.68.0'}, 'requestId': 'eIf8whMqNjMEPYA=', 'routeKey': '$default', 'stage': '$default', 'time': '21/Apr/2021:11:59:00 +0000', 'timeEpoch': 1619006340701}, 'body': '{"Name":"sensuikan1973", "Age":"100"}', 'isBase64Encoded': False} *アクセス元IP制限 [#vcacb3b8] -リソースポリシーで設定する。 -リソースポリシーで設定する。変更反映にはデプロイが必要なので注意。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/api-gateway-resource-policy-access/ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:ap-northeast-1:699567825067:ugqfikmepg/*/*/*" }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:ap-northeast-1:699567825067:ugqfikmepg/*/*/*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "許可IP", "許可IP", "許可IP" ] } } } ] } *ログの有効化 [#ma7ca284] -デフォルトだとアカウント共通の様だ -CloudWatch logsにAPI-Gateway-Execution-Logs_ID のロググループが作成される https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-logging.html *AWS リソースとの接続 [#z9705043] -構成要素が細かすぎで複雑度が最大クラス https://ijin.github.io/blog/2016/04/28/terraforming-api-gatewways/ -以下を動かしてみて体で覚える https://qiita.com/CkReal/items/be0923f6352b0109e225 https://github.com/CkReal/apigw4dynamodb *ロードバランサー [#p01a3c1e] -コンソールで必要なのにarnを確認する術がコンソール上にはないというアホ仕様 **aws cli [#vbe737a6] aws elb describe-load-balancers