Amazon-API-Gateway

API GatewayのIPアドレスを静的化(固定)する

こんにちは、ディーネットの山田です。

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のサービスを複数組み合わせて力業で対応している感が否めないですね。

参考サイト

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA