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 データ |
タスクの実行は、対応するモジュールの頻度設定に依存します。
|
自動的に実行されます。 |
自動的に実行されます。 |
|
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 インスタンスのカスタムデータをクエリできます。