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

:カスタムデータを使用したインスタンスの初期化

最終更新日:Jun 21, 2026

RDS Custom インスタンスを作成する際に、カスタムデータを使用して、システムの自動設定やスクリプトの実行ができます。たとえば、Nginx や Docker の事前インストール、ホスト名の変更などが可能です。

カスタムデータ

カスタムデータは、初回起動時に自動初期化タスクを実行するために RDS Custom インスタンスに渡すスクリプトまたは設定ファイルです。RDS Custom インスタンスは、cloud-init コンポーネントを使用してカスタムデータを読み取り、処理してこれらの設定を適用します。一般的なデータ形式は次のとおりです。

  • ユーザーデータスクリプト:単純なシェルスクリプトの実行に適しています。

  • Cloud-config データ:YAML 形式を使用してインスタンスを設定するための構造化された方法を提供します。パッケージ、ユーザー、ネットワークなどを管理できます。

  • include ファイル:#include ディレクティブを使用して、ユーザーデータスクリプトまたは Cloud-config データを指す 1 つ以上の URL (Object Storage Service (OSS) の URL など) を参照します。

  • Gzip 圧縮コンテンツ:ユーザーデータスクリプトまたは Cloud-config データが 32 KB を超える場合、.gz ファイルに圧縮し、include ファイルを使用して参照できます。

  • MIME マルチパートファイル:Cloud-config データやユーザーデータスクリプトなど、複数のデータタイプを単一のファイルにバンドルします。

カスタムデータの実行頻度は、データタイプとシナリオによって異なります。

データ形式

インスタンスの起動

オペレーティングシステムの変更

システムディスクの再初期化

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

インスタンスの初回起動時にのみ実行されます。その後の再起動では実行されません。

自動的に実行されます。

自動的に実行されます。

Cloud-config データ

タスクの実行は、対応するモジュールの頻度設定に依存します。

  • once-per-instance:インスタンスの初回起動時にのみ実行されます。

  • always:インスタンスが起動するたびに実行されます。

自動的に実行されます。

自動的に実行されます。

include ファイル

実行は、リンクされたコンテンツ (ユーザーデータスクリプトまたは Cloud-config データ) に依存します。

自動的に実行されます。

自動的に実行されます。

Gzip 圧縮コンテンツ

実行は、ファイルの内容 (ユーザーデータスクリプトまたは Cloud-config データ) に依存します。

自動的に実行されます。

自動的に実行されます。

MIME マルチパートファイル

実行は、ファイルの内容 (ユーザーデータスクリプトまたは Cloud-config データ) に依存します。

自動的に実行されます。

自動的に実行されます。

重要

次のシナリオでは、スクリプトは自動的に実行されません。

  • 元のインスタンスから作成されたカスタムイメージでオペレーティングシステムを置き換えた場合、システムはこれをインスタンスの初回起動とは見なさないため、スクリプトは実行されません。

  • カスタムイメージから作成されたインスタンスのシステムディスクを再初期化した場合、ディスクにはすでにデータが含まれているため、システムはこれを初回起動とは見なしません。その結果、スクリプトは実行されません。

カスタムデータ形式の詳細については、cloud-init ドキュメントの「User-Data Formats」をご参照ください。

制限事項

インスタンスは、パブリックイメージ、またはパブリックイメージから作成されたカスタムイメージを使用する必要があります。オペレーティングシステムは、次のいずれかである必要があります。

Alibaba Cloud Linux、CentOS Stream、Ubuntu、Debian

インスタンス作成時のカスタムデータの使用

