📌

Auto-Scalingが有効なEC2にEFSを自動マウントさせる

2022/11/12に公開

はじめに

今回はAuto-Scalingが有効なEC2にEFSをマウントさせて、ファイルの外だしを行っていこうと思います。
データをEFSに置くことで、EC2の内部にデータを持たないステートレスな設計となり、Auto-ScalingによってEC2が増減したとしても、全EC2が持つデータを共有することができるようになります。

本記事ではEC2にnginxをインストールし、htmlファイルを編集して、htmlが共有されているか検証していこうと思います。

目次

  1. 構成概要
  2. VPCの構築
  3. セキュリティグループの作成
  4. EFSの構築
  5. EC2ゴールデンイメージの作成
    • nginxのインストール
    • EFSの自動マウント作成
  6. ALBの構築
  7. Auto-Scalingの作成
    • AMI起動設定の作成
    • auto scalingグループの作成
  8. 動作検証

構成概要

VPCの構築

VPC等のネットワークに関しては、VPCダッシュボードの上にあるVPCを作成から
以下のようにすべて作成してしまいます。

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

name permit Value
ELB-securitygroup HTTP anywhere
EC2-securitygroup HTTP ELB-securitygroup, SSH(22) anywhere
EFS-securitygroup NFS(2049) EC2-securitygroup

EFSの構築

EFSコンソールに移動し、ファイルシステムの作成をクリックします。ポップ画面の最後の作成の隣にある『カスタマイズ』をクリックします。
以下のパラメータを入力します。

Item Value
名前 efs0125
自動バックアップ チェック無し
VPC autoscalingefs-vpc01
マウントターゲット1 ap-northeast-1a, private1Subnet , efs-securtygroup
マウントターゲット2 ap-northeast-1c, private2Subnet , efs-securitygroup
マウントターゲット3 ap-northeast-1d, Public3Subnet , efs-securitygroup

※defaultのマウントターゲットを先に削除します。

EC2ゴールデンイメージの作成

key pairの作成

まずは、ゴールデンイメージにアクセスするためのSSH keyを作成します。
EC2コンソールより、左ペインのキーペアをクリックします。

Item Value
名前 golden-ec2
キーファイル形式 .pem
タグ {Name,golden-ec2}

※タグはcloudformationで指定した KeyNameで参照するために必ず必要です。

ゴールデンイメージの作成

Auto-scalingの起動イメージを作成していきます。
まず、Public3にゴールデンイメージ作成用のEC2を構築します。

EC2コンソールより、作成したEC2を選択し、接続タブをクリックします。

ssh -i "golden-ec2.pem" ec2-user@ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com

nginxのインストール

以降、EC2にログイン後の作業となります。

sudo amazon-linux-extras install -y nginx1
sudo systemctl start nginx
sudo systemctl enable nginx

EFSの自動マウント作成

EFSにマウントさせるためのutilsをインストールします。

sudo yum install -y amazon-efs-utils

EFSマウント用フォルダを作成します。

mkdir efs

再起動後も自動マウントするよう設定します。

sudo vim /etc/fstab

以下を追加します

file_system_id.efs.aws-region.amazonaws.com:/ mount_point nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

※file_system_id.efs.aws-region.amazonaws.com:EFSのDNS名をEFSコンソールからコピペ
※mount_point:マウントするフォルダ( /home/ec2-user/efs )

nginxのconfig修正

テスト用にnginxのindex.htmlを書き換えます

chmod 777 /usr/share/nginx/html/index.html
sudo echo htmltest > /usr/share/nginx/html/index.html

ルート変更後、efs直下にhtml配下のファイルを置きなおします。

sudo vim /etc/nginx/nginx.conf
sudo sed -i "s/usr\/share\/nginx\/html/home\/ec2-user\/efs/g" /etc/nginx/nginx.conf
sudo cp -R /usr/share/nginx/html/* /home/ec2-user/efs/
sudo chmod 701 /home/ec2-user/

ゴールデンイメージの作成

EC2コンソールより、アクション → イメージとテンプレートより、
イメージを作成をクリックする。
入力情報

Item Value
イメージ名 golden-image-efs-demo

ALBの構築

EC2コンソールより、左ペインのターゲットグループを選択します。

入力情報

Item Value
ターゲットタイプの選択 インスタンス
ターゲットグループ名 efs-demo
VPC autoscalingefs-vpc01
ヘルスチェックパス /home/ec2-user/efs/index.html
ターゲットタイプの選択 インスタンス

Auto-Scalingの作成

AMI起動設定の作成

EC2コンソールより、AutoScalingにて先ほど作成したAMIの起動設定を作成します。
入力情報

Item Value
名前 ami-master
AMI golden-image-efs-demo
インスタンスタイプ t3.micro
セキュリティグループ ec2-SecurityGroup1
キーペア efs_demo

auto scalingグループの作成

入力情報

Item Value
Auto Scalingグループ名 as-group-demo
起動設定※表示を切り替える ami-master
VPC autoscalingefs-vpc01
アヴェイラビリティゾーンとサブネット Private1subnet, Private2subnet
ロードバランシング 既存のロードバランサーにアタッチ
ターゲットグループ autoscaling-efs-demo
希望する容量、最小容量、最大容量 2,1,3
スケーリングポリシー ターゲット追跡スケーリングポリシー

動作検証

EC2コンソールのロードバランサーをクリックし、ロードバランサーのDNS名でブラウザー表示させます。

'htmltest'

と表示されていれば、ロードバランサーを通してEFSのhtmlを表示させている事になります。

テスト1

auto-scalingで起動しているEC2をわざと手動で削除させてみます。

以下の二つにチェックをつけ、インスタンスの状態で『インスタンスを終了』をクリックします。

しばらくすると、auto-scalingによってEC2が再び起動してくるので、再度ALBからアクセスしてみて、htmltestが表示されているのが確認できるかと思います。

テスト2

golden-image用に作成したEC2からEFSにあるindex.htmlを編集します。

sudo echo htmltest-2 > /usr/share/nginx/html/index.html

再度ALBへアクセスし、表示が変更後になっている事を確認できます。

Discussion