第11章 カスタムインスタンスの作成
クラウドユーザーは、インスタンスがブート時に実行するシェルスクリプトなど、インスタンスを起動する際に使用する追加データを指定することができます。クラウドユーザーは、以下の手段を使用してデータをインスタンスに渡すことができます。
- User data
-
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-configformat: データ宣言は#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 リクエストを行います。
クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。
各コマンドで
--os-cloudオプションを使用します。以下はその例です。$ openstack flavor list --os-cloud <cloud_name>複数のクラウドにアクセスする場合は、このオプションを使用します。
bashrcファイルにクラウド名の環境変数を作成します。`export OS_CLOUD=<cloud_name>`
11.1. ユーザーデータを使用したインスタンスのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
ユーザーデータを使用して、インスタンスの起動コマンドに指示を追加することができます。cloud-init はこれらのコマンドを実行して、ブートプロセスの最後のステップとしてインスタンスをカスタマイズします。
前提条件
-
管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための
clouds.yamlファイルが提供されている。 -
python-openstackclientパッケージがインストールされている。
手順
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.123SSH でインスタンスにログインします。
$ 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