0
0

More than 1 year has passed since last update.

【AWS】カスタムAMIの作成

Posted at

はじめに

本記事は以下の記事に関連した内容となっています。
※以下、「関連記事」と記述します。

実現したいこと

関連記事内では Auto Scaling グループを使用した構成とするために起動テンプレートを使用しています。
また、起動テンプレートのユーザーデータにより必要パッケージのインストールやファイル・ディレクトリの権限設定、GitHub・S3から必要なファイルのダウンロードなどの処理を行っています。
これらの処理や設定が反映された状態のEC2インスタンスからAMIを作成し、そのカスタムAMIを使用して起動テンプレートを構成したいと思います。

EC2インスタンス 作成

AMIのもととなるEC2インスタンスを作成します。
関連記事内で使用しているユーザーデータは以下になりますので、それぞれの処理・設定を行います。
※GitHubリポジトリのURL、S3バケットの名前は環境ごとに置き換えてください。
※内容の詳細は関連記事をご参照ください。

userdata
#!/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の値の文字列置換
userdata
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インスタンス画面で作成したインスタンスを選択し、[アクション]-[イメージとテンプレート]-[イメージを作成]をクリックします。
スクリーンショット 2021-09-23 12.41.42.png

イメージ作成画面が表示されるので、イメージ名を入力し、[イメージを作成]をクリックします。
スクリーンショット 2021-09-23 12.44.52.png

画面左の[イメージ]-[AMI]を選択し、AMI一覧画面を開きます。
作成したAMIのステータスが「available」になっていることを確認します。
スクリーンショット 2021-09-23 12.52.58.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0