cloudConfig セクションを Cloud Assembly クラウド テンプレート コードに追加して、展開時に実行されるマシン初期化コマンドを追加できます。

cloudConfig コマンドの形式

  • Linux:初期化コマンドはオープン スタンダードの cloud-init に基づきます。
  • Windows:初期化コマンドは Cloudbase-init を使用します。

Linux の cloud-init と Windows の Cloudbase-init は同じ構文を共有しません。一方のオペレーティング システムの cloudConfig セクションは、もう一方のオペレーティング システムのマシン イメージでは動作しません。

cloudConfig コマンドの機能

初期化コマンドを使用して、インスタンスの作成時にデータまたは設定の適用を自動化します。これにより、ユーザー、権限、インストール、または他のコマンドベースの操作をカスタマイズできます。次に例を示します。

  • ホスト名の設定
  • SSH プライベート キーの生成と設定
  • パッケージのインストール

cloudConfig コマンドを追加できる場所

cloudConfig セクションはクラウド テンプレート コードに追加できますが、あらかじめ、インフラストラクチャの構成時にマシン イメージに追加することもできます。これにより、そのソース イメージを参照するすべてのクラウド テンプレートに同じ初期化が行われます。

イメージ マップとクラウド テンプレートの両方に初期化コマンドが含まれている場合があります。展開時、これらのコマンドはマージされ、Cloud Assembly が統合されたコマンドを実行します。

どちらにも同じコマンドが含まれているものの、パラメータが異なる場合は、イメージ マップのコマンドのみが実行されます。

詳細については、vRealize Automationでのイメージ マッピングの詳細を参照してください。

cloudConfig コマンドの構文

cloudConfig コマンドに誤りがあると、リソースが正しく構成されないことや、予期しない動作をすることがあります。

#cloud-config ステートメントに構文エラーがある場合に展開をキャンセルするには、次のプロパティを追加します。

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true

次のクラウド テンプレートでは、- mkdir コマンドが runcmd: の下の新しい行に置かれるという要件を満たしていないため、ディレクトリは作成されません。deploymentFailOnCloudConfigRuntimeError: true プロパティにより、エラーが原因で展開は失敗します。

formatVersion: 1
inputs: {}
resources:
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: img1
      cpuCount: 1
      totalMemoryMB: 1024
      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true
      cloudConfig: |
        #cloud-config
        runcmd:- mkdir -p /tmp/test-dir

このプロパティを省略するか false に設定すると、cloudConfig コマンドが失敗しても展開は続行されます。

また、このプロパティには #cloud-config 行が必要です。この行を省略すると、プロパティ設定に関係なく展開が続行されます。

正:

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true
      cloudConfig: |
        #cloud-config
        runcmd:- mkdir -p /tmp/test-dir

誤:

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true
      cloudConfig: |
        runcmd:- mkdir -p /tmp/test-dir

cloudConfig コマンドの例

次の cloudConfig セクションの例は、Linux ベースの MySQL サーバ用の WordPress の使用例のクラウド テンプレート コードから取得されています。

注:

コマンドが正しく解釈されるように、以下に示すように必ずパイプ文字 cloudConfig: | を含めてください。

      cloudConfig: |
        #cloud-config
        repo_update: true
        repo_upgrade: all
        packages:
         - apache2
         - php
         - php-mysql
         - libapache2-mod-php
         - php-mcrypt
         - mysql-client
        runcmd:
         - mkdir -p /var/www/html/mywordpresssite && cd /var/www/html && wget https://wordpress.org/latest.tar.gz && tar -xzf /var/www/html/latest.tar.gz -C /var/www/html/mywordpresssite --strip-components 1
         - i=0; while [ $i -le 5 ]; do mysql --connect-timeout=3 -h ${DBTier.networks[0].address} -u root -pmysqlpassword -e "SHOW STATUS;" && break || sleep 15; i=$((i+1)); done
         - mysql -u root -pmysqlpassword -h ${DBTier.networks[0].address} -e "create database wordpress_blog;"
         - mv /var/www/html/mywordpresssite/wp-config-sample.php /var/www/html/mywordpresssite/wp-config.php
         - sed -i -e s/"define( 'DB_NAME', 'database_name_here' );"/"define( 'DB_NAME', 'wordpress_blog' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_USER', 'username_here' );"/"define( 'DB_USER', 'root' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_PASSWORD', 'password_here' );"/"define( 'DB_PASSWORD', 'mysqlpassword' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_HOST', 'localhost' );"/"define( 'DB_HOST', '${DBTier.networks[0].address}' );"/ /var/www/html/mywordpresssite/wp-config.php
         - service apache2 reload

cloud-init スクリプトが予期しない動作をする場合は、トラブルシューティングの際に /var/log/cloud-init-output.log に取得されるコンソールの出力を確認してください。cloud-init の詳細については、cloud-init のドキュメントを参照してください。

コマンドとカスタマイズ仕様が共存できない可能性について

vSphere に展開する場合、組み込みの cloudConfig コマンドとカスタマイズ仕様による初期化を組み合わせるときは作業に注意が必要です。これらは正式には互換性がなく、組み合わせて使用すると、一貫性のない結果、または望ましくない結果が生じる場合があります。

コマンドとカスタマイズ仕様の関係の例については、Cloud Assembly の vSphere 固定 IP アドレスを参照してください。