0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Hands-on for Beginnersで使ったユーザーデータの解説

Posted at

環境

Amazon Linux2

はじめに

「AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜」 は凄く分かり易く、なかなかいい教材で勉強になりました。これからAWSを始める人にとってはお薦めの教材です。

この教材の第3章(Amazon EC2の作成)で、ユーザーデータのスクリプトを設定する箇所があります。ユーザーデータとは、EC2が起動されたときに自動で流れるスクリプトを設定する箇所です。教材では「予め用意されているスクリプトをコピペで張り付けてください」と言って終わっています。この際なので、コマンドの中身について詳しく解説する記事を書いてみました。

スクリプトの概要

ハンズオンでやりたいことは、EC2にWordPressをインストールして、インターネット経由でインバウンドからHTTPを利用して、WordPressにアクセスできるようにすることです。

スクリプトでは、PHP、MySQL、WordPressをそれぞれインストールしています。また、Amazon Linux2ではデフォルトでhttpdがプレインストールされていないため、httpdをインストールしてサービスを起動しています。

script.sh
#!/bin/bash

yum -y update
yum -y install php httpd mysql

PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
while [  ${PHP_VERSION} -ne 7 ]
do
amazon-linux-extras install php7.4 -y
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
done

yum -y install php-mbstring php-xml

wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
cp -r /tmp/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html

systemctl enable httpd.service
systemctl start httpd.service

スクリプトの解説

cmd.sh
$yum -y update
$yum -y install php httpd mysql

Amazon Linux2はRedHat系のOSをベースにして作られているため、パッケージ管理システムにはDebian系のOSで使われるaptではなくyumが使われます。RedHat系のパッケージ管理システムには、yumの他にrpmもあります。rpmとyumの違いは、rpmは依存関係を解決してくれないのに対し、yumは依存関係を解決してくれます。Debian系OSにあるdpkgコマンドに該当する、RedHat系OSのコマンドがrpmということになります。また、Debian系OSにあるaptコマンドに該当する、RedHat系OSのコマンドがyumということになります。

上記コマンドでは、yum updateでインストール済のパッケージを最新の状態にした後、yum installでPHP、httpd、MySQLの3つのパッケージをインストールしています。

cmd.sh
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`

このコマンドでは、PHPのメジャーバージョンを取得して、環境変数であるPHP_VERSIONに値をセットしています。

cmd.sh
$echo PHP_VERSION
7

PHP_VERSIONの値を表示すると7が表示されます。yumでインストールしたPHPのメジャーバージョンが7であるということになります。

ワンライナーで記述されたコマンドを、いちステップづつ分解して解説してみます。

cmd.sh
$php -v | head -n 1
PHP 7.4.33 (cli) (built: Nov 19 2022 00:22:13) ( NTS )

PHPのバージョン情報を表示すると複数行が表示されるため、先頭の1行だけに絞り込んで表示しています。

cmd.sh
$php -v | head -n 1 | awk '{print $2}'
7.4.33

awkはCSV形式の列から特定のカラムを取得するコマンドです。print $2で先頭から2つ目の列を取得しています。ちなみに、print $0を指定すると全ての列が取得されます。

cmd.sh
$php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'
7

awkコマンドでオプションを指定しなければ、デフォルトでカラムの区切文字はスペースになりますが、Fオプションを付けることで、区切文字を変更することができます。上記コマンドでは「.」文字で区切られた文字列から、1カラム目の文字列を取得しています。

cmd.sh
while [ ${PHP_VERSION} -ne 7 ]
do
amazon-linux-extras install php7.4 -y
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
done

環境変数 PHP_VERSIONの値が7でなければ、while文の中の処理を実行しています。

cmd.sh
amazon-linux-extras install php7.4 -y

amazon-linux-extrasは、Amazon Linux2オリジナルのパッケージ管理システムです。つまり、yumのAmazon Linux2版ということになります。yumを使ってPHPの最新バージョンをインストールして、メジャーバージョンが8以上であった場合は、while文の中のコマンドが実行されます。

while文の中では、yumではなくamazon-linux-extrasが使われています。なぜ、この場合だけamazon-linux-extrasが使われるのかは分かりません。恐らく、yumを使うと何らかの不都合が生じる可能性があるため、それを回避してのことだろうと思われます。

cmd.sh
yum -y install php-mbstring php-xml

PHPの拡張モジュールをインストールしています。PHPをインストールしたときに、標準ではインストールされないモジュールを個別にインストールしています。php-mbstringは、PHPでマルチバイト文字が利用できるようになるモジュールです。つまり、日本語をが利用できるようにするためのモジュールです。php-xmlは何かは分かりませんが、名前から察するに、XMLを扱うときに必要なモジュールだと思われます。

cmd.sh
$wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/

WordPressをインストールしています。WordPressはPHPのように、yumでインストールするようにはなっておらず、wgetでダウンロードすることになります。なぜ、yumでインストールができないのかといえば、そもそも、yumのリポジトリに登録されていないからです。なぜ、yumのリポジトリに登録されていないのかといえば、そこまでは分かりません。ライセンスの問題なのか、政治的な拘りでもあるのでしょうか?

オプションPでダウンロード先のフォルダを指定することができます。latest-ja.tar.gzファイルをローカルの/tmpの中にダウンロードしています。

cmd.sh
$tar zxvf /tmp/latest-ja.tar.gz -C /tmp

ダウンロードしたアーカイブファイルをtarコマンドを使って展開しています。オプションに、zxvfを指定しています。各オプションの意味です。

オプションz : アーカイブを展開する
オプションx : アーカイブからファイルを抽出する
オプションv : 処理結果の詳細を表示する
オプションf : アーカイブファイル名を指定する

オプションCを付けると、アーカイブの展開先のディレクトリを指定することができます。

cmd.sh
$cp -r /tmp/wordpress/* /var/www/html/

アーカイブファイルを展開すると、/tmp/wordpress ディレクトリが展開されます。このディレクトリの全てのファイルを、/var/www/html/ にコピーしています。

cmd.sh
$chown apache:apache -R /var/www/html

chownはユーザー所有権とグループ所有権を変更するコマンドです。ユーザー所有権とグループ所有権をそれぞれ、apacheに変更しています。オプションRで、所有権を変更するディレクトリを指定することができます。

cmd.sh
$ls -l /var/www | grep html
drwxr-xr-x 5 apache apache 4096 Aug  2 00:44 html

lsコマンドで、ユーザー所有権とグループ所有権が共に、apacheになっていることが確認できます。

cmd.sh
systemctl enable httpd.service

httpdサービスが自動起動されるようにしています。systemctlコマンドが使えるということは、initにはSystemVinitではなくsystemdが採用されているということになります。つまり、Amazon Linux2はRedHat6ベースではなく、RedHat7ベースで作られているということが伺えます。

cmd.sh
systemctl start httpd.service

httpdを起動しています。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?