ECS インスタンスのユーザーデータを使用して起動時の動作をカスタマイズしたり、データをインスタンスに渡したりできます。 インスタンス (RunInstances) 作成時にユーザーデータを指定し、ソフトウェアパッケージの自動アップデートやサービスの起動、ログの印刷、依存関係のインストール、ウェブサービスの初期化といった起動時の動作をカスタマイズすることができます。 ECS インスタンスのユーザーデータは主に異なるタイプのスクリプトを通じて実行されます。 ユーザーデータはインスタンス内で共通のデータとしても使用されます。

使用方法

インスタンスのユーザーデータを設定する場合、次の点ににご注意ください。

  • VPC 接続のインスタンスのみがサポートされます。

  • フェーズアウトインスタンスタイプでは、I/O が最適化されている必要があります。 その他のインスタンスタイプ には最適化の制限はありません。

  • インスタンスのユーザーデータは渡される前に Base64 によるエンコードを必要としており、エンコード前のデータは 16 KB 未満でなければなりません。

  • インスタンスには公式イメージまたは公式イメージから作成されたユーザーイメージが使用されなければなりません。 オペレーティングシステムは次のいずれかでなければなりません。

    Windows インスタンス Linux インスタンス
    Windows Server 2008 R2 以降のバージョン
    • CentOS
    • Ubuntu
    • SUSE Linux Enterprise
    • OpenSUSE
    • Debian
    • Aliyun Linux

モジュール周波数

インスタンスが実行中ステータスに変わった後、Alibaba Cloud プライマリーアカウントを使用してインスタンスのユーザーデータを実行し、/etc/init 情報を初期化します。

ユーザーデータのインスタンスを修正した後、修正されたユーザーデータが実行されるかどうかは使用中のスクリプトとモジュールのタイプによります。 例:

  • ユーザーデータスクリプトのようなシェルスクリプトを使ってユーザーデータを設定する場合、ユーザーデータは修正後に実行されません。

  • ユーザーデータが Byobu、Set Hostname、Set Passwords のようなモジュールを設定している場合、ユーザーデータは修正後に実行されません。

  • ユーザーデータが bootcmd、update_etc_hosts、yum_add_repo のようなモジュールを設定している場合、ユーザーデータは修正後に実行されます。

    詳しくは、「モジュール」をご参照ください。

ユーザーデータの設定

ここでは、Windows 環境でユーザーデータ開発を記述しUpstart Jobを使用してユーザーデータを設定する例を紹介します。

  1. エディターを使用して Notepad++ のようなテキストファイルを作成します。
  2. テキストファイル内のユーザーデータに関連するスクリプトを編集します。
    1 行目は#! /bin/sh#cloud-config#upstart-job[bat]または[powershell] のようにインスタンスのユーザーデータスクリプトの書式の要求を満たしている必要があります。 詳しくは、Linux インスタンスのユーザーデータおよびWindows インスタンスのユーザーデータをご参照ください。
  3. スクリプトファイルをデバッグし、コンテンツが有効であることを確認します。
  4. (任意) Gzip 圧縮コンテンツを作成する場合、 gz 形式でスクリプトファイルを圧縮します。
  5. (任意) Include ファイルまたはGzip 圧縮スクリプトを作成する場合、利用可能なストレージサービスへスクリプトファイルをアップロードし、リンクを取得し、リンクに有効期間を設定します。

    リンクの作成には Alibaba Cloud OSS の使用を推奨します。 詳しくは、「オブジェクトのアップロード」または「ライフサイクル設定」 をご参照ください。

  6. 「ECS コンソール」にログインします。
  7. Linux インスタンスの作成は、「インスタンスの作成」内の手順に従ってください。
    インスタンスは VPC 接続である必要があり、イメージ要求に適したイメージを選択する必要があります。 フェーズアウトインスタンスタイプでは、I/O が最適化されたインスタンスが必要です。 その他のインスタンスタイプは I/O 最適化の制限はありません。

    インスタンス作成後、Advanced (インスタンス RAM ロールまたは cloud-init に基づく) use text formを選択し、ユーザーデータを入力します。 ユーザーデータが、Base64 で暗号化されている場合は、The text is Base64-encodeをクリックします。

  8. インスタンスが作成されるのを待ちます。
  9. インスタンスに接続します
  10. ユーザーデータの結果を確認します。 障害が発生した場合は、関連するログファイルを確認します。 以下は、アップスタートジョブスクリプトを使用した CentOS インスタンスのユーザーデータの出力例です。

    上の図では、スタートアップジョブファイルpart-001.conf/etc/init フォルダー内に生成されています。

