Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

4.8. カスタムインスタンスの作成

クラウドユーザーは、インスタンスがブート時に実行するシェルスクリプトなど、インスタンスを起動する際に使用する追加データを指定することができます。クラウドユーザーは、以下の手段を使用してデータをインスタンスに渡すことができます。

ユーザーデータ
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 圧縮を使用します。

4.8.1. ユーザーデータを使用したインスタンスのカスタマイズ

ユーザーデータを使用して、インスタンスの起動コマンドに指示を追加することができます。cloud-init はこれらのコマンドを実行して、ブートプロセスの最後のステップとしてインスタンスをカスタマイズします。

手順

  1. cloud-init への指示が含まれるファイルを作成します。たとえば、インスタンス上に Web サーバーをインストールして有効にする bash スクリプトを作成します。

    $ vim /home/scripts/install_httpd
    #!/bin/bash
    
    yum -y install httpd python-psycopg2
    systemctl enable httpd --now
  2. --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
  3. インスタンスの状態がアクティブになったら、Floating IP アドレスを割り当てます。

    $ openstack floating ip create web-server-network
    $ openstack server add floating ip web-server-instance 172.25.250.123
  4. SSH でインスタンスにログインします。

    $ ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
  5. カスタマイズが正常に実行されたことを確認します。たとえば、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>
  6. /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