Elastic Compute Service (ECS) インスタンスの作成時に、NGINX や Docker のプリインストール、ホスト名の変更など、システム構成を完了したり、特定のビジネススクリプトを実行したりする場合、[ユーザーデータ] パラメーターを構成できます。
インスタンスユーザーデータ
インスタンスユーザーデータとは、スクリプト、命令、構成ファイルなど、ECS インスタンスにアップロードされるデータを指します。 インスタンスユーザーデータを使用して、ECS インスタンスを初期化または構成できます。 たとえば、ECS インスタンスが初めて起動されると、インスタンスはインスタンスユーザーデータを使用してサービス起動スクリプトの実行、ソフトウェアのインストール、ログの出力などを自動的に行います。 インスタンスユーザーデータは、ECS インスタンスが初めて起動されたときに自動的に実行できます。 特定の形式のインスタンスユーザーデータは、Linux ECS インスタンスが起動されるたびに実行することもできます。 詳細については、「インスタンスユーザーデータの形式と実行頻度」をご参照ください。
制限
インスタンスは仮想プライベートクラウド (VPC) にデプロイする必要があります。
インスタンスは、以下のオペレーティングシステムのパブリックイメージ、またはパブリックイメージから派生したカスタムイメージから作成する必要があります。
Alibaba Cloud Linux、CentOS、CentOS Stream、Ubuntu、SUSE Linux Enterprise Server、Red Hat Enterprise Linux、openSUSE、Debian、AlmaLinux、Rocky Linux、Fedora
Windows Server 2008 R2 以降
廃止されたインスタンスタイプの場合、I/O 最適化インスタンスはユーザーデータをサポートし、I/O 最適化されていないインスタンスはユーザーデータをサポートしません。
ECS インスタンスの作成時にインスタンスユーザーデータを使用する
ステップ 1: インスタンスユーザーデータを準備する
インスタンスの初期化中に、初期化ツールはインスタンスユーザーデータを読み取ってカスタム構成を完了します。 Linux ECS インスタンスと Windows ECS インスタンスでは、異なる初期化ツールが使用されます。 各初期化ツールは複数のインスタンスユーザーデータ形式をサポートしています。 次のセクションでは、Linux ECS インスタンスと Windows ECS インスタンスでサポートされているインスタンスユーザーデータ形式と、さまざまな形式のインスタンスユーザーデータの実行頻度について説明します。
インスタンスユーザーデータの形式と実行頻度
Linux インスタンス
Linux インスタンスは、cloud-init
コンポーネントを使用して初期化構成を完了します。 インスタンスが初めて起動されたかどうかによって、異なる構成が実行されます。 特定のインスタンスで、初期バージョンのイメージを使用している場合は、Upstart Job
を使用して初期化構成を完了することもできます。
cloud-init
コンポーネントでサポートされているインスタンスユーザーデータ形式には、ECS インスタンスの構成に直接使用できる User-Data
と Cloud Config
データが含まれます。 このコンポーネントは、他のユーザーデータ形式もサポートしています。 最も一般的な形式は、include
ファイルと Gzip
圧縮コンテンツです。 cloud-init
コンポーネントに加えて、特定のインスタンスで、初期バージョンのイメージを使用している場合は、Upstart Job
を使用して初期化構成を完了することもできます。
インスタンスユーザーデータの形式の詳細については、cloud-init ドキュメントのユーザーデータ形式を参照してください。
user-data スクリプト、cloud-config データ、または include ファイルのサイズが 32 KB を超える場合は、データ形式として [Gzip 圧縮コンテンツ] を選択することをお勧めします。
インスタンスが起動されるたびに user-data スクリプトを実行する場合は、データ形式として [Cloud Config データ] または [Upstart Job] を選択することをお勧めします。
User-data スクリプト
概要
user-data スクリプトが Linux インスタンスに渡されると、スクリプトはシェルスクリプトとして実行され、インスタンスが初めて起動されたときに一度だけ実行されます。
実行頻度
インスタンスの起動: user-data スクリプトは、ECS インスタンスが初めて起動されたときに一度だけ実行されます。 インスタンスの再起動時にはスクリプトは実行されません。
オペレーティングシステムの置き換え: user-data スクリプトは自動的に実行されます。
システムディスクの再初期化: user-data スクリプトは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行はシャープ記号と感嘆符 (
#!
) で始まります。user-data スクリプトのサンプル
カスタムスクリプトを実行する
#!/bin/sh echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
サンプルの user-data スクリプトは、ECS インスタンスが初めて起動されたときに一度だけ実行され、システム時刻を userdata_test.txt ファイルに書き込みます。
ECS インスタンスのソフトウェア リポジトリ、DNS 解決、時刻同期サービスの構成をカスタマイズする
ECS インスタンスを作成するときに、user-data スクリプトを使用して、インスタンスのソフトウェア リポジトリ、DNS 解決、時刻同期サービスの構成をカスタマイズできます。 次のサンプルコードでは、CentOS Stream 9 が使用されています。 オペレーティングシステムに基づいて構成を置き換えてください。
重要インスタンスが起動すると、システムはデフォルトの YUM リポジトリ、Network Time Protocol (NTP) サービス、およびドメインネームシステム (DNS) サービスを構成します。 インスタンスのユーザーデータを使用して、構成されているデフォルトの YUM リポジトリと NTP および DNS サービスを変更できます。 以下の点にご注意ください。
カスタム YUM リポジトリを使用する場合、Alibaba Cloud は YUM リポジトリのサポートの提供を停止します。
NTP サービスをカスタマイズする場合、Alibaba Cloud は時刻同期サービスの提供を停止します。
#!/bin/sh # Modify DNS // DNS を変更する echo "nameserver 114.114.114.114" | tee /etc/resolv.conf # Modify yum repo and update // yum リポジトリを変更して更新する cp /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.bak cp /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.bak sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos.repo sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos-addons.repo yum update -y # Modify NTP Server // NTP サーバーを変更する echo "server ntp1.aliyun.com" | tee /etc/ntp.conf systemctl restart ntpd.service
説明114.114.114.114
を実際の DNS サーバーアドレスに、https://mirror.stream.centos.org
を CentOS Stream の実際の YUM リポジトリアドレスに、server ntp1.aliyun.com
を Alibaba Cloud の実際の NTP サーバーアドレスに置き換えてください。cloud-config データを使用して YUM リポジトリを変更することもできます。 ただし、cloud-config データは user-data スクリプトほど柔軟ではなく、Alibaba Cloud によって特定の YUM リポジトリが事前に構成されているシナリオには適していません。 user-data スクリプトを使用することをお勧めします。
管理者アカウントを指定する
デフォルトでは、Linux インスタンスはルートアカウントを管理者アカウントとして使用します。 インスタンスのインスタンスユーザーデータを使用して、別のアカウントを管理者アカウントとして指定できます。
#!/bin/sh useradd test-user echo "test-user ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers mkdir /home/test-user/.ssh touch /home/test-user/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****" | tee -a /home/test-user/.ssh/authorized_keys
説明上記のコードの ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis**** を実際の公開鍵に置き換えてください。
user-data スクリプトの実行中に問題が発生した場合、次の一般的なクラウドアシスタントコマンドを実行してエラーログを取得できます: ACS-ECS-UserData-Check-for-linux.sh
。 ログにエラーメッセージが表示された場合は、スクリプトの実行中にエラーが発生しました。 ログにエラーメッセージが表示されない場合は、スクリプトの実行中にエラーは発生していません。 この場合は、他の側面からスクリプトをチェックして、問題の原因を特定してください。 クラウドアシスタントの一般的なコマンドについては、「一般的なコマンドを表示して実行する」をご参照ください。
Cloud-config データ
概要
Cloud-init は、ソフトウェアパッケージのインストールやネットワーク設定の構成など、特定のタスクと構成を実行するための一連の機能モジュールを定義します。 Cloud-init は、ベンダーデータ、カスタムデータ、およびカーネルパラメーターから cloud-config データを取得します。 cloud-config データは、タスクにどのモジュールが関与し、どのようなアクションを実行するかを決定します。 ECS インスタンスを作成する前に、モジュールとタスクを指定することでカスタム cloud-config データを構成し、cloud-config データをインスタンスユーザーデータとしてインスタンスに渡すことができます。 インスタンスが起動されると、cloud-init は cloud-config データを読み取って解析し、構成ファイルの指示に従ってモジュールを実行し、タスクを実行して ECS インスタンスを構成およびデプロイします。
実行頻度
インスタンスの起動: cloud-config データのタスクを実行するかどうかは、タスクに対応するモジュールの実行頻度によって決まります。 モジュールの詳細については、モジュールを参照してください。
インスタンスごと 1 回: モジュールは、ECS インスタンスが初めて起動されたときに一度だけ実行されます。 たとえば、「Apt」や「パスワードの設定」などのモジュールは、「インスタンスごと 1 回」の頻度で構成および実行されます。 インスタンスの再起動時にはモジュールは実行されません。
常に: モジュールは、ECS インスタンスが起動されるたびに実行されます。 たとえば、「Bootcmd」や「Etc ホストの更新」などのモジュールが「常に」の頻度で実行される場合、モジュールは ECS インスタンスが起動されるたびに実行されます。
オペレーティングシステムの置き換え: モジュールは自動的に実行されます。
システムディスクの再初期化: モジュールは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
#cloud-config
で始まり、ヘッダーにはスペースが含まれていません。Cloud-config データは YAML 構文に従う必要があります。
cloud-config データのサンプル
ECS インスタンスのソフトウェア リポジトリを指定する
[ユーザーデータ] フィールドで、ECS インスタンスのソフトウェア リポジトリを指定するために次のコンテンツを入力します。この例では、Ubuntu イメージを使用して ECS インスタンスを作成します。別のイメージを使用する場合は、サンプル コード内の構成をイメージの実際の構成に置き換えます。
#cloud-config apt: preserve_sources_list: false disable_suites: - $RELEASE-updates - backports - $RELEASE - mysuite primary: - arches: - amd64 - i386 - default uri: http://us.archive.ubuntu.com/ubuntu # リポジトリのURIを指定します
ECS インスタンスのソフトウェア リポジトリを指定する
[ユーザーデータ] フィールドで、ECS インスタンスに次のコンテンツを入力して、インスタンスが NGINX サービスを自動的にインストールできるようにします。
#cloud-config packages: - nginx # パッケージ runcmd: - systemctl start nginx.service # nginx.service を開始します
NGINX サービスの自動インストールを構成する
ユーザーデータECS インスタンスの フィールドに次のコンテンツを入力して、インスタンスが NGINX サービスを自動的にインストールできるようにします。
#cloud-config # クラウド設定 hostname: my-instance fqdn: my-instance.localdomain
ホスト名を指定する
[ユーザーデータ] フィールドの ECS インスタンスに、以下のコンテンツを入力して、インスタンスが起動されるたびにシェルスクリプトが自動的に実行されるようにします。
#cloud-config bootcmd: - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt # Hello World. 現在時刻は $(date -R) です! を /root/userdata_test.txt に出力します。
インクルードファイル
概要
インクルードファイルには、ユーザーデータスクリプトまたは cloud-init データへの 1 つ以上のリンクが含まれています。各リンクは別々の行を占めます。 ECS インスタンスが起動すると、cloud-init はリンクを 1 つずつ読み取って解析します。 cloud-init がリンクの読み取り中にエラーが発生した場合、cloud-init は残りのリンクの読み取りを停止します。
説明Alibaba Cloud Object Storage Service (OSS) を使用して、ユーザーデータスクリプトまたは cloud-init データを ECS インスタンスにアップロードし、リンクを取得し、リンクの有効期間を指定できます。 詳細については、「OSS コンソールを使用して開始する」をご参照ください。
実行頻度
インスタンスの起動: 実行頻度は、リンクが指すコンテンツによって異なります。たとえば、リンクがユーザーデータスクリプトを指している場合、スクリプトは ECS インスタンスが最初に起動されたときに 1 回だけ実行されます。リンクが cloud-init データを指している場合は、cloud-init データの実行頻度が優先されます。
オペレーティングシステムの置き換え: インクルードファイルは自動的に実行されます。
システムディスクの再初期化: インクルードファイルは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
フォーマット
最初の行は
#include
で始まり、ヘッダーにはスペースが含まれていません。インクルードファイルのサンプル
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh
この例では、インクルードファイルにはユーザーデータスクリプトへのリンクが含まれており、スクリプトは ECS インスタンスが最初に起動されたときに 1 回だけ実行されます。
説明インクルードファイルまたは Gzip 圧縮コンテンツを使用する場合は、ストレージサービスを使用してスクリプトをアップロードし、スクリプトリンクを取得し、リンクの有効期間を指定します。 Alibaba Cloud OSS を使用することをお勧めします。 詳細については、「OSS コンソールを使用して開始する」をご参照ください。
Include ファイル
概要
ユーザーデータスクリプト、cloud-config データ、またはインクルードファイルのサイズが 32 KB を超える場合は、Gzip を使用してインクルードファイルの内容を
.gz
形式で圧縮し、対応するリンクを生成してから、そのインクルードファイルを ECS インスタンスに渡すことができます。Cloud-init は、Gzip で圧縮されたコンテンツを自動的に解凍します。解凍されたコンテンツを実行した結果は、圧縮されていないコンテンツを ECS インスタンスに直接渡して実行した結果と同じです。説明Alibaba Cloud OSS を使用して、ユーザーデータ スクリプトまたは cloud-config データを ECS インスタンスにアップロードし、リンクを取得して、リンクの有効期間を指定することもできます。詳細については、「OSS コンソールを使用して開始する」をご参照ください。
実行頻度
インスタンスの起動: 実行頻度は、スクリプトの種類とモジュールの種類によって異なります。たとえば、リンクがユーザーデータ スクリプトである Gzip 圧縮コンテンツに転送される場合、Gzip 圧縮コンテンツは、ECS インスタンスが初めて起動されたときに一度だけ実行されます。
オペレーティングシステムの置き換え: Gzip 圧縮コンテンツは自動的に実行されます。
システム ディスクの再初期化: Gzip 圧縮コンテンツは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタム イメージを使用して、カスタム イメージが作成されたソース インスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタム イメージを使用して ECS インスタンスを作成する場合、インスタンスのシステム ディスクにはデータが保存されます。システム ディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
#include
で始まり、ヘッダーにはスペースが含まれていません。Gzip 圧縮コンテンツのサンプル コード
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz
この例では、インクルード ファイルには、ユーザーデータ スクリプトである Gzip 圧縮コンテンツへのリンクが含まれています。 cloud-init が Gzip 圧縮されたユーザーデータ スクリプトを読み取ると、スクリプトは自動的に解凍され、インスタンスが初めて起動されたときに一度だけ実行されます。
Upstart ジョブ
インスタンスで Upstart ジョブを使用するには、インスタンスに Upstart サービスをインストールします。インスタンスは、CentOS 6、Ubuntu 10、Ubuntu 12、Ubuntu 14、Debian 6、および Debian 7 のいずれかのオペレーティングシステムを実行している必要があります。
概要
Upstart はイベント駆動型の初期化システムです。 Upstart ジョブは、サービスまたはタスクを開始または停止するタイミングと実行方法を定義する構成ファイルです。 Upstart ジョブファイルのファイル拡張子は .conf で、/etc/init/ ディレクトリにあります。
実行頻度
インスタンスの起動: ECS インスタンスが起動されるたびに、Upstart ジョブが自動的に実行されます。
オペレーティングシステムの置き換え: Upstart ジョブが自動的に実行されます。
システムディスクの再初期化: Upstart ジョブが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
#upstart-job
で始まり、ヘッダーにはスペースが含まれていません。Upstart ジョブの例
#upstart-job description "upstart test" start on runlevel [2345] # ランレベル 2、3、4、および 5 で起動します。 stop on runlevel [!2345] # 2、3、4、および 5 以外のランレベルで停止します。 exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
サンプルの Upstart ジョブは、システムが指定されたランレベルで実行されたときにタイムスタンプを含むメッセージを返し、そのメッセージを
/root/output.txt
ファイルに追加します。 Upstart ジョブは、システムが上記の指定されたランレベルとは異なるランレベルで実行されると停止します。
MIME マルチパートファイル
概要
MIME マルチパートファイルは、複数の種類の命令を送信できます。たとえば、MIME マルチパートファイルを使用して、ユーザーデータに
text/cloud-config
(cloud-init 構成用)とtext/x-shellscript
(シェルスクリプト)の両方を含めることができます。 cloud-init は、命令を個別に解析して実行します。実行頻度
インスタンスの起動:実行頻度は、MIME メッセージのパートタイプと cloud-init 構成によって異なります。たとえば、MIME メッセージの一部がユーザーデータスクリプトである場合、スクリプトは ECS インスタンスが初めて起動されたときに一度だけ実行されます。 MIME メッセージの一部が cloud-config データである場合、cloud-config データの実行頻度が優先されます。
オペレーティングシステムの置き換え:MIME マルチパートファイルは自動的に実行されます。
システムディスクの再初期化:MIME マルチパートファイルは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
Content-Type: multipart/mixed: boundary="****"
で始まります。ここで、boundary
はカスタマイズ可能であり、ヘッダーにはスペースが含まれていません。2 行目はバージョン
MIME-Version: 1.0
を指定します。これは通常、すべての MIME メッセージで必要です。
MIME マルチパートファイルの例
Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config runcmd: - [ mkdir, /test-cloudinit ] write_files: - path: /test-cloudinit/cloud-init.txt write_files: - content: | Created by cloud-init path: /test-cloudinit/cloud-init.txt append: true --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash mkdir test-userscript touch /test-userscript/userscript.txt echo "Created by bash shell script" >> /test-userscript/userscript.txt --//--
MIME マルチパートファイルの例には、cloud-init 命令と Bash シェルスクリプトが含まれています。
cloud-init 命令は、ファイル(
/test-cloudinit/cloud-init.txt
)を作成し、Created by cloud-init
を書き込みます。Bash シェルスクリプトは、ファイル(
/test-userscript/userscript.txt
)を作成し、Created by bash shell script
を書き込みます。
Windows インスタンス
Windows インスタンスは、Vminit コンポーネントの Plugin_Main_CloudinitUserData プラグインを使用して、インスタンスユーザーデータスクリプトを実行します。このプラグインは、インスタンスが初めて起動されたときに一度だけ実行されます。このプラグインは、バッチスクリプトと PowerShell スクリプトをサポートしています。
バッチスクリプト
実行頻度
インスタンスの起動: バッチスクリプトは、ECS インスタンスが初めて起動されたときに一度だけ実行されます。インスタンスの再起動時には、スクリプトは実行されません。
オペレーティングシステムの置き換え: バッチスクリプトは自動的に実行されます。
システムディスクの再初期化: バッチスクリプトは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
[bat]
で、ヘッダーにスペースは含まれていません。半角文字のみ入力できます。その他の文字は使用できません。
インスタンスユーザーデータが書き込まれるパスを
C:\Users
にすることはできません。設定した場合、インスタンスユーザーデータは実行されません。説明Windows オペレーティングシステムでは、ユーザー構成ファイルとデータはデフォルトで
C:\Users
ディレクトリとそのサブディレクトリに保存されます。このディレクトリとそのサブディレクトリには、オペレーティングシステムにログインした後にのみアクセスできます。初期化ステージでオペレーティングシステムがユーザーデータを実行するときには、オペレーティングシステムにログインしていません。このステージでは、C:\Users
ディレクトリまたはそのサブディレクトリにデータを書き込むことはできません。
バッチスクリプトの例
カスタムスクリプトを実行する
[bat] echo "bat test" > C:\userdata_test.txt
この例では、バッチスクリプトは ECS インスタンスが初めて起動されたときに一度だけ実行され、
"bat test"
が userdata_test.txt ファイルに書き込まれます。
PowerShell スクリプト
実行頻度
インスタンスの起動: PowerShell スクリプトは、ECS インスタンスが初めて起動されたときに一度だけ実行されます。インスタンスの再起動時には、スクリプトは実行されません。
オペレーティングシステムの置き換え: PowerShell スクリプトは自動的に実行されます。
システムディスクの再初期化: PowerShell スクリプトは自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースインスタンスのオペレーティングシステムを置き換える場合、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
カスタムイメージを使用して ECS インスタンスを作成する場合、インスタンスのシステムディスクにはデータが保存されます。システムディスクを初期化すると、システムはインスタンスが初めて起動されたのではないと判断し、スクリプトを実行しません。
形式
最初の行は
[powershell]
で、ヘッダーにスペースは含まれていません。半角文字のみ入力できます。その他の文字は使用できません。
インスタンスユーザーデータが書き込まれるパスを
C:\Users
にすることはできません。設定した場合、インスタンスユーザーデータは実行されません。説明Windows オペレーティングシステムでは、ユーザー構成ファイルとデータはデフォルトで
C:\Users
ディレクトリとそのサブディレクトリに保存されます。このディレクトリとそのサブディレクトリには、オペレーティングシステムにログインした後にのみアクセスできます。初期化ステージでオペレーティングシステムがユーザーデータを実行するときには、オペレーティングシステムにログインしていません。このステージでは、C:\Users
ディレクトリまたはそのサブディレクトリにデータを書き込むことはできません。
PowerShell スクリプトの例
カスタムスクリプトを実行する
[powershell] write-output "powershell test" | Out-File C:\userdata_test.txt
この例では、PowerShell スクリプトは ECS インスタンスが初めて起動されたときに一度だけ実行され、
powershell test
が userdata_test.txt ファイルに書き込まれます。
ステップ 2: 準備したインスタンスユーザーデータを使用して ECS インスタンスを作成する
ECS コンソールで ECS インスタンスを作成する
カスタム起動 タブの ECS インスタンス購入ページで、[詳細設定(オプション)] セクションを展開します。[ユーザーデータ] フィールドに、インスタンスユーザーデータを入力します。
重要[Base64 エンコード情報の入力] を選択した場合は、インスタンスユーザーデータが Base64 でエンコードされており、Base64 エンコード前のサイズが 32 KB を超えていないことを確認してください。「Base64 エンコード情報の入力」をオフにすると、システムはインスタンスユーザーデータを自動的に Base64 でエンコードします。
API 操作を呼び出して ECS インスタンスを作成する
RunInstances または CreateInstance 操作を呼び出して ECS インスタンスを作成する場合は、
UserData
パラメーターを指定します。
ステップ 3:インスタンスのユーザーデータが想定どおりに実行されるかどうかを確認する
スクリプトの内容に基づいて、カスタム スクリプトが想定どおりに実行されるかどうかを確認します。この例では、次のユーザーデータ スクリプトが Linux インスタンスに渡されます。
#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
サンプルのユーザーデータ スクリプトは、ECS インスタンスが初めて起動されたときに一度だけ実行され、システム時刻を userdata_test.txt ファイルに書き込みます。スクリプトが想定どおりに実行されるかどうかを確認するには、cat userdata_test.txt
コマンドを実行します。次のコマンド出力は、システム時刻が userdata_test.txt
ファイルに書き込まれたことを示しています。
ユーザーデータ スクリプトの実行時に問題が発生した場合は、次の一般的なクラウドアシスタント コマンドを実行して、エラー ログを取得できます:ACS-ECS-UserData-Check-for-linux.sh
。ログにエラー メッセージが表示された場合は、スクリプトの実行時にエラーが発生しました。ログにエラー メッセージが表示されない場合は、スクリプトの実行時にエラーは発生しませんでした。この場合は、他の側面からスクリプトを確認して、問題の原因を特定します。一般的なクラウドアシスタント コマンドの詳細については、「一般的なコマンドを表示して実行する」をご参照ください。
その他の操作
既存の ECS インスタンスのインスタンスユーザーデータを表示する
インスタンスユーザーデータが ECS インスタンスに渡された後、メタデータサービス、ECS コンソールを使用するか、API 操作を呼び出すことによって、インスタンスユーザーデータを表示できます。
メタデータサービスを使用してインスタンスユーザーデータを表示する(セキュリティ強化モード)
Linux インスタンス
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:180"` curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/user-data
Windows インスタンス
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "180"} -Method PUT -Uri http://100.100.100.200/latest/api/token Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/user-data
上記の例では、トークンの有効期間は 180 秒です。ビジネスシナリオに基づいて有効期間を変更できます。
この例では、メタデータサービスのセキュリティ強化モードを使用してメタデータを取得します。メタデータサービスを使用してメタデータを取得する方法の詳細については、「インスタンスメタデータ」をご参照ください。
メタデータの詳細については、「インスタンスメタデータ」をご参照ください。
ECS コンソールでインスタンスユーザーデータを表示する
ECS インスタンスが [停止] 状態であることを確認します。
重要ECS インスタンスが従量課金制で課金され、VPC に存在する場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することをお勧めします。 [エコノミーモード] を選択すると、インスタンスの計算リソース(vCPU とメモリ)がリサイクルされます。その結果、リソース不足のためにインスタンスの再起動に失敗する可能性があります。詳細については、「エコノミーモード」をご参照ください。
インスタンスユーザーデータを表示する ECS インスタンスの ID をクリックして、インスタンスの詳細ページに移動します。ページの右上隅にある [すべてのアクション] をクリックします。表示されるペインで、
を検索してクリックします。表示されるダイアログボックスの [ユーザーデータ] フィールドに、設定したインスタンスユーザーデータが表示されます。
API 操作を呼び出してインスタンスユーザーデータをクエリする
ECS インスタンスのインスタンスユーザーデータをクエリするには、DescribeUserData 操作を呼び出します。詳細については、「DescribeUserData」をご参照ください。
既存の ECS インスタンスのインスタンスユーザーデータを変更する
既存の ECS インスタンスのインスタンスユーザーデータを変更するには、ECS コンソールで次の手順を実行します。
ECS インスタンスが [停止] 状態であることを確認します。
重要ECS インスタンスが従量課金制で課金され、VPC に存在する場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することをお勧めします。 [エコノミーモード] を選択すると、インスタンスの計算リソース(vCPU とメモリ)がリサイクルされます。その結果、リソース不足のためにインスタンスの再起動に失敗する可能性があります。詳細については、「エコノミーモード」をご参照ください。
管理する ECS インスタンスの ID をクリックして、インスタンスの詳細ページに移動します。ページの右上隅にある [すべてのアクション] をクリックします。表示されるペインで、
を検索してクリックします。 [ユーザーデータ] フィールドに、インスタンスユーザーデータを入力します。
既存の ECS インスタンスのインスタンスユーザーデータを変更した後、インスタンスの起動後にインスタンスユーザーデータが実行されるかどうかは、インスタンスユーザーデータの形式と実行頻度によって決まります。インスタンスユーザーデータを変更する前に、要件を特定する必要があります。詳細については、「インスタンスユーザーデータの形式と実行頻度」をご参照ください。
参考資料
Auto Scaling のユーザーデータ機能を使用すると、複数の ECS インスタンスが起動時に構成済みのスクリプトまたはコマンドを自動的に実行できるようになります。 これにより、ECS インスタンス構成の整合性が確保され、O&M が簡素化されます。 詳細については、「インスタンスユーザーデータ機能を使用して ECS インスタンスを自動的に構成する」をご参照ください。
プログラムの例外、インスタンスの再起動、停電などの問題によってサービスまたはスクリプトが中断された場合に、サービスまたはスクリプトを迅速に回復する必要がある場合は、
ecs-tool-servicekeepalive
という名前のクラウドアシスタント プラグインを使用します。 詳細については、「クラウドアシスタント プラグインを使用してサービスを維持する」をご参照ください。インスタンス初期化構成の管理方法については、「初期化ツール」をご参照ください。