第11章 カスタムインスタンスの作成
クラウドユーザーは、インスタンスがブート時に実行するシェルスクリプトなど、インスタンスを起動する際に使用する追加データを指定することができます。クラウドユーザーは、以下の手段を使用してデータをインスタンスに渡すことができます。
- ユーザーデータ
-
cloud-init
が実行するインスタンスの起動コマンドに指示を追加するのに使用します。 - インスタンスメタデータ
- インスタンスの作成または更新時に指定することができるキー/値のペアのリスト
コンフィグドライブまたはメタデータサービスを使用して、インスタンスに渡される追加データにアクセスすることができます。
- コンフィグドライブ
-
インスタンスのブート時に、インスタンスにコンフィグドライブを接続することができます。コンフィグドライブは読み取り専用ドライブとしてインスタンスに提示されます。インスタンスはこのドライブをマウントして、そこからファイルを読み取ることができます。このコンフィグドライブを
cloud-init
の情報源として使用できます。コンフィグドライブは、cloud-init
(サーバーのブートストラップ用) と組み合わせる場合や、インスタンスに大容量のファイルを渡す場合に有用です。たとえば、cloud-init
を設定して、インスタンスの初回ブート中にコンフィグドライブを自動的にマウントして設定スクリプトを実行することができます。コンフィグドライブはconfig-2
のボリュームラベルで作成され、インスタンスのブート時にインスタンスにアタッチされます。コンフィグドライブに渡される追加ファイルの内容は、コンフィグドライブのopenstack/{version}/
ディレクトリー内のuser_data
ファイルに追加されます。cloud-init
はこのファイルからユーザーデータを取得します。 - メタデータサービス
-
インスタンス固有のデータを取得するための REST API を提供します。インスタンスは、
169.254.169.254
またはfe80::a9fe:a9fe
からこのサービスにアクセスします。
cloud-init
は、コンフィグドライブとメタデータサービスの両方を使用して、インスタンスのカスタマイズ用の追加データを利用することができます。cloud-init
パッケージは、さまざまなデータ入力形式をサポートします。シェルスクリプトおよび cloud-config
形式が、最も一般的な入力形式です。
-
シェルスクリプト: データ宣言は
#!
またはContent-Type: text/x-shellscript
で始まります。シェルスクリプトは、ブートプロセスの最後に呼び出されます。 -
cloud-config
format: データ宣言は#cloud-config
またはContent-Type: text/cloud-config
で始まります。cloud-config
ファイルがcloud-init
により解析および実行されるためには、有効な YAML でなければなりません。
cloud-init
では、インスタンスに渡されるユーザーデータの最大サイズは 16384 バイトです。サイズの制限を変更することはできないため、サイズの制限を超えるデータが必要な場合は、gzip 圧縮を使用します。
ベンダー固有のデータ
RHOSP 管理者は、インスタンスの作成時にデータを渡すこともできます。クラウドユーザーは、このデータ (例: インスタンスを Active Directory に登録するための暗号化トークン) にアクセスすることができない場合があります。
RHOSP 管理者は、ベンダーデータ機能を使用してデータをインスタンスに渡します。ベンダーデータの設定は読み取り専用で、以下のファイルのいずれかにあります。
-
/openstack/{version}/vendor_data.json
-
/openstack/{version}/vendor_data2.json
メタデータサービスを使用して、またはインスタンス上のコンフィグドライブから、これらのファイルを確認することができます。メタデータサービスを使用してファイルにアクセスするには、http://169.254.169.254/openstack/{version}/vendor_data.json
または http://169.254.169.254/openstack/{version}/vendor_data2.json
のいずれかに対して GET リクエストを行います。
11.1. ユーザーデータを使用したインスタンスのカスタマイズ
ユーザーデータを使用して、インスタンスの起動コマンドに指示を追加することができます。cloud-init
はこれらのコマンドを実行して、ブートプロセスの最後のステップとしてインスタンスをカスタマイズします。
手順
cloud-init
への指示が含まれるファイルを作成します。たとえば、インスタンス上に Web サーバーをインストールして有効にする bash スクリプトを作成します。$ vim /home/scripts/install_httpd #!/bin/bash yum -y install httpd python-psycopg2 systemctl enable httpd --now
--user-data
オプションを使用してインスタンスを起動し、bash スクリプトを渡します。$ openstack server create \ --image rhel8 \ --flavor default \ --nic net-id=web-server-network \ --security-group default \ --key-name web-server-keypair \ --user-data /home/scripts/install_httpd \ --wait web-server-instance
インスタンスの状態がアクティブになったら、Floating IP アドレスを割り当てます。
$ openstack floating ip create web-server-network $ openstack server add floating ip web-server-instance 172.25.250.123
SSH でインスタンスにログインします。
$ ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
カスタマイズが正常に実行されたことを確認します。たとえば、Web サーバーがインストールされ有効になっていることを確認するには、以下のコマンドを入力します。
$ curl http://localhost | grep Test <title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title> <h1>Red Hat Enterprise Linux <strong>Test Page</strong></h1>
/var/log/cloud-init.log
が実行したかどうかなど、関連するメッセージの有無をcloud-init
ファイルで確認します。$ sudo less /var/log/cloud-init.log ...output omitted... ...util.py[DEBUG]: Cloud-init v. 0.7.9 finished at Sat, 23 Jun 2018 02:26:02 +0000. Datasource DataSourceOpenStack [net,ver=2]. Up 21.25 seconds