ステップ 1: カスタムデータの準備

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

  • 形式

    スクリプトの最初の行は #! である必要があります。

  • ユーザーデータスクリプトの例

    • カスタムスクリプトの実行。この例では、インスタンスの初回起動時にシステム時刻を userdata_test.txt ファイルに書き込みます。

      #!/bin/sh
      echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
    • yum リポジトリ、DNS 設定、および時刻同期サービスのカスタマイズ

      次の例では CentOS Stream 9 を使用します。ご使用のオペレーティングシステムに合わせて設定を置き換えてください。

      重要

      インスタンスの起動時に、システムはデフォルトの yum リポジトリ、NTP サービス、DNS サービスを自動的に設定します。インスタンスのカスタムデータを使用してこれらのデフォルト設定を変更できます。ただし、次の点にご注意ください。

      • yum リポジトリをカスタマイズした場合、Alibaba Cloud は yum リポジトリのサポートを提供しなくなります。

      • NTP サービスをカスタマイズした場合、Alibaba Cloud は時刻同期のサポートを提供しなくなります。

      #!/bin/sh
      # DNS の変更
      echo "nameserver 114.114.114.114" | tee /etc/resolv.conf
      # 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
      # 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 リポジトリを変更することもできます。ただし、この方法は柔軟性に欠け、Alibaba Cloud が特定の yum リポジトリを事前設定しているシナリオでは機能しない場合があります。代わりにユーザーデータスクリプトを使用することを推奨します。

    • カスタム管理者アカウントの作成

      デフォルトでは、RDS Custom インスタンスは 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-config データ

  • 形式

    • 最初の行は、先頭にスペースを入れずに #cloud-config にする必要があります。

    • 内容は有効な YAML 構文を使用する必要があります。

  • Cloud-config データの例

    • ソフトウェアリポジトリのカスタマイズ

      カスタムソフトウェアリポジトリを設定するには、カスタムデータ エリアに次の内容を入力します。この例は Ubuntu イメージ用です。別のイメージを使用する場合は、内容を適切なモジュール設定に置き換えてください。

      #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 サービスの自動インストール

      nginx サービスを自動的にインストールするには、カスタムデータ エリアに次の内容を入力します。

      #cloud-config
      packages: 
       - nginx 
      runcmd: 
       - systemctl start nginx.service
    • カスタムホスト名の設定

      カスタムホスト名を設定するには、カスタムデータ エリアに次の内容を入力します。

      #cloud-config
      hostname: my-instance
      fqdn: my-instance.localdomain
    • カスタムスクリプトの自動実行

      インスタンスが起動するたびにシェルスクリプトを自動的に実行するには、カスタムデータ エリアに次の内容を入力します。

      #cloud-config
      bootcmd:
      - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt

include ファイル

  • 形式

    最初の行は、先頭にスペースを入れずに #include にする必要があります。

  • include ファイルの例 この例は、中国 (杭州) リージョンの OSS バケットに格納されているスクリプトを指す URL を示しています。

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

Gzip 圧縮コンテンツ

  • 形式

    Gzip 圧縮コンテンツは、#include ディレクティブを含む include ファイルを介して参照されます。

  • Gzip 圧縮コンテンツの例 この例は、中国 (杭州) リージョンの OSS バケットに格納されている Gzip 圧縮ファイルを指す URL を示しています。

    #include
    https://rc-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz

MIME マルチパートファイル

  • 形式

    • 最初の行は、先頭にスペースを入れずに Content-Type: multipart/mixed; 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
      content: |
        Created by cloud-init
      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 と書き込みます。

ステップ 2: カスタムデータの使用

  • コンソールでのインスタンス作成

    RDS Custom インスタンスを作成する際、その他の設定 セクションを展開し、カスタムデータ エリアにカスタムデータを入力します。

    重要

    カスタムデータがすでに Base64 エンコード済みの場合、Base64 エンコード済み を選択します。エンコード前のカスタムデータのサイズは 32 KB を超えることはできません。データがエンコードされていない場合は、このオプションを選択しないままにしておくと、システムが自動的に内容をエンコードします。

  • API を使用したインスタンスの作成

    API を使用してインスタンスを作成する場合は、RunRCInstances API の UserData パラメーターを指定します。

ステップ 3 (任意): カスタムデータ実行の検証

このセクションでは、次のユーザーデータスクリプトを例として使用します。

#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt

この例では、ユーザーデータスクリプトは、インスタンスの初回起動時に現在のシステム時刻を userdata_test.txt ファイルに書き込みます。結果を検証するには、cat userdata_test.txt コマンドを実行してスクリプトの出力を表示します。

カスタムデータの表示

DescribeRCInstanceAttribute API を呼び出して、RDS Custom インスタンスのカスタムデータをクエリできます。

関連ドキュメント

RDS Custom インスタンスの作成