見出し画像

Fargate+ECSのNginxにHTTPS接続

AWS Fargate+ECSでNginxコンテナを起動し、独自ドメインを使ってHTTPS接続するところまでを実践してみる

大まかな流れ

  1. Nginxコンテナを起動

  2. ドメイン関係の準備

  3. ECSサービスを起動

  4. ホストゾーンの編集

  5. セキュリティグループの編集

  6. ロードバランサーの編集

Nginxコンテナを起動

まずはECS上でNginxコンテナを起動するところまで進める

以下の記事に沿ってNginxを起動した前提で以後の内容は書かれている

http://パブリックIPで動作確認ができたらタスクは止める

ECSダッシュボード>クラスター>nginxx-test-cluster>タスクタブ
タスクを選択して [選択されたものを停止]

ドメインの準備

ドメインーホストゾーンーSSL証明書は3つで1セット
一度作ってしまえばずっと使える

ドメインの取得

ホストゾーンを準備

SSL証明書を取得

ECSサービスを起動

ロードバランサーを介してHTTPS接続を実現する

サービスタブに移動して [作成]

環境

デフォルトのまま

デプロイ設定

アプリケーションタイプ:サービス
ファミリー:nginx-test-task-family
リビジョン:最新
サービス名:nginx-test-service(任意)
サービスタイプ:レプリカ
必要なタスク:1

ネットワーキング

VPC:クラスターを作ったときと同じVPC
サブネット:クラスターを作ったときと同じサブネット
セキュリティグループ:nginx-test-sg(事前に作成したもの)
パブリックIP:オン

ロードバランシング

ロードバランサーの種類:Application Load Balancer
新しいロードバランサーの作成選択
ロードバランサー名:nginx-test-LB(任意)
ロードバランス用のコンテナの選択:wordpress 80:80
新しいリスナーを作成を選択
ポート/プロトコル:443/HTTPS

証明書:ACM証明書から選択
取得した証明書を選択する
新しいターゲットグループの作成を選択
ターゲットグループ名/プロトコル:nginx-test-TG / HTTP
ヘルスチェックパス/プロトコル: / / HTTP

その他は全部デフォルトのままで [作成]

サービスの初期化が完了するとタスクが勝手に起動される

ホストゾーンの編集

ホストゾーンにドメイン名とロードバランサーをつなげるルートを追加する

Route53ダッシュボード>ホストゾーン>
       morningset.link(選択するドメインのもの)>レコードタブ から
[レコードを作成]

nginx-test.morningset.link
という名前でアクセスできるように設定する

レコード名:nginx-test
レコードタイプ:A
エイリアス:ON
トラフィックのルーティング先:
Application Load Balancer と Classic Load Balancerへのエイリアス
東京  ap-northeast-1
生成されたロードバランサーのエイリアスを選択
ルーティング:シンプルルーティング
ターゲットへのヘルスを評価:いいえ

[レコードを作成]

セキュリティグループを編集

EC2ダッシュボード>セキュリティーグループ>
        nginx-test-sg>インバウンドルールタブから
[インバウンドルールを編集]

HTTPのレコードは既にあるはずなので、 
HTTPS:443 → 0.0.0.0/0
のレコードも追加する

ロードバランサーの編集

やりたい事

  • https://nginx-test.morningset.link:正しくアクセスできる

  • http://nginx-test.morningset.link:httpsにリダイレクトさせる

  • IPアドレスを直接指定したアクセス:403エラーを返す

  • ロードバランサーのDNS名を指定したアクセス:403を返す

リスナーを追加する

ロードバランサーを追加した時点でHTTPS:443のリスナーは追加されているので、HTTP:80のリスナーを追加する

EC2ダッシュボード > ロードバランサー > nginx-test-LB > リスナータブから
[リスナーの追加]

プロトコル:HTTP
ポート:80
デフォルトアクション:リダイレクト
リダイレクトプロトコル:HTTPS
リダイレクトポート:443

[追加]

リスナールールの編集

作成したHTTPリスナーを選択する

ルール1
条件:ホストヘッダーがnginx-test.morningset.link 
アクション:リダイレクト先HTTPS://nginx-test.morningset.link
ルール2
条件:それ以外の場合はルーティングされないリクエスト
アクション:固定レスポンス403を返す

HTTPSリスナーのルールも編集する

ルール1
条件:ホストヘッダーがnginx-test.morningset.link 
アクション:ターゲットグループに転送
ルール2
条件:それ以外の場合はルーティングされないリクエスト
アクション:固定レスポンス403を返す

セキュアアクセスできるようになったはず

この記事が気に入ったらサポートをしてみませんか?