HTTP API のプライベート統合でプライベートサブネット内の Fargate API をコールする
先日、API Gateway の HTTP API が GA をご紹介する記事を書きました。
今回は GA 版より追加されたプライベート統合を使って、プライベートサブネット内の ECS (Fargate) の API をコールするところまでを試してみます。
構成図
やりたいことは、以下の図のとおりです。HTTP API から VPC リンクを介して、プライベートサブネット内の NLB 配下の Fargate を API コールします。
事前準備
事前にプライベートサブネット内に Fargate 環境は構築済みです。
単純にポート番号 1234 で受けて、 Hello, Classmethod!!
を返すだけのコンテナです。
$ curl localhost:1234 Hello, Classmethod!!
NLB は internal タイプで作成しています。
$ dig hello-nlb-f0e7cea11673ee77.elb.ap-northeast-1.amazonaws.com +short 192.168.3.192
VPC リンクの作成
HTTP API から内部 NLB が所属する VPC へアクセスするための VPC リンクを作成します。
API Gateway の管理コンソールから VPC links
を開き、Create
をクリック。
VPC リンクの作成画面が表示されます。今回は VPC link for HTTP APIs
を選択し、任意の名前、リンクする VPC を選択します。次に、VPC リンクとして作成する ENI が所属するサブネットと、アタッチするセキュリティグループを選択します。
ここで指定するセキュリティグループは特にインバウンドルールは作成しなくてもアクセスできました。
じゃぁ何のためのセキュリティグループなんだろう?と考えましたが、VPC リンクの ENI へのアクセスを制御するというよりも、後段の ALB などで VPC リンクのセキュリティグループ ID を指定して許可設定する、といった用途に使うもなのかもしれませんね。
これで VPC リンクは完了です。
HTTP API の作成
API Gateway の管理コンソールから [APIs] を開き、Create API
をクリックします。次に、[HTTP API] の Build
をクリックします。
次に integrations の作成ですので、ここでプライベート統合を指定と思いきや、どうやら Create API
のメニューのなかではプライベート統合の作成は出来ないようです。
よって、integrations も routes も空のまま Next
で進めます。stage は $default
と Auto-deploy を受け入れて Next
。以下のように空っぽの API を作っただけの状態です。
プライベート統合の作成
API Gateway の管理コンソールから [Develop] - [Integrations] の Manage integrations
タブを開き Create
をクリックします。
Private resource
を選択し、詳細に進みます。今回は NLB のた、ALB/NLB
を選択し、Fargate がぶら下がっている NLB およびリスナーを指定します。最後に、先程作成した VPC リンクを指定し、Create
で作成。
これでプライベート統合は作成できました。
あとは [Develop] - [Routes] から Create
をクリックし、ルートを作成するだけです。例えば今回は GET /
を作成します。
[integrations] に戻ると / GET
が出来ていますのでこれを選択し、右のプルダウンメニューから先程作成したプライベート統合を指定し、Attach integration
をクリック。
これで準備が整いました。
動作確認
以下の Invoke URL
をキックして ECS の API コールから echo が返ることを確認します。
$ curl -i https://vbdkzblw7h.execute-api.ap-northeast-1.amazonaws.com HTTP/2 200 date: Tue, 17 Mar 2020 22:37:38 GMT content-type: text/plain; charset=UTF-8 content-length: 20 apigw-requestid: Jjmf4j5pNjMEMLQ= Hello, Classmethod!!
パブリックな環境から、HTTP API を経由してプライベートサブネット内の Fargate の API をコールすることが出来てますね!
検証は以上です!
さいごに
今回は HTTP API の GA 版より追加になったプライベート統合を使って、VPC 内の Fargate の API をコールしてみました。REST API と比較すると、かなり楽ちんに設定できますね!
また、REST API で VPC リンクする場合、リンク先は NLB に限定されていましたが、HTTP API だと ALB/NLB/Cloud Map の 3 種類が利用できるのも嬉しいポイントですね!
以上!大阪オフィスの丸毛(@marumo1981)でした!