はじめに
本記事は以下の記事に関連した内容となっています。
※以下、「関連記事」と記述します。
実現したいこと
関連記事内では Auto Scaling グループを使用した構成とするために起動テンプレートを使用しています。
また、起動テンプレートのユーザーデータにより必要パッケージのインストールやファイル・ディレクトリの権限設定、GitHub・S3から必要なファイルのダウンロードなどの処理を行っています。
これらの処理や設定が反映された状態のEC2インスタンスからAMIを作成し、そのカスタムAMIを使用して起動テンプレートを構成したいと思います。
EC2インスタンス 作成
AMIのもととなるEC2インスタンスを作成します。
関連記事内で使用しているユーザーデータは以下になりますので、それぞれの処理・設定を行います。
※GitHubリポジトリのURL、S3バケットの名前は環境ごとに置き換えてください。
※内容の詳細は関連記事をご参照ください。
# !/bin/bash
# 必要なパッケージ・モジュールをインストール
yum -y update
yum -y install python3 git python3-devel mysql mysql-devel gcc
pip3 install django
pip3 install mysqlclient
pip3 install gunicorn
amazon-linux-extras install nginx1
# Nginxサービスの自動起動設定・開始
systemctl enable nginx
systemctl start nginx
# Staicファイル用ディレクトリの作成
mkdir /usr/share/nginx/html/static
# git clone用認証情報ファイルのダウンロード
aws s3 cp s3://<S3のバケット名>/.netrc /root/.netrc
# DjangoプロジェクトをGitHubから取得
git clone <GitHubリポジトリのURL> /home/ec2-user/mysite
# Djangoプロジェクトの所有者をec2-userに変更
chown -R ec2-user:ec2-user /home/ec2-user/mysite
# setting.py内で使用するパスワード等を記述した外部ファイルをダウンロード
aws s3 cp s3://<S3のバケット名>/settings_secret.py /home/ec2-user/mysite/mysite/settings_secret.py
# 上記ファイルの所有者をec2-userに変更
chown ec2-user:ec2-user /home/ec2-user/mysite/mysite/settings_secret.py
# Gunicornのサービスユニットファイルをダウンロード
aws s3 cp s3://<S3のバケット名>/gunicorn.service /etc/systemd/system/gunicorn.service
# Gunicornサービスユニットファイルの権限を変更
chmod 644 /etc/systemd/system/gunicorn.service
# Gunicornサービスを自動起動設定・開始
systemctl enable gunicorn.service
systemctl start gunicorn.service
# Nginx設定ファイルをダウンロード・パブリックIPアドレスを置換
aws s3 cp s3://<S3のバケット名>/mysite.conf /etc/nginx/conf.d/mysite.conf
localip=`curl http://169.254.169.254/latest/meta-data/local-ipv4` → ここでは実行しない
sed -i -e "s/ec2-localip/$localip/g" /etc/nginx/conf.d/mysite.conf → ここでは実行しない
# Nginxサービスを再起動
systemctl restart nginx
# StaticファイルをSTATIC_ROOTに記述したパスに配置
cd /home/ec2-user/mysite
python3 manage.py collectstatic
# Staticファイル用ディレクトリの所有者をec2-userに変更
chown -R ec2-user:ec2-user /usr/share/nginx/html/static
以下の処理についてはカスタムAMIから展開された各EC2インスタンスごとに反映させる必要があるため、AMI用EC2インスタンス設定時には実行せず、カスタムAMIを使用した起動テンプレートのユーザーデータで実行します。
- Nginx設定ファイルの
server_name
の値の文字列置換
localip=`curl http://169.254.169.254/latest/meta-data/local-ipv4`
sed -i -e "s/ec2-localip/$localip/g" /etc/nginx/conf.d/mysite.conf
一通りの設定が完了したら、EC2インスタンスを停止します。
カスタムAMI 作成
EC2インスタンス画面で作成したインスタンスを選択し、[アクション]-[イメージとテンプレート]-[イメージを作成]をクリックします。
イメージ作成画面が表示されるので、イメージ名
を入力し、[イメージを作成]をクリックします。
画面左の[イメージ]-[AMI]を選択し、AMI一覧画面を開きます。
作成したAMIのステータス
が「available」になっていることを確認します。