関連 API : RunInstances+ Parameters UserData

ユーザーデータの確認

インスタンスのユーザーデータは100.100.100.200サーバーから確認できます。 そのためには、次の手順を実行します。

  1. 対象インスタンスに接続します。
  2. インスタンスの OS に応じて、以下のいずれかを実行します。
    • Linux の場合、curl http://100.100.100.200/latest/user-dataを実行してユーザーデータを確認します。
    • Windows の場合、Invoke-RestMethod http://100.100.100.200/latest/user-data/を実行してユーザーデータを確認します。

関連 API: DescribeUserData

ユーザーデータの修正

現在のユーザーデータの修正前にインスタンスを停止する必要があります。 ユーザーデータ修正直後に従量課金 VPC 接続のインスタンスを再起動する必要がある場合、停止済みインスタンスの非課金化オプションを無効にすることを推奨します。 インスタンスのユーザーデータを修正するには、次の手順に従います。

  1. 「ECS コンソール」にログインします。
  2. 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
  3. 対象リージョンを選択します。
  4. 対象インスタンスを選択し、[操作] 列で[ユーザーデータ設定] をクリックします。
  5. ユーザーデータを入力し、[OK]をクリックします。
ユーザーデータ修正後に修正後のユーザーデータが実行されるかどうかはスクリプトとモジュールのタイプによります。

関連 API:ModifyInstanceAttribute + Parameters ユーザーデータ

Linux インスタンスのユーザーデータ

Linux インスタンスのユーザーデータはUser-data ScriptCloud ConfigInclude FilesGzip compression scripts、またはUpstart Jobといった複数のスクリプトタイプで設定されます。 スクリプトはオープンソース cloud-init の書式に従います。データソースは「メタデータ」をご参照ください。 Linux インスタンスの設定は、起動時に自動化されています。 詳しくは、、「フォーマット」をご参照ください。

ユーザーデータスクリプト

ユーザーデータにはシェルスクリプトを使用できます。 インスタンスの最初の起動時に一度だけ実行されます。 最初の行は、#!のように#! で固定されます。 Base64 でエンコードされる前のユーザーデータスクリプトは 16 KB 未満でなければなりません。 以下はユーザーデータスクリプトの例です。


#! /bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/output10.txt
service httpd start
chkconfigをhttpdの上</pre>

インスタンスが作成されたら、インスタンスに接続しcat [file] を実行し、ユーザーデータスクリプトの結果を確認します。


[root @ XXXXX2z〜]#cat output.txt
Hello World. The time is now Mon, 24 Jul 2017 13:03:19 +0800!
Cloud-Config

Cloud-Config を使用すると yum ソースのアップデート、SSH キーのインポート、依存パッケージのインストールなどのサービスを設定できます。 Cloud-Config の最初の行は#cloud-configと固定されており、ヘッダーにはスペースを使用できません。 ファイルは有効な yaml 構文でなければなりません。 設定したサービスに応じて、インスタンスユーザーデータは異なる動作をします。

Cloud インスタンスのユーザーデータは渡される前に Base64 によるエンコードを必要としており、エンコード前の cloud config データは 16 KB 未満でなければなりません。 以下は Cloud-Config スクリプトの例です:


