スキップしてコンテンツを表示

外部APIを使用するlambdaのテストのために、プライベートDNSを使ってVPC内のlambdaを呼び出したい

0

AWSで、外部REST APIサービスを使うlambdaを作成しています。 製造中、テストにおいて、本物のAPIを呼ばずに、内部で作成したlambaで擬似レスポンスを返したいと思っています。 テストしたいソースには、変更を加えずテストしたいので、 PrivateDNS → API Gateway → lambda のような構成にできればと思っています。 色々な情報から、 Route53に、実際に呼び出すドメインを登録し、Aレコードを作成しました。 名前解決はできているようなのですが、結果は 403になってしまいます。

2回答
0

AWS環境で外部APIを使用するLambdaをテストするために、プライベートDNSを使ってVPC内のLambdaを呼び出す構成についてご質問いただきました。

ご質問の内容から、実際の外部APIの代わりにモック応答を返すLambda関数を作成し、本番環境と同じドメイン名でアクセスできるようにしたいとのことですね。

Route53でプライベートホストゾーンを設定し、実際の外部APIのドメイン名をVPC内で内部リソースに向けるアプローチは正しい方向です。しかし、403エラーが発生しているということは、名前解決はできていても、APIへのアクセス権限に問題がある可能性があります。

この問題を解決するためには、以下の点を確認してください:

  1. API Gatewayのリソースポリシーが適切に設定されているか確認してください。VPC内からのアクセスを許可する必要があります。

  2. API GatewayとLambda間の権限設定が正しいか確認してください。API GatewayがLambdaを呼び出す権限を持っているか確認します。

  3. エンドポイントタイプとして「プライベート」を選択し、VPCエンドポイントを適切に設定しているか確認してください。

  4. VPCエンドポイントのセキュリティグループとルートテーブルの設定が適切か確認してください。

また、日本語入力に関連する問題が発生した場合は、AppStream 2.0のセッションで日本語入力モードの切り替えに使用できるキーボードショートカットがあります。例えば、「半角/全角/漢字」キーまたはAlt+`で英数字モードと日本語モードを切り替えることができます。

これらの設定を確認し調整することで、VPC内からプライベートDNSを使用してモックAPIにアクセスできるようになるはずです。
Sources
Troubleshooting AppStream 2.0 User Issues - Amazon AppStream 2.0

回答済み 7ヶ月前
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"
                }
            }
        }
    ]
}
エキスパート
回答済み 7ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

関連するコンテンツ