すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:インスタンスユーザーデータを使用してインスタンスを初期化する

最終更新日:Nov 14, 2024

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 testuserdata_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ファイルに書き込まれていることを示しています。

view-result

説明

ユーザーデータスクリプトの実行時に問題が発生した場合は、次の一般的な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
説明

ECSコンソールでのインスタンスユーザーデータの表示

  1. ECSインスタンスのステータスが [停止済み] であることを確認します。

    重要

    ECSインスタンスが従量課金方式を使用して課金され、VPCにある場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することを推奨します。 [エコノミーモード] を選択した場合、インスタンスのコンピューティングリソース (vCPUとメモリ) がリサイクルされます。 その結果、リソース不足によりインスタンスの再起動に失敗することがあります。 詳細については、「経済モード」をご参照ください。

  2. [インスタンス] ページで、icon1 > [インスタンス設定] > [ユーザーデータの設定] を選択します。 表示されるダイアログボックスの [ユーザーデータ] フィールドで、設定したインスタンスユーザーデータを表示します。

APIを呼び出してインスタンスのユーザーデータを照会する

ECSインスタンスのインスタンスユーザーデータを照会するには、DescribeUserData操作を呼び出します。 詳細については、「DescribeUserData」をご参照ください。

既存のECSインスタンスのインスタンスユーザーデータの変更

既存のECSインスタンスのインスタンスユーザーデータを変更するには、ECSコンソールで次の手順を実行します。

  1. ECSインスタンスのステータスが [停止済み] であることを確認します。

    重要

    ECSインスタンスが従量課金方式を使用して課金され、VPCにある場合、インスタンスを停止するときに [停止モード] セクションで [標準モード] を選択することを推奨します。 [エコノミーモード] を選択した場合、インスタンスのコンピューティングリソース (vCPUとメモリ) がリサイクルされます。 その結果、リソース不足によりインスタンスの再起動に失敗することがあります。 詳細については、「経済モード」をご参照ください。

  2. [インスタンス] ページで、icon1 > [インスタンス設定] > [ユーザーデータの設定] を選択します。 [ユーザーデータの設定] ダイアログボックスで、[ユーザーデータ] フィールドにインスタンスのユーザーデータを入力します。 [確認] をクリックします。

重要

既存のECSインスタンスのインスタンスユーザーデータを変更した後、インスタンスの起動後にインスタンスユーザーデータが実行されるかどうかは、インスタンスユーザーデータの形式と実行頻度によって決まります。 インスタンスユーザーデータを変更する前に、要件を特定する必要があります。 詳細については、このトピックの「インスタンスユーザーデータの形式と実行頻度」をご参照ください。

関連ドキュメント

  • Auto Scalingのインスタンスユーザーデータ機能を使用して、インスタンスの起動時に複数のECSインスタンスで設定済みのスクリプトまたはコマンドを自動的に実行できます。 これにより、一貫したECSインスタンス設定が保証され、O&Mが簡素化されます。詳細については、「インスタンスユーザーデータ機能を使用したECSインスタンスの自動設定」をご参照ください。

  • プログラムの例外、インスタンスの再起動、電源障害などの問題が原因でサービスまたはスクリプトが中断されたときにサービスまたはスクリプトを迅速に復旧させたい場合は、ecs-tool-servicekeepaliveという名前のCloud Assistantプラグインを使用します。 詳細については、「サービスの自動復元」をご参照ください。

  • インスタンスの初期化設定の管理方法については、「インスタンスの初期化設定の管理」をご参照ください。