AWS

【AWS】SAMでPrivate API(API Gateway + Lambda)

更新日:

はじめに

SAMを利用してPrivate APIを作成する良いサンプルがなかったので作りました。
※誤りあればご指摘いただけると幸いです。

前提

・aws-cli、sam-cliがインストール済みであること。
・credentialが設定済みであること。(aws configureが便利)
・SAM用のS3バケットが用意されていること。

サンブルコード

github

template.yamlのみ確認した場合はこちら↓

サンプルコードの使い方

curlサンプル(動作確認)

apigatewayのIDを置換して、同じVPC内でcurlコマンドを発行してください。

Q & A

Q. Private APIにカスタムドメインを指定できないか。

A. 指定不可です。API Gatewayにカスタムドメインを設定する機能はありますが、privateでは使用できません。
route53への設定を考える方もいらっしゃるかもしれませんが、
・割り当て先であるPrivate Host Zoneに対するAliasレコードは指定不可です。
・内部のネットワークのみで名前解決される前提でCNAMEで指定したとしてもAPI GatewayのTSL証明書記載のドメインとアクセス先ドメインが異なるため、HTTPSの接続時にクライアント側でエラーとなります。

Q. RegionalでPrivateっぽく使えないか。

A. 不可です。VPCのリソースではないため、インターネット経由のアクセスとなってしまいPrivateなネットワークを経由しません。
また、VPC EndpointのポリシーでIP制限は可能ですが、アクセス元VPCやVPCエンドポイントのアクセス制限は不可です。
一応、VPC EndpointのポリシーでNAT GatewayのIPアドレスを指定することで擬似的にPrivateにすることはできます。

Q. open API部分を別ファイルに切り出せないか。

A. DifinitionUriで別ファイルにすることは可能ですが、cloudformationの関数が使用不可となるため不便です。
また、Fn::TransformしたものをDifinitionBodyへ指定することも可能ですが、S3へのファイルアップロードが必要となるため億劫です。

template.yaml

-AWS

Copyright© 若手SIerサラリーマンの独学メモ , 2021 All Rights Reserved Powered by STINGER.