こんにちは、ディーネットの山田です。
API Gatewayに関する調べものをしていて、API GatewayのIPアドレスを固定化するAWSのブログを見つけましたので、実際に試してみたいと思います。
全てを記載すると、すごく長い記事になってしまいますので、API Gatewayのデプロイなどは割愛しております、ご了承ください。
目次
はじめに
全体構成図
必要なAWSコンポーネント
- AWS Global Accelerator
- Application Load Balancer
- VPC Endpoint(プライベートAPIのAPI Gateway用)
- API Gateway(プライベートAPI)
- Lambda
- Route 53
- AWS Certificate Manager
- VPC
前提
以下のAWSコンポーネントはすでに作成済みとします。
- API Gateway(プライベートAPI)
- Lambda
- Route 53(ホストゾーンの登録)
- AWS Certificate Manager(SSL証明書の登録)
- VPC(VPCとサブネット)
※LambdaのVPC利用については、どちらのタイプでも問題ありません。
作業内容
VPC Endpoint(プライベートAPIのAPI Gateway用)を作成します
エンドポイント名を決めます
AWSのサービスの中から、API Gatewayを指す「execute-api」関連のサービス名を選択します
エンドポイントを作成するVPC、サブネット、セキュリティグループを選択します
ポリシーはフルアクセスを選択します
エンドポイントのタグは適宜設定します
エンドポイントが正常に作成できると以下のような画面になります
API Gateway(プライベートAPI)に作成したVPC Endpointを関連付けします
API Gateway(プライベートAPI)の設定で、VPC Endpointを関連付けします
VPC Endpointを関連付けした後は、デプロイを忘れずに対応します
カスタムドメインを定義します
API Gateway(プライベートAPI)ですが、カスタムドメイン名を設定します
対象となるAPI Gateway(プライベートAPI)をマッピングします
Application Load Balancer用のターゲットグループを作成します
ターゲットグループを新規に作成します
ヘルスチェックの設定にステータスコードは、「403」を指定します
VPC EndpointのIPアドレスを調べます
ターゲットグループのターゲットに先ほどのIPアドレスを登録します
Application Load Balancerを作成します
ロードバランサーを作成します
(重要)AWS Global Acceleratorのアドオンを利用します
Route 53でレコードを登録します
AWS Global Acceleratorを対象としてDNSレコードに登録する
動作確認
Route 53で登録したドメイン名を名前解決して、AWS Global AcceleratorのIPアドレスが返ってくることを確認します
$ dig time.d.XXXXXXX.XXd @8.8.8.8
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> time.d.XXXXXXX.XXd @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7274
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;time.d.XXXXXXX.XXd. IN A
;; ANSWER SECTION:
time.d.XXXXXXX.XXd. 300 IN A 3.33.XXX.XXX
time.d.XXXXXXX.XXd. 300 IN A 15.197.XXX.XXX
;; Query time: 17 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 06 09:03:25 UTC 2022
;; MSG SIZE rcvd: 82
AWS Global Accelerator経由で、API Gatewayを介してLambdaからレスポンスが返ってくることを確認します
$ curl https://time.d.XXXXXXX.XXd/hoge
{"datetime": "2022-10-04 08:06:24.475043", "message": "元気ですね"}
所感
- AWSのサービスを使うことで、API Gatewayを固定IPアドレス化することができました。
- しかしながら、AWSのサービスを複数組み合わせて力業で対応している感が否めないですね。
参考サイト
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