APIGatewayプライベートなエンドポイントをテストする
直接叩けないので、許可されてるVPCエンドポイントにあるEC2などを経由して、ローカルからテスト(APIを呼びたい)したい
プライベートなAPIエンドポイント
リソースポリシーでAPIエンドポイント叩けるVPCエンドポイントが制限されている
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:999999999999:xxxxxxxxxx/*",
"Condition": {
"StringEquals": {
"aws:sourceVpce": [
"vpce-00000000000000000"
]
}
}
}
]
}
999999999999
:アカウント ID
xxxxxxxxxx
:API ID
vpce-00000000000000000
:VPCエンドポイント
許可されてるVPCエンドポイントにあるEC2などを経由して、ローカルからテスト(APIを呼びたい)
https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/STAGE/users
STAGE
:ステージ名
-
①EC2インスタンスにssh(22)とhttps(443)できるようにしておく
AAA.BBB.CCC.DDD
:EC2インスタンスのパブリックIP -
②sshポートフォワード
ssh -L 33443:xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com:443 ec2-user@AAA.BBB.CCC.DDD -i ~/.ssh/EC2インスタンス.pem
127.0.0.1:33443 >>>>> AAA.BBB.CCC.DDD:443
これで127.0.0.1:33443をEC2インスタンス(AAA.BBB.CCC.DDD)の443にフォワードする
- ③curlでAPIを叩く
curl --resolve xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com:33443:127.0.0.1 https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com:33443/STAGE/users
curl --resolve オプションは、特定のホスト名に対して特定の IP アドレスを解決させるために使用します。
これにより、DNS ではなく指定した IP アドレスを使って通信を行うことができます。
/etc/hostsに書く手間が省ける
ちなみにxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com
でアクセスしないとSSL 証明書の検証エラーになる
% curl https://localhost:33443
curl: (60) SSL: no alternative certificate subject name matches target hostname 'localhost'
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the webpage mentioned above.