PHPプログラム側からAWS API GatewayのAPI Keyを発行してアカウント毎のAPIリクエスト数を制限したいことがあったので記録。
aws-sdk-php ver3.1を使用
CONTENTS
最初に
use Aws\ApiGateway\ApiGatewayClient;
use Aws\Exception\AwsException;
$apiClient = new ApiGatewayClient([
'profile' => '${クレデンシャル設定名}',
'version' => 'latest',
'region' => '${リージョン}'
]);
で使用準備。
API Gatewayの操作が可能なユーザーを作成してcredentialsに追加するのは忘れずに。
参考ドキュメントはこちら
API Keyの作成
すでにAPIはできてるものとして進めていく。
$res = $apiClient->createApiKey([
'description' => '株式会社〇〇用API Key',//API Keyの説明
'enabled' => true,
'name' => '株式会社〇〇',//API Keyの識別名
'stageKeys' => [ //stageの紐付け
[
'restApiId' => '${APIのID}※1',
'stageName' => 'dev',//APIのstage名
],
],
// 'customerId' => '<string>',
// 'generateDistinctId' => true || false,※2
// 'tags' => ['<string>', ...],
// 'value' => '<string>'※3
]);
※1 stageKeysの’restApiId’に指定する値はAPI名の隣の()内とかARNとかについてるもの。
arn:aws:execute-api:{リージョン}:000000000000:{ここがID}/*/{アクションタイプ}/{メソッド名}
※2 generateDistinctIdは非推奨らしい
※3 valueは指定しなければランダムなAPI Keyが発行される
戻り値は作成されたAPI Keyの詳細情報が格納されてる。作成されたAPI Keyの値は返り値でも確認できる。
echo $res["id"]//API Gatewayで識別用のID
echo $res["value"]//API Key これがあればアクセスできる
API Keyの削除
$res = $apiClient->deleteApiKey([
'apiKey' =>'${api_key}',//API keyの『id』
]);
渡す’apiKey’はAPI GatewayでのAPI Key識別用のIDであり、API Keyそのものではなかったので注意..
API Keyに使用量プランを紐づける
$res = $apiClient->createUsagePlanKey([
'keyId' => ${key_id},//必須※1
'keyType' =>"API_KEY",//必須※2
'usagePlanId' =>${plan_id}//必須※3
]);
※1 keyIdはdeleteApiKeyの時と同じでAPI Key識別用のIDのほうを与える
※2 keyTypeは”API_KEY”で。
※3 usagePlanIdは紐付けたい使用量プランのIDを。
使用量手軽に切り分けられて便利だけど,API Key上限が1アカウント、1リージョンあたり500までみたいなので注意🐹