https://dev.classmethod.jp/articles/try-api-gateway-usage-plan/
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-api-usage-plans.html
-- 1. コマンド等のインストール
-- 1.1 aws cli version 2 インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
-- 1.2 jqインストール
sudo yum -y install jq
-- 2. API を作成する
aws apigateway create-rest-api \
--name api01 \
--description "api01" \
--endpoint-configuration '{"types": ["REGIONAL"]}'
aws apigateway get-rest-apis
aws apigateway get-rest-api \
--rest-api-id 1111111111
-- 3. API でリソースを作成する
aws apigateway get-resources \
--rest-api-id 1111111111
aws apigateway create-resource \
--rest-api-id 1111111111 \
--parent-id 2222222222 \
--path-part "{proxy+}"
-- 4. リソースにメソッドを作成する
aws apigateway put-method \
--rest-api-id 1111111111 \
--resource-id 333333 \
--http-method ANY \
--authorization-type NONE \
--no-api-key-required \
--request-parameters '{
"method.request.path.proxy": true
}'
aws apigateway put-integration \
--rest-api-id 1111111111 \
--resource-id 333333 \
--http-method ANY \
--type HTTP_PROXY \
--uri "http://petstore-demo-endpoint.execute-api.com/{proxy}" \
--connection-type "INTERNET" \
--request-parameters '{
"integration.request.path.proxy": "method.request.path.proxy"
}' \
--passthrough-behavior "WHEN_NO_MATCH" \
--cache-namespace "333333" \
--cache-key-parameters "method.request.path.proxy" \
--timeout-in-millis 29000 \
--integration-http-method ANY
aws apigateway put-integration-response \
--rest-api-id 1111111111 \
--resource-id 333333 \
--http-method ANY \
--status-code 200 \
--response-templates '{"application/json": ""}'
aws apigateway get-method \
--rest-api-id 1111111111 \
--resource-id 333333 \
--http-method ANY
-- 5. デプロイ前にAPI をテストする
aws apigateway test-invoke-method \
--rest-api-id 1111111111 \
--resource-id 333333 \
--http-method GET \
--path-with-query-string 'petstore/pets?type=fish'
-- 6. API をデプロイする
aws apigateway get-deployments \
--rest-api-id 1111111111
aws apigateway get-stages \
--rest-api-id 1111111111
aws apigateway create-deployment \
--rest-api-id 1111111111
aws apigateway create-stage \
--rest-api-id 1111111111 \
--stage-name stage01 \
--deployment-id 444444
-- 7. デプロイ後にAPI をテストする
curl -v -X GET https://1111111111.execute-api.ap-northeast-1.amazonaws.com/stage01/petstore/pets?type=fish
-- 8. APIキーの作成
aws apigateway create-api-key \
--name apk01 \
--description apk01 \
--enabled
-- 9. 使用量プランの作成
aws apigateway create-usage-plan \
--name up01 \
--description up01 \
--api-stages '[
{
"apiId": "1111111111",
"stage": "stage01"
}
]' \
--throttle '{
"burstLimit": 100,
"rateLimit": 1.0
}' \
--quota '{
"limit": 5,
"offset": 0,
"period": "DAY"
}'
aws apigateway get-usage-plans
-- 10. 使用量プラン、APIキーの関連付けを設定
aws apigateway create-usage-plan-key \
--usage-plan-id 555555 \
--key-id 6666666666 \
--key-type API_KEY
aws apigateway get-usage-plan-keys \
--usage-plan-id 555555
-- 11. 使用量プランの動作確認
curl -v -X GET https://1111111111.execute-api.ap-northeast-1.amazonaws.com/stage01/petstore/pets?type=fish
curl -v -X GET -H x-api-key:XXwEhQCBWZ49LcTRLpKeV8PVV76icQWt0XgyxZQa \
https://1111111111.execute-api.ap-northeast-1.amazonaws.com/stage01/petstore/pets?type=fish
→ 5回以上実行するとHTTP/2 429となる
aws apigateway get-usage \
--usage-plan-id 555555 \
--start-date "2022-07-24" \
--end-date "2022-07-25"
-- 12. クリーンアップ
-- API削除
aws apigateway get-rest-apis
aws apigateway delete-rest-api \
--rest-api-id 1111111111
-- 使用量プランの削除
APIを削除しても残存するので、個別に削除が必要
aws apigateway get-usage-plans
aws apigateway delete-usage-plan \
--usage-plan-id 555555
-- APIキーの削除
APIを削除しても残存するので、個別に削除が必要
aws apigateway delete-api-key \
--api-key 6666666666