EC2を使ったデプロイパターンの練習

今回のテーマ

1つ前の記事で、初歩のEC2のサイト公開の手順をやってみました。

今回は1つ掘り下げて、以下のテーマで実施します。

  • プライベートサブネットにEC2を配置
  • ALBを使った可用性パターン
  • 「EC2 Instance Connect Endpoint」でプライベートEC2に接続
  • プライベートのEC2でyumリポジトリを参照する方法

手順

EC2インスタンスを起動

今回は、プライベートサブネット(AZ2つにそれぞれ)にEC2を配置します。

基本的な設定は、1つ前の記事と同じです。

違いがあるのは、サブネットをプライベートサブネットにして、パブリックIPの自動割り当ては無効化のままとする点です。

また、EC2に関連づけるセキュリティグループはプライベートEC2用に1つ作成しておきます。(AZ2のEC2には同じセキュリティグループの関連付けでOKです)

セキュリティグループルールは、後ほど整備しますので、ここでは設定不要です。

このステップは2つのインスタンスを作成したら完了です。

S3 Endpointを作成

今回はプライベートなEC2にApacheをインストールします。

Apacheのインストールに際して、yumリポジトリが必要ですが、通常はパブリックな(インターネットに接続できる)環境でないと、yumリポジトリを参照できません。

別な方法として、S3に用意されているyumリポジトリを使うこととします。

そのために、プライベートEC2からS3に接続できるように、S3 Endpointを作成します。

VPCコンソールから、エンドポイントを作成で進めます。

サービスカテゴリは「AWSのサービス」、サービスは「S3」の「Gateway」タイプを選択します。

「S3 Endpoint」にはGatewayとInterfaceの2種類がありますが、Interfaceは料金が発生しますので、特に要件がなければGatewayで良いです。

VPCは今回使用するVPCを選択し、プライベートサブネット用のセキュリティグループを選択して、エンドポイントを作成します。(プライベートのEC2からの接続が可能になります)

EC2 Instance Connect Endpointを作成

エンドポイント用のセキュリティグループ作成

エンドポイント作成の前に、このエンドポイントに関連づけるセキュリティグループを作成します。

VPCは今回使用するVPCを選択します。

インバウンドルールはなし、アウトバウンドルールはSSH(22)でプライベートEC2のセキュリティグループを指定します。

プライベートEC2のセキュリティグループを変更

インバウンドルールとして、SSH(22)でエンドポイント用のセキュリティグループを指定して保存します。

これで、プライベートEC2はEC2 Instance Connect EndpointからのSSHのみ許可された状態となります。

エンドポイント作成

先ほどと同じくVPCコンソールから、エンドポイントを作成で進めます。

サービスカテゴリは「EC2インスタンス接続エンドポイント」を選択します。

VPCは今回使用するVPCを選択、セキュリティグループは、エンドポイント用に作成したセキュリティグループを選択します。

サブネットは、プライベートサブネットの片方を選択して、エンドポイントを作成します。

(注意点)
EC2インスタンス接続エンドポイントは標準では1つしか作成できません。
今回はプライベートサブネット2つにそれぞれEC2を配置しているので、2つのエンドポイントが欲しいところですが、クォータを引き上げないと不可能です。
今回はクォータの引き上げまではやらないので、EC2セットアップが終わったら、エンドポイントを作り直すこととします。(手間です)

EC2のセットアップ

EC2インスタンスへ接続

コンソールから作成したEC2に接続します。

インスタンスへの接続方法は「EC2 Instance Connectエンドポイントを使用して接続する」。

EC2 Instance Connectエンドポイントは先ほど作成したEC2 Instance Connect Endpointを選択して接続します。(エンドポイントは1つしか作れていませんので、該当するサブネットのEC2をセットアップします)

Apacheをセットアップと動作確認

CLIからの手順は別ブログを参照してください。

テストページデプロイ

CLIから作成する手順で以下のHTMLファイルを作成します。

今回は、2つのEC2インスタンス(サブネット)を区別できるように、ページタイトルにAZを記載しておきます。

cd /var/www/html

vi index.html

>> 以下、viで記述
<html lang="ja">
        <head>
                <meta charset="utf-8">
                <title>test page A</title>
        </head>
        <body>
                <h1>Hello TestPage A</h1>
        </body> 
</html>

// viを保存で閉じる

もう片方のサブネットもセットアップ

EC2 Instance Connect Endpointを一旦削除して、もう片方のサブネット用で再作成して、同じ手順でもう片方のEC2もセットアップします。

EC2 Instance Connect Endpointは料金が発生しますので、作業が完了したら削除しておくことをお勧めします。

ALBのセットアップ

ここまでで、EC2インスタンスを2つセットアップが完了していますので、それらをターゲットとしたALBのセットアップを行います。

EC2はプライベートなので、それ自体では外部公開はされません。

ALBは、可用性(負荷分散)だけでなく、外部公開の役割も持たせます。

ターゲットグループの作成

EC2コンソールからターゲットグループ、「ターゲットグループの作成」で進めます。

プロトコルはHTTP(80)のままでOKです。

ターゲットタイプは「インスタンス」を選択し、VPCは今回のVPCを選択します。

インスタンスの選択では、今回のプライベートのEC2を2つとも選択し、「保留中として以下を含める」をすることでターゲットとして選択されます。

この状態で「ターゲットグループの作成」を行います。

セキュリティグループを作成の調整

まず、ロードバランサー用にセキュリティグループを用意します。

インバウンドでHTTP(80)で0.0.0.0/0で良いでしょう。(何か特定のトラフィックで制約する場合はそれを考慮)

次に、プライベートEC2のセキュリティグループに変更を加えます。

先ほどまで使用していた、「EC2 Instance Connect Endpoint」からのインバウンドルールは削除してもかまいません。

今回は、ロードバランサー用のセキュリティグループからのインバウンドルールをHTTP(80)で追加します。

これで、ロードバランサーからのトラフィックのみ許可ということになります。

ロードバランサーの作成

EC2コンソールからロードバランサー、「ロードバランサーの作成」で進めます。

ロードバランサータイプは「Application Load Balancer」で作成します。

今回は外部公開するので、スキームは「インターネット向け」を選択します。

VPCは今回のVPCを選択します。

マッピングはパブリックサブネットを選択します。パブリックサブネットは2つのAZで作成していたので両方選択します。

こうすることでALB自体も可用性が確保できます。

セキュリティグループは、先ほど作成したロードバランサー用のセキュリティグループを選択します。

リスナーにはHTTP(80)のまま、先ほど作成したターゲットグループを指定します。

今回はWAFなどは適用しません。(料金が発生するため)

この設定で「ロードバランサーの作成」をします。

テスト

ロードバランサーのDNS名をコピーして、ブラウザのURLにhttp://で貼り付けてください。

まずは片方の画面が表示されると思います。

そうしたら、画面を再描画してみましょう。そうするともう片方の画面が表示されればALBが正常に動作しています。

まとめ

以上で4つのテーマを網羅した手順は完遂です。

プライベートEC2への接続には、EC2 Instance Endpointを使うという方法では、クォータの引き上げが必要ということで、複数のインスタンスにはちょっと向かないかもしれません。

次回は、他の方法としてSession Managerでの接続を試してみたいと思います。

コメントを残す

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