- 新しい順
- 投票が多い順
- コメントが多い順
AWS環境で外部APIを使用するLambdaをテストするために、プライベートDNSを使ってVPC内のLambdaを呼び出す構成についてご質問いただきました。
ご質問の内容から、実際の外部APIの代わりにモック応答を返すLambda関数を作成し、本番環境と同じドメイン名でアクセスできるようにしたいとのことですね。
Route53でプライベートホストゾーンを設定し、実際の外部APIのドメイン名をVPC内で内部リソースに向けるアプローチは正しい方向です。しかし、403エラーが発生しているということは、名前解決はできていても、APIへのアクセス権限に問題がある可能性があります。
この問題を解決するためには、以下の点を確認してください:
-
API Gatewayのリソースポリシーが適切に設定されているか確認してください。VPC内からのアクセスを許可する必要があります。
-
API GatewayとLambda間の権限設定が正しいか確認してください。API GatewayがLambdaを呼び出す権限を持っているか確認します。
-
エンドポイントタイプとして「プライベート」を選択し、VPCエンドポイントを適切に設定しているか確認してください。
-
VPCエンドポイントのセキュリティグループとルートテーブルの設定が適切か確認してください。
また、日本語入力に関連する問題が発生した場合は、AppStream 2.0のセッションで日本語入力モードの切り替えに使用できるキーボードショートカットがあります。例えば、「半角/全角/漢字」キーまたはAlt+`で英数字モードと日本語モードを切り替えることができます。
これらの設定を確認し調整することで、VPC内からプライベートDNSを使用してモックAPIにアクセスできるようになるはずです。
Sources
Troubleshooting AppStream 2.0 User Issues - Amazon AppStream 2.0
403エラーなのでおそらくリソースポリシーの問題だと思います。
API Gatewayのドメイン設定にあるリソースポリシーはどのような設定になっていますでしょうか?
一例ですが、以下のドキュメントで紹介されているようにVPCエンドポイントからの接続は許可されていますでしょうか?
https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-custom-domains-tutorial.html
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
],
"Condition" : {
"StringNotEquals": {
"aws:SourceVpce": "vpce-abcd1234efg"
}
}
}
]
}
また、ドメイン設定のリソースポリシーだけでなくAPI Gateway自体のリソースポリシーも設定が必要です。
こちらも以下のようにVPCエンドポイントからの接続を許可してください。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-resource-policies-examples.html?icmpid=apigateway_console_help#apigateway-resource-policies-source-vpc-example
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
],
"Condition" : {
"StringNotEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