#cloud-config
apt:
primary:
- arches: [default]
uri: http://us.archive.ubuntu.com/ubuntu/
bootcmd:
- echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts

インスタンスが作成されたら、インスタンスに接続し結果を確認します。

Include ファイル

Include ファイルの内容は 1 リンクまたは 1 行のスクリプトのリンクで構成されています。 インスタンスが起動すると、cloud-init が Include ファイルのスクリプトリンクの内容を読み取ります。 スクリプトの内容を読み取る際にエラーが発生した場合、インスタンスはユーザーデータの実行を停止します。 Include File の最初の行は#includeに固定されており、ヘッダーにはスペースは使用できません。 インスタンスのユーザーデータの更新頻度は、include ファイルに設定されたスクリプトタイプに従います。

インスタンスのユーザーデータは渡される前に Base64 によるエンコードを必要とします。 Base64 エンコード前のファイルは 16 KB 未満でなければなりません。 以下は Include File の例です:


#include
http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/UserData/myscript.sh

インスタンスが作成されたら、インスタンスに接続し結果を確認します。

Gzip 圧縮コンテンツ

User-Data スクリプトCloud-Config、およびInclude Fileのコンテンツは 16 KB 未満でなければなりません。 スクリプトのコンテンツが 16 KB を超える場合、Gzip を使用してコンテンツを圧縮し、圧縮されたスクリプトを利用可能なストレージサービス (OSS を推奨) にアップロードし、リンクを取得し、Include File 形式を使用してリンクを表示します。 Gzip 圧縮スクリプトの最初の行は#includeに固定されており、ヘッダーにはスペースを使用できません。 インスタンスユーザーデータの更新頻度は、Gzip ファイルで設定されたスクリプトタイプに従います。 以下は Gzip 圧縮ファイルの例です:


#include
http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/config.gz
Upstart Job

Upstart Job を使用してユーザーデーターを設定する場合、init システムに Upstart サービスが必要です。 たとえば、CentOS 6、Ubuntu 10/12/14、および Debian 6/7 が upstart を init システムとして使用しています。 Upstart Job スクリプトはインスタンスのユーザーデータを /etc/init ディレクトリにあるファイルに置きます。 Upstart Job の最初の行は#upstart-jobに固定されており、ヘッダーにはスペースは使用できません。 すべてのインスタンスの起動時にインスタンスのユーザーデータを実行します。 以下は Upstart Job スクリプトの例です:


#upstart-job
description "upstart test"
start on runlevel [2345]
stop on runlevel [! 2345]
exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt

Windows インスタンスのユーザーデータ

Windows インスタンスのユーザーデータは Alibaba Cloud ECS にサポートされており、Window ベースのインスタンス初期化スクリプトを実行する機能を提供しています。 インスタンスのユーザーデータは渡される前に Base64 によるエンコードを必要としており、エンコード前の ユーザーデータは 16 KB 未満でなければなりません。 SBC 文字のみ使用できます。 Bat スクリプトまたは PowerShell スクリプトを使用してインスタンスのユーザーデータを設定できます。

Bat スクリプト

最初の行は[bat]に固定されており、ヘッダーにはスペースを使用できません。 例:


[bat]
echo "bat test" > c:\1.txt

インスタンスが作成されたら、インスタンスに接続し結果を確認します。 以下の例では、1.txt テキストファイルがC:\ドライブ配下に表示されます。

PowerShell スクリプトの最初の行は

[powershell] に固定されており、ヘッダーにはスペースを使用できません。 例:


[powershell]
write-output "Powershell Test" | Out-File C:\2.txt

参照

Linux インスタンスのユーザーデータの詳細については、「cloud-init 形式」をご参照ください。

Linux インスタンスのユーザーデータ更新頻度の詳細については、「cloud-init モジュール」をご参照ください。