2
1

More than 1 year has passed since last update.

プライベートAPI Gatewayでプライベートサブネット内の Fargate API をコールする

Posted at

はじめに

こんにちは、山田です。
今回はAPI Gateway、Fargateについて検証したので記載していきます。

全体構成図

全体構成図は以下の通りです。
image.png

①:パブリックサブネットに配置しているEC2に接続する。
②:VPCエンドポイントを介して、API Gatewayに接続する。
③:API GatewayからVPC linkを介してNLBに接続する。
④:Fargateにてタスクを実行する。

前提条件

今回は、VPCエンドポイント、APIgateway、VPC link 、NLB、Fargateの構築をメインに記載していきます。
その他のAWSリソースに関しては、構築済みとします。

VPCエンドポイントの構築

以下にVPCエンドポイントの構築手順について記載していきます。

AWS管理コンソール -> VPC -> エンドポイント -> エンドポイントを作成をクリックします。
名前、関連付けるVPCを入力し、サービスは以下を選択し作成します。

image.png

NLB構築

AWS管理コンソール -> EC2 -> ロードバランサー -> ロードバランサーの作成をクリックします。
タイプはNetwork Load Balancerを選択します。

image.png

名前を入力し、SchemeはInternalを選択します。

image.png

関連付けるVPC、サブネットを選択しロードバランサーを作成します。
※ターゲットグループに関しては後ほど作成します。

image.png

Fargateの構築

以下Fargateの構築手順を記載していきます。

クラスターの作成

AWS管理コンソール -> ECS -> クラスター -> クラスターの作成をクリックします。
クラスターのテンプレートはネットワーキングのみを選択します。

image.png

クラスター名を入力して作成します。

タスク定義の作成

AWS管理コンソール -> ECS -> タスク定義 -> 新しいタスク定義の作成をクリックします。
起動タイプはFARGATEをクリックします。

image.png

タスクの設定を以下のように入力しました。

image.png

IAMロール、サイズを入力したらコンテナを追加をクリックします。

image.png

コンテナ名を入力し、イメージのURLを入力します。
今回は、コンテナポートは80番とします。
image.png

他はデフォルト値とし、作成をクリックします。

サービスの作成

対象のクラスター -> サービス -> 作成をクリックします。
サービスの設定を以下のように入力します。

image.png

関連付けるVPC,サブネットを入力します。

image.png

ロードバランサーは、作成したロードバランサーを選択します。

image.png

ロードバランス用のコンテナを新規で作成します。

image.png

他はデフォルト値で、サービスを作成します。

API Gatewayの構築

VCPリンクの構築

AWS管理コンソール -> API Gateway -> VPCリンク -> Createをクリックします。
VPCリンクバージョンはREST APIのVPCリンクを選択します。

image.png

名前、関連付けるNLBを選択して作成をクリックします。

image.png

APIの構築

AWS管理コンソール -> API Gateway -> API -> REST API プライベートをクリックします。
API名を入力し、エンドポイントタイプはプライベートとし、VPCエンドポイントIDは先ほど作成したエンドポイントのIDを入力します。
APIの作成をクリックします。
image.png

APIにGETアクションを追加します。
image.png

セットアップにて、統合タイプはVPCリンク、VPCリンクは先ほど作成したVPCリンクを選択、エンドポイントURLはNLBのDNS名を入力します。

image.png

リソースポリシーを編集します。
今回はホワイトリスト形式で記載していきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:ap-northeast-1:<account id>:<api id>/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "許可するIPリスト"
                }
            }
        }
    ]
}

メソッドレスポンスを変更しておきます。

image.png

APIをデプロイします。

image.png

デプロイが完了したらGETアクションに記載されているURLに接続していきます。

image.png

動作確認

パブリックサブネットに配置されているEC2に接続します。
ブラウザにてURLを入力し,問題なくページが表示されれば完了です。
image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1