EC2 Run Command (Linux)を使ってみた。

まずは触れるだけの記事。

やりたいこと

インスタンスに対して、WordPressの初期インストールを終わらすスクリプトを流し込む。

 準備

今回はこちらで配布しているAMIより立ち上げを行い、WordPressの初期インストールを終わらすスクリプトを流し込みます。

Run Commandを使うにはamazon-ssm-agent.serviceが必要ですが、こちらのAMIのベースはamazon linux2なので、もともとssmが入っています。

ssmを使うためにはインスタンスにIAMロールが必要なため、インスタンスへ割り当てます。

インスタンスを右クリック、【インスタンスの設定】→【IAM ロールの割り当て/置換】より、この画面に移ります。

こちらで、対象のインスタンスにロールを割り振ってあげます。とりあえずテストでフルアクセスの権限を付与しました。

今度はインスタンスに入り、ssmエージェントを立ち上げます。

$ systemctl start amazon-ssm-agent.service

これで使用する準備は完了。

 Run Commandでシェルスクリプトを実行してみる。

左上のサービスよりssmを選択します。

左の【アクション】→【Run Command】を選択。

実行されたコマンドが一覧で表示されますが、実行したことがなければ何も表示が無いはず。

右上のコマンドの実行を押してパラメータを埋めていきます。

コマンドのドキュメント

いろいろ実行できるものが選べますが、今回はシェルスクリプトを実行するので、AWS-RunShellScriptを選択

ターゲット

対象のインスタンスを選択してください。一気に全部にながしこんでやるぜー!って場合には複数選択もできます。多分、最大数は50っぽいです。(0個のエラーメッセージで0-50個選択しろと言われる。)

コマンドのパラメータ

実行したいスクリプトを入れます。今回はこんな感じで入れてみました。

#!/bin/sh

# IP取得
HOST_IDENTIFIRE=`curl -q http://169.254.169.254/latest/meta-data/public-ipv4`
# サイト情報
SITE_URL="http://$HOST_IDENTIFIRE"
SITE_TITLE="cloudadvisor"
ADMIN_USER="cloudadvisor"
while true
do
  ADMIN_PASS=`cat /dev/urandom | tr -dc "[:graph:]" | fold -w 18 | head -n 1000 | grep -e '[0-9]' | grep -e '[a-z]' | grep -e '[A-Z]' | grep -e '[!-/][:-@][\[-\`][\{-~]' | head -n 1`
  if [ "${ADMIN_PASS}" != "" ]; then
    break
  fi
done
MAIL="xxxxxxxxxxxxxxxxxx@xxxx.com"

# プラグイン情報
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_DEFAULT_OUTPUT=text
S3_PLUGIN="s3://xxxxxxxxxxxxxxxxxxxxxxxx"
PLUGIN_INSTALL_PATH="xxxxxxxxxxxxxxxxxxxxxxxx"

# wp-cliインストール
which wp > /dev/null 2>&1
if [ $? != 0 ]; then
  wget -O /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  chmod +x /usr/local/bin/wp
fi

# 初期インストール
RES=`wp core install --path=/var/www/html/public_html --url=${SITE_URL} --title=${SITE_TITLE} --admin_user=${ADMIN_USER} --admin_password=${ADMIN_PASS} --admin_email=${MAIL}`

if [[ ! `echo "${RES}" | grep "already"` ]]; then
  echo "${RES}"
  echo "WORDPRESS USER : ${ADMIN_USER}" > /root/wordpress.txt
  echo "WORDPRESS PASS : ${ADMIN_PASS}" >> /root/wordpress.txt
fi
echo ${RES}

# プラグインインストール&有効化
aws s3 cp ${S3_PLUGIN} ${PLUGIN_INSTALL_PATH}
wp plugin activate --path="/var/www/html/public_html" "xxxxxxxxxxxxxxxxxx"

初期インストールとS3に置いてあるプラグインを取ってきて有効化するスクリプトです。 サイトのURLはipを取ってきています。

まぁ、スクリプトの解説は本題ではないのでこちらを記入。

実行を押したあとに左のRun Commandへ。一覧へ実行されているのがわかります。

しばらくすると完了してステータスに成功と出れば流し込めてます。

準備が完了していれば複数台に一気にコマンドを流し込めるので便利ですね。