NGINXとDockerの事前インストールやホスト名の変更など、Elastic Compute Service (ECS) インスタンスの作成時にシステム設定を完了したり、特定のビジネススクリプトを実行したりする場合は、User Dataパラメーターを設定できます。
インスタンスユーザーデータ
インスタンスユーザーデータとは、スクリプト、手順、設定ファイルなど、ECSインスタンスにアップロードされるデータを指します。 インスタンスユーザーデータを使用して、ECSインスタンスを初期化または設定できます。 たとえば、ECSインスタンスが初めて起動されると、インスタンスは自動的にインスタンスユーザーデータを使用してサービス起動スクリプトを実行し、ソフトウェアをインストールし、ログを印刷します。 インスタンスのユーザーデータは、ECSインスタンスの初回起動時に自動的に実行できます。 Linux ECSインスタンスを起動するたびに、特定の形式のインスタンスユーザーデータを実行することもできます。 詳細については、このトピックの「インスタンスユーザーデータの形式と実行頻度」をご参照ください。
制限事項
初期化設定をカスタマイズするECSインスタンスは、仮想プライベートクラウド (VPC) にデプロイする必要があります。
初期化設定をカスタマイズするECSインスタンスは、次のいずれかのオペレーティングシステムを実行するパブリックイメージ、またはパブリックイメージから派生したカスタムイメージから作成する必要があります。
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とWindows ECSインスタンスは異なる初期化ツールを使用します。 各初期化ツールは、複数のインスタンスユーザーデータ形式をサポートします。 次のセクションでは、LinuxおよびWindows ECSインスタンスでサポートされているインスタンスユーザーデータ形式と、さまざまな形式でのインスタンスユーザーデータの実行頻度について説明します。
インスタンスユーザーデータの形式と実行頻度
Linux インスタンス
Linuxインスタンスは、cloud-init
コンポーネントを使用して初期化設定を完了します。 インスタンスが初めて起動されたかどうかに基づいて、さまざまな設定が実行されます。 初期バージョンのイメージを使用する特定のインスタンスは、Upstartジョブ
を使用して初期設定を完了することもできます。
cloud-init
コンポーネントでサポートされているインスタンスユーザーデータ形式には、user-data
スクリプト、cloud-config
データ、include
files、Gzip
圧縮コンテンツが含まれます。 ユーザーデータスクリプトとクラウド設定データを直接使用して、ECSインスタンスを設定できます。 cloud-init
コンポーネントに加えて、初期バージョンのイメージを使用する特定のインスタンスでは、Upstartジョブ
を使用して初期設定を完了できます。
インスタンスユーザーデータの形式の詳細については、cloud-initドキュメントの「ユーザーデータ形式」をご参照ください。
ユーザーデータスクリプト、cloud-configデータ、またはincludeファイルのサイズが32 KBを超える場合、データ形式としてGzip圧縮コンテンツを選択することを推奨します。
インスタンスを起動するたびにユーザーデータスクリプトを実行する場合は、データ形式としてcloud-config dataまたはUpstart jobを選択することを推奨します。
ユーザーデータスクリプト
概要
ユーザーデータスクリプトがLinuxインスタンスに渡された後、スクリプトはシェルスクリプトとして使用され、インスタンスが最初に起動されたときに1回だけ実行されます。
ランニング周波数
インスタンスの起動: ユーザーデータスクリプトは、ECSインスタンスが最初に起動されたときにのみ実行されます。 インスタンスの再起動時にスクリプトが実行されません。
オペレーティングシステムの置き換え: ユーザーデータスクリプトが自動的に実行されます。
システムディスクの再初期化: ユーザーデータスクリプトが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は、数字記号と感嘆符 (
#!
) で始まります。サンプルユーザーデータスクリプト
カスタムユーザーデータスクリプトの実行
#!/bin/sh echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
サンプルのユーザーデータスクリプトは、ECSインスタンスが最初に起動されたときに1回だけ実行され、システム時刻をuserdata_test.txtファイルに書き込みます。
ECSインスタンスのソフトウェアリポジトリ、ドメインネームシステム (DNS) 解決、時刻同期サービス設定のカスタマイズ
ECSインスタンスを作成するときに、ユーザーデータスクリプトを使用して、インスタンスのソフトウェアリポジトリ、DNS解決、および時刻同期サービスの設定をカスタマイズできます。 次のサンプルコードでは、CentOS Stream 9を使用しています。 オペレーティングシステムに基づいて設定を置き換えます。
重要ECSインスタンスが起動されると、システムはデフォルトのYellowdog Updater Modified (YUM) リポジトリ、Network Time Protocol (NTP) サービス、およびDNSサービスを設定します。 インスタンスのインスタンスユーザーデータを使用して、設定されているデフォルトのYUMリポジトリ、NTPサービス、およびDNSサービスを変更できます。 以下の点にご注意ください。
カスタムYUMリポジトリを使用している場合、Alibaba CloudはYUMリポジトリサポートの提供を停止します。
カスタムNTPサービスを使用する場合、Alibaba Cloudは時刻同期サービスの提供を停止します。
#!/bin/sh # Modify DNS echo "nameserve 114.114.114.114" | tee /etc/resolv.conf # Modify yum repo and update 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 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リポジトリアドレスに置き換え、Alibaba Cloudの実際のNTPサーバーアドレスでサービスを提供しr ntp1.aliyun.com
。cloud-configデータを使用してYUMリポジトリを変更することもできます。 ただし、cloud-configデータはユーザーデータスクリプトよりも柔軟性が低く、特定のYUMリポジトリがAlibaba Cloudによって事前設定されているシナリオには適していません。 ユーザーデータスクリプトの使用を推奨します。
管理者アカウントの指定
デフォルトでは、Linuxインスタンスはrootアカウントを管理者アカウントとして使用します。 インスタンスのインスタンスユーザーデータを使用して、別のアカウントを管理者アカウントとして指定できます。
#!/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 **** を実際の公開鍵に置き換えます。
ユーザーデータスクリプトの実行時に問題が発生した場合は、次の一般的なCloud Assistantコマンドを実行してエラーログを取得できます: ACS-ECS-UserData-Check-for-linux.sh
。 ログにエラーメッセージが表示された場合、スクリプトの実行時にエラーが発生しました。 ログにエラーメッセージが表示されない場合、スクリプトの実行時にエラーは発生しませんでした。 この場合は、他の側面からスクリプトを確認して、問題の原因を特定してください。 一般的なCloud Assistantコマンドの詳細については、「一般的なコマンドの表示と実行」をご参照ください。
クラウド設定データ
概要
Cloud-initは、ソフトウェアパッケージのインストールやネットワーク設定の設定など、特定のタスクや設定を実行する一連の機能モジュールを定義しています。 Cloud-initは、ベンダーデータ、カスタムデータ、およびカーネルパラメータからcloud-configデータを取得します。 cloud-configデータは、タスクに関与するモジュールと実行するアクションを決定します。 ECSインスタンスを作成する前に、モジュールとタスクを指定してカスタムクラウドコンフィグデータを設定し、クラウドコンフィグデータをインスタンスユーザーデータとしてインスタンスに渡すことができます。 インスタンスが起動されると、cloud-initはcloud-configデータを読み取り、解析して、構成ファイルの指示に従ってモジュールを実行し、タスクを実行してインスタンスを構成およびデプロイします。
ランニング周波数
インスタンスの起動: cloud-configデータ内のタスクを実行するかどうかは、タスクに対応するモジュールの実行頻度によって決まります。 モジュールの詳細については、「モジュール」をご参照ください。
Once-per-instance: モジュールは、ECSインスタンスが最初に起動されたときに1回だけ実行されます。 たとえば、AptやSet Passwordsなどのモジュールは、インスタンスごとに1回の頻度で設定および実行されます。 モジュールはインスタンスの再起動時に実行されません。
常に: モジュールはECSインスタンスが起動されるたびに実行されます。 たとえば、BootcmdやUpdate Etc HostsなどのモジュールがAlwaysの頻度で実行される場合、ECSインスタンスが起動されるたびにモジュールが実行されます。
オペレーティングシステムの交換: モジュールは自動的に実行されます。
システムディスクの再初期化: モジュールが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
#cloud-config
で始まり、ヘッダーにはスペースが含まれていません。Cloud-configデータは、YAML (Yet Another Markup Language) 構文に従う必要があります。
サンプルcloud-config data
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
NGINXサービスの自動インストールの構成
ECSインスタンスの [ユーザーデータ] フィールドに、次の内容を入力して、インスタンスがNGINXサービスを自動的にインストールできるようにします。
#cloud-config packages: - nginx runcmd: - systemctl start nginx.service
ホスト名の指定
ECSインスタンスの [ユーザーデータ] フィールドに、次の内容を入力して、インスタンスのホスト名を指定します。
#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
include ファイル
概要
インクルードファイルには、ユーザーデータスクリプトまたはクラウド設定データへの1つ以上のリンクが含まれています。 各リンクは別々のラインを占める。 ECSインスタンスが起動すると、cloud-initはリンクを1つずつ読み取り、解析します。 cloud-initがリンクを読み取るときにエラーが発生した場合、cloud-initは残りのリンクの読み取りを停止します。
説明Alibaba Cloud Object Storage Service (OSS) を使用して、ユーザーデータスクリプトまたはクラウド設定データをECSインスタンスにアップロードし、リンクを取得し、リンクの有効期間を指定できます。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。
ランニング周波数
インスタンスの起動: 実行頻度は、リンクの送信先のコンテンツによって異なります。 たとえば、リンクがユーザーデータスクリプトに向けられている場合、スクリプトはECSインスタンスが最初に起動されたときに1回だけ実行されます。 リンクがcloud-configデータに向けられている場合、cloud-configデータの実行頻度が優先されます。
オペレーティングシステムの置き換え: インクルードファイルが自動的に実行されます。
システムディスクの再初期化: インクルードファイルが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
#include
で始まり、ヘッダーにはスペースが含まれていません。サンプルinclude file
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh
この例では、includeファイルにはユーザーデータスクリプトへのリンクが含まれており、スクリプトはECSインスタンスが最初に起動されたときに1回だけ実行されます。
説明インクルードファイルまたはGzip圧縮コンテンツを使用する場合は、ストレージサービスを使用してスクリプトをアップロードし、スクリプトリンクを取得し、リンクの有効期間を指定します。 Alibaba Cloud OSSの使用を推奨します。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。
Gzip 圧縮コンテンツ
概要
ユーザーデータスクリプト、cloud-configデータ、またはincludeファイルのサイズが32 KBを超える場合は、Gzipを使用して、
. gz
形式で、対応するリンクを生成してから、インクルードファイルをECSインスタンスに渡します。 Cloud-initは、Gzip圧縮コンテンツを自動的に解凍します。 解凍されたコンテンツの実行結果は、ECSインスタンスに直接渡される非圧縮コンテンツの実行結果と同じです。説明Alibaba Cloud OSSを使用して、ユーザーデータスクリプトまたはクラウド設定データをECSインスタンスにアップロードしたり、リンクを取得したり、リンクの有効期間を指定したりすることもできます。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。
ランニング周波数
インスタンスの起動: 実行頻度は、スクリプトタイプとモジュールタイプによって異なります。 たとえば、リンクがユーザーデータスクリプトであるGzip圧縮コンテンツに向けられている場合、Gzip圧縮コンテンツはECSインスタンスが最初に起動されたときに1回だけ実行されます。
オペレーティングシステムの置き換え: Gzip圧縮コンテンツが自動的に実行されます。
システムディスクの再初期化: Gzip圧縮コンテンツが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
#include
で始まり、ヘッダーにはスペースが含まれていません。Gzip圧縮コンテンツのサンプルコード
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz
この例では、includeファイルには、ユーザーデータスクリプトであるGzip圧縮コンテンツへのリンクが含まれています。 cloud-initがGzip圧縮されたユーザーデータスクリプトを読み取った後、スクリプトは自動的に解凍され、ECSインスタンスが最初に起動されたときにのみ実行されます。
Upstart jobs
ECSインスタンスでUpstartジョブを使用するには、インスタンスにUpstartサービスをインストールします。 インスタンスは、CentOS 6、Ubuntu 10、Ubuntu 12、Ubuntu 14、Debian 6、Debian 7のいずれかのオペレーティングシステムを実行する必要があります。
概要
Upstartは、イベント駆動型初期化システムです。 Upstartジョブは、いつ開始または停止するか、およびサービスまたはタスクを実行する方法を定義する構成ファイルです。 Upstartジョブファイルのファイル拡張子は。confで、/etc/init /ディレクトリにあります。
ランニング周波数
インスタンスの起動: ECSインスタンスが起動されるたびに、アップスタートジョブが自動的に実行されます。
オペレーティングシステムの交換: Upstartジョブが自動的に実行されます。
システムディスクの再初期化: Upstartジョブが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
#upstart-job
で始まり、ヘッダーにはスペースが含まれていません。サンプルUpstartジョブ
#upstart-job description "upstart test" start on runlevel [2345] #Starts at run levels 2, 3, 4, and 5. stop on runlevel [!2345] #Stops at run levels other than 2, 3, 4, and 5. exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
サンプルUpstartジョブは、システムが指定された実行レベルで実行されるときにタイムスタンプを含むメッセージを返し、そのメッセージを
/root/output.txt
ファイルに追加します。 Upstartジョブは、前に指定した実行レベルとは異なる実行レベルでシステムが実行されると停止します。
Windows インスタンス
Windowsインスタンスは、VminitコンポーネントのPlugin_Main_CloudinitUserDataプラグインを使用して、インスタンスのユーザーデータスクリプトを実行します。 プラグインは、インスタンスが最初に起動されたときに1回だけ実行されます。 このプラグインは、バッチおよびPowerShellスクリプトをサポートします。
バッチスクリプト
ランニング周波数
インスタンスの起動: バッチスクリプトは、ECSインスタンスが最初に起動されたときにのみ実行されます。 インスタンスの再起動時にスクリプトが実行されません。
オペレーティングシステムの交換: バッチスクリプトが自動的に実行されます。
システムディスクの再初期化: バッチスクリプトが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
[bat]
で、ヘッダーにはスペースが含まれていません。半角文字のみ入力できます。
インスタンスユーザーデータが書き込まれるパスは、
C:\Users
にすることはできません。 そうしないと、インスタンスのユーザーデータの実行に失敗します。説明Windowsオペレーティングシステムでは、ユーザー構成ファイルとデータは、デフォルトで
C:\Users
ディレクトリとそのサブディレクトリに格納されます。 ディレクトリとそのサブディレクトリにアクセスできるのは、オペレーティングシステムにログオンした後です。 初期化段階でオペレーティングシステムがユーザーデータを実行しているときに、オペレーティングシステムにログオンしていません。 ステージ内のC:\Users
ディレクトリまたはそのサブディレクトリにデータを書き込むことはできません。
サンプルバッチスクリプト
カスタムスクリプトの実行
[bat] echo "bat test" > C:\userdata_test.txt
この例では、バッチスクリプトは、ECSインスタンスが最初に起動されたときに1回だけ実行され、userdata_test.txtファイルに
"bat test"
が書き込まれます。
PowerShell スクリプト
ランニング周波数
インスタンスの起動: PowerShellスクリプトは、ECSインスタンスが最初に起動されたときにのみ実行されます。 インスタンスの再起動時にスクリプトが実行されません。
オペレーティングシステムの置き換え: PowerShellスクリプトが自動的に実行されます。
システムディスクの再初期化: PowerShellスクリプトが自動的に実行されます。
重要次のシナリオでは、スクリプトは自動的に実行されません。
カスタムイメージを使用して、カスタムイメージが作成されたソースECSインスタンスのオペレーティングシステムを置き換えると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
カスタムイメージを使用してECSインスタンスを作成すると、インスタンスのシステムディスクにデータが保存されます。 システムディスクを初期化すると、システムはインスタンスが初めて起動されていないと判断し、スクリプトを実行しません。
Format
最初の行は
[powershell]
で、ヘッダーにはスペースが含まれていません。半角文字のみ入力できます。
インスタンスユーザーデータが書き込まれるパスは、
C:\Users
にすることはできません。 そうしないと、インスタンスのユーザーデータの実行に失敗します。説明Windowsオペレーティングシステムでは、ユーザー構成ファイルとデータは、デフォルトで
C:\Users
ディレクトリとそのサブディレクトリに格納されます。 ディレクトリとそのサブディレクトリにアクセスできるのは、オペレーティングシステムにログオンした後です。 初期化段階でオペレーティングシステムがユーザーデータを実行しているときに、オペレーティングシステムにログオンしていません。 ステージ内のC:\Users
ディレクトリまたはそのサブディレクトリにデータを書き込むことはできません。
サンプルPowerShellスクリプト
カスタムスクリプトの実行
[powershell] write-output "powershell test" | Out-File C:\userdata_test.txt
この例では、PowerShellスクリプトは、ECSインスタンスが最初に起動されたときに1回だけ実行され、
powershell test
をuserdata_test.txtファイルに書き込みます。
ステップ2: ECSインスタンスの作成時に準備されたインスタンスユーザーデータを使用する
ECSコンソールでのECSインスタンスの作成
ECSインスタンス購入ページの [カスタム起動] タブで、[詳細設定 (オプション)] セクションを展開します。 [ユーザーデータ] フィールドに、インスタンスのユーザーデータを入力します。
重要[Base64エンコード情報の入力] を選択した場合、インスタンスのユーザーデータがBase64でエンコードされ、Base64エンコード前のサイズが32 KBを超えないようにします。 Enter Base64 Encoded Informationをクリアすると、システムはインスタンスのユーザーデータを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インスタンスが最初に起動されたときに1回だけ実行され、システム時刻をuserdata_test.txtファイルに書き込みます。 スクリプトが期待どおりに実行できるかどうかを確認するには、cat userdata_test.txt
コマンドを実行します。 次のコマンド出力は、システム時刻がuserdata_test.txt
ファイルに書き込まれていることを示しています。
ユーザーデータスクリプトの実行時に問題が発生した場合は、次の一般的なCloud Assistantコマンドを実行してエラーログを取得できます: ACS-ECS-UserData-Check-for-linux.sh
。 ログにエラーメッセージが表示された場合、スクリプトの実行時にエラーが発生しました。 ログにエラーメッセージが表示されない場合、スクリプトの実行時にエラーは発生しませんでした。 この場合は、他の側面からスクリプトを確認して、問題の原因を特定してください。 一般的なCloud Assistantコマンドの詳細については、「一般的なコマンドの表示と実行」をご参照ください。
その他の操作
既存の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インスタンスのステータスが [停止済み] であることを確認します。
重要ECSインスタンスが従量課金方式を使用して課金され、VPCにある場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することを推奨します。 [エコノミーモード] を選択した場合、インスタンスのコンピューティングリソース (vCPUとメモリ) がリサイクルされます。 その結果、リソース不足によりインスタンスの再起動に失敗することがあります。 詳細については、「経済モード」をご参照ください。
[インスタンス] ページで、
を選択します。 表示されるダイアログボックスの [ユーザーデータ] フィールドで、設定したインスタンスユーザーデータを表示します。
APIを呼び出してインスタンスのユーザーデータを照会する
ECSインスタンスのインスタンスユーザーデータを照会するには、DescribeUserData操作を呼び出します。 詳細については、「DescribeUserData」をご参照ください。
既存のECSインスタンスのインスタンスユーザーデータの変更
既存のECSインスタンスのインスタンスユーザーデータを変更するには、ECSコンソールで次の手順を実行します。
ECSインスタンスのステータスが [停止済み] であることを確認します。
重要ECSインスタンスが従量課金方式を使用して課金され、VPCにある場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することを推奨します。 [エコノミーモード] を選択した場合、インスタンスのコンピューティングリソース (vCPUとメモリ) がリサイクルされます。 その結果、リソース不足によりインスタンスの再起動に失敗することがあります。 詳細については、「経済モード」をご参照ください。
[インスタンス] ページで、
を選択します。 [ユーザーデータの設定] ダイアログボックスで、[ユーザーデータ] フィールドにインスタンスのユーザーデータを入力します。 [確認] をクリックします。
既存のECSインスタンスのインスタンスユーザーデータを変更した後、インスタンスの起動後にインスタンスユーザーデータが実行されるかどうかは、インスタンスユーザーデータの形式と実行頻度によって決まります。 インスタンスユーザーデータを変更する前に、要件を特定する必要があります。 詳細については、このトピックの「インスタンスユーザーデータの形式と実行頻度」をご参照ください。
関連ドキュメント
Auto Scalingのインスタンスユーザーデータ機能を使用して、インスタンスの起動時に複数のECSインスタンスで設定済みのスクリプトまたはコマンドを自動的に実行できます。 これにより、一貫したECSインスタンス設定が保証され、O&Mが簡素化されます。詳細については、「インスタンスユーザーデータ機能を使用したECSインスタンスの自動設定」をご参照ください。
プログラムの例外、インスタンスの再起動、電源障害などの問題が原因でサービスまたはスクリプトが中断されたときにサービスまたはスクリプトを迅速に復旧させたい場合は、
ecs-tool-servicekeepalive
という名前のCloud Assistantプラグインを使用します。 詳細については、「サービスの自動復元」をご参照ください。インスタンスの初期化設定の管理方法については、「インスタンスの初期化設定の管理」をご参照ください。