Auto-Scalingが有効なEC2にEFSを自動マウントさせる
はじめに
今回はAuto-Scalingが有効なEC2にEFSをマウントさせて、ファイルの外だしを行っていこうと思います。
データをEFSに置くことで、EC2の内部にデータを持たないステートレスな設計となり、Auto-ScalingによってEC2が増減したとしても、全EC2が持つデータを共有することができるようになります。
本記事ではEC2にnginxをインストールし、htmlファイルを編集して、htmlが共有されているか検証していこうと思います。
目次
- 構成概要
- VPCの構築
- セキュリティグループの作成
- EFSの構築
- EC2ゴールデンイメージの作成
- nginxのインストール
- EFSの自動マウント作成
- ALBの構築
- Auto-Scalingの作成
- AMI起動設定の作成
- auto scalingグループの作成
- 動作検証
構成概要
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