[GCE] Startup ScriptsでVMインスタンスを自動構成する
ども、takiponeです。
前回は、VMインスタンスからイメージを作成する方法をご紹介しました。イメージと上手く組み合わせることでVMインスタンスの管理でに役立つ機能として、ここではStartup Scriptsをご紹介します。
Startup Scriptsとは
Startup Scriptsは、VMインスタンスの起動時に所定のコマンドを自動実行する仕組みです。Amazon EC2のユーザーデータを読み込んで実行するCloud-initと同様、GCEのVMインスタンス専用のツールによってStartup Scriptsが実行されます。
イメージとStartup Scriptsの組み合わせは、Amazon EC2の以下の例がわかりやすいです。
ミドルウェアの基本的な構成ができているイメージに加えて、Startup Scriptsによって設定ファイル、スクリプトの配置や設定コマンドの実行などと組み合わせると使いやすいと思います。
今回はお試しとして、ドキュメントにあるApacheのインストールとサンプルファイルの配置をStartup Scriptsで試してみます。
設定方法
まずは、実行したい内容を含むテキストファイルを通常のシェルスクリプトと同様の形式で作成します。
例: install-apache.sh
#! /bin/bash
# Installs apache and a custom homepage
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/index.html
<html><body><h1>Hello World</h1>
<p>This page was created from a simple startup script!</p>
</body></html>
EOF
Startup Scriptsを指定してのVMインスタンス作成はDeveloper Consoleではサポートされていないため、VMインスタンスを作成するgcutil addinstance
コマンドに--metadata_from_file
オプションを付加しスクリプトファイルを指定します。今回はVMインスタンス名をsimple-apache
としました。
$ gcutil addinstance simple-apache --metadata_from_file=startup-script:install-apache.sh
Select a zone:
1: asia-east1-a
2: asia-east1-b
3: europe-west1-a (maintenance starts in 12 days)
4: europe-west1-b
5: us-central1-a
6: us-central1-b
7: us-central1-f
>>> 1
Select a machine type:
1: n1-standard-1 1 vCPU, 3.75 GB RAM
2: n1-standard-16 16 vCPUs, 60 GB RAM
3: n1-standard-2 2 vCPUs, 7.5 GB RAM
4: n1-standard-4 4 vCPUs, 15 GB RAM
5: n1-standard-8 8 vCPUs, 30 GB RAM
6: n1-highcpu-16 16 vCPUs, 14.4 GB RAM
7: n1-highcpu-2 2 vCPUs, 1.8 GB RAM
8: n1-highcpu-4 4 vCPUs, 3.6 GB RAM
9: n1-highcpu-8 8 vCPUs, 7.2 GB RAM
10: n1-highmem-16 16 vCPUs, 104 GB RAM
11: n1-highmem-2 2 vCPUs, 13 GB RAM
12: n1-highmem-4 4 vCPUs, 26 GB RAM
13: n1-highmem-8 8 vCPUs, 52 GB RAM
14: f1-micro 1 vCPU (shared physical core) and 0.6 GB RAM
15: g1-small 1 vCPU (shared physical core) and 1.7 GB RAM
>>> 14
Select an image:
1: XXXXXX
2: XXXXXX
3: projects/centos-cloud/global/images/centos-6-v20140718
4: projects/coreos-cloud/global/images/coreos-alpha-394-0-0-v20140801
5: projects/coreos-cloud/global/images/coreos-beta-367-1-0-v20140715
6: projects/coreos-cloud/global/images/coreos-stable-367-1-0-v20140724
7: projects/debian-cloud/global/images/backports-debian-7-wheezy-v20140718
8: projects/debian-cloud/global/images/debian-7-wheezy-v20140718
9: projects/opensuse-cloud/global/images/opensuse-13-1-v20140711
10: projects/rhel-cloud/global/images/rhel-6-v20140718
11: projects/suse-cloud/global/images/sles-11-sp3-v20140712
>>> 7
INFO: Waiting for insert of instance simple-apache. Sleeping for 3s.
: (中略)
+---------------+---------------+-----------------+--------------+---------+
| name | network-ip | external-ip | zone | status |
+---------------+---------------+-----------------+--------------+---------+
| simple-apache | 10.240.182.70 | XXX.XXX.XXX.XXX | asia-east1-a | RUNNING |
+---------------+---------------+-----------------+--------------+---------+
Table of operations:
+------------------------+--------+---------------------------+----------------+
| name | status | insert-time | operation-type |
+------------------------+--------+---------------------------+----------------+
| operation-140704348530 | DONE | 2014-08-02T22:24:45.874-0 | insert |
| 2-4ffb2d71ffcf0 | | 7:00 | |
| -fa025c8d-8e3c1210 | | | |
+------------------------+--------+---------------------------+----------------+
$
できました!作成したVMインスタンスに早速SSHで接続してみます。
$ gcutil ssh simple-apache
INFO: Zone for simple-apache detected as asia-east1-a.
INFO: Running command line: ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/ryuta/.ssh/google_compute_engine -A -p 22 ryuta@XXX.XXX.XXX.XXX --
Warning: Permanently added 'XXX.XXX.XXX.XXX' (RSA) to the list of known hosts.
Linux simple-apache 3.14-0.bpo.1-amd64 #1 SMP Debian 3.14.12-1~bpo70+1 (2014-07-13) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ryuta@simple-apache:~$
apache2
パッケージの有無とapache2
サービスがHTTPをListenしているかを確認します。
ryuta@simple-apache:~$ dpkg -l apache2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=========================-=================-=================-=======================================================
ii apache2 2.2.22-13+deb7u3 amd64 Apache HTTP Server metapackage
ryuta@simple-apache:~$ sudo netstat -ltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:http *:* LISTEN 2714/apache2
tcp 0 0 *:ssh *:* LISTEN 2027/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 2027/sshd
ryuta@simple-apache:~$
ちゃんとインストールされ、サービスが起動していますね!
まとめ
GCEのVMインスタンスで利用できる、Startup Scriptsによる起動時の自動構成をご紹介しました。VMインスタンスの構築・運用に活用しましょう!
おまけ: 留意点
実際の構築・運用で利用するためには、以下の点に留意する必要があると思います。
- 起動時に毎回実行される
- スクリプトの実行ログは
/var/log/startupscript.log
ファイルに記録される
初回起動時のみ実行したいという場合は、VMインスタンスのカスタム メタデータのstartup-script
を削除することで、次回起動時の実行を抑制することができます。[編集]リンクをクリックします。
「startup-script」の右にある[X]をクリックし、[保存]で完了です。
Startup Scriptsの実行ログは以下のように出力されます。
$ sudo cat /var/log/startupscript.log
Aug 3 12:33:29 simple-apache startupscript: Running startup script /var/run/google.startup.script
Aug 3 12:33:30 simple-apache startupscript: Hit http://gce_debian_mirror.storage.googleapis.com wheezy Release.gpg
Aug 3 12:33:30 simple-apache startupscript: Get:1 http://security.debian.org wheezy/updates Release.gpg [836 B]
Aug 3 12:33:30 simple-apache startupscript: Get:2 http://ftp.debian.org wheezy-backports Release.gpg [836 B]
Aug 3 12:33:30 simple-apache startupscript: Get:3 http://gce_debian_mirror.storage.googleapis.com wheezy-backports Release.gpg [836 B]
:(中略)
Aug 3 05:26:33 simple-apache startupscript: Setting up apache2-mpm-worker (2.2.22-13+deb7u3) ...#015
Aug 3 05:26:34 simple-apache startupscript: [....] Starting web server: apache2#033[?25l#033[?1c#0337#033[1G[#033[32m ok #03
3[39;49m#0338#033[?25h#033[?0c.#015
Aug 3 05:26:34 simple-apache startupscript: Setting up apache2 (2.2.22-13+deb7u3) ...#015
Aug 3 05:26:34 simple-apache startupscript: Setting up ssl-cert (1.0.32) ...#015
Aug 3 05:26:39 simple-apache startupscript: Finished running startup script /var/run/google.startup.script
実際の起動メッセージを確認したい場合は、Developer Consoleからシリアルコンソールを表示することもできます。