はじめに
Amazon API Gateway でプライベートなAPIを作成できるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2018/06/api-gateway-supports-private-apis/
こちらを試してみたいと思います。
VPCエンドポイントの作成
ローカルAPIへの接続には PriavateLink によるインターフェースVPCエンドポイントを使用します。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-private-apis.html
VPC コンソールから エンドポイントの作成へ進み、サービス名の選択で、
com.amazonaws.ap-northeast-1.execute-api を選択します。
VPC, subnet, セキュリティグループ はそれぞれ任意のものを指定し、エンドポイントの作成を行います。
セキュリティグループ では 443 のインバウンドを許可する必要があります。
プライベートDNS名を有効にする にチェックを入れると
「execue-api.ap-northeast-1.amazonaws.com」のVPC内のルックアップが、
作成するエンドポイントのIPアドレスに解決されます。
プライベートAPIの作成
API Gateway コンソールから新しい API を作成します。
ここでは APIの例 を使用します。
エンドポイントタイプでプライベートを選択します。
作成したAPI(例を使用した場合はPetStore)に以下のようなリソースポリシーを設定します。
{{vpceID}} に作成したVPCエンドポイントのIDを指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
],
"Condition" : {
"StringEquals": {
"aws:sourceVpce": "{{vpceID}}"
}
}
}
]
}
リソースポリシーを設定したらAPIをデプロイします。
プライベートAPIの場合、ステージエディター上で、呼び出し用のURLは表示されません。
プライベートAPIの呼び出し
プライベートDNSを使用する場合、API は以下の形式で呼び出すことができます。
https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage}
$ curl https://{restapi-id}.execute-api.ap-northeast-1.amazonaws.com/dev/pets/1
{
"id": 1,
"type": "dog",
"price": 249.99
}
DirectConnet経由で接続する場合等は、プライベートDNSを使用できないため、
以下のようにパブリックDNSでAPIを呼び出します。
Hostヘッダで {restapi-id}を含めてリクエストします。
$ curl https://vpce-XXXXXXXXXXXXXXXXX-XXXXXXXX.execute-api.ap-northeast-1.vpce.amazonaws.com/dev/pets/2 -H'Host:{restapi-id}.execute-api.ap-northeast-1.amazonaws.com'
{
"id": 2,
"type": "cat",
"price": 124.99
}
参考:既存APIのエンドポイントタイプ変更
コンソールのAPIリストで歯車ボタンを押すと、作成済みのAPIのエンドポイントタイプを変換できます。
既存のRegional API、Edge Optimized APIをプライベートAPIに変換できます。
プライベートAPIは Regional APIに変換できますが、Edge Optimized APIに変換できないので注意が必要です。
以上です。
参考になれば幸いです。