cloud-init は、初期パスワードの設定、ホスト名の構成、カスタムスクリプトの実行などのタスクを実行して Linux オペレーティングシステムを初期化するオープンソースツールです。ローカルカスタムイメージを Alibaba Cloud に移行する予定で、そのイメージに cloud-init がない場合は、手動でインストールする必要があります。そうしないと、イメージから作成された Elastic Compute Service (ECS) インスタンスは、ホスト名の設定やネットワークの構成などの初期化タスクを自動的に実行できません。これにより、インスタンスの自動デプロイメントと構成が妨げられる可能性があります。このトピックでは、Linux オペレーティングシステムに cloud-init をインストールする方法について説明します。
cloud-init の詳細については、「公式 cloud-init ドキュメント」をご参照ください。
シナリオ
cloud-init は、デフォルトですべての Alibaba Cloud パブリックイメージにインストールされています。ローカルカスタムイメージから作成された ECS インスタンスがシステム構成を自動的に初期化できるようにするには、シナリオに応じた提案に従ってください。
クラウドへの移行を計画している cloud-init がない Linux サーバー
cloud-init がないサーバーを Alibaba Cloud に移行する予定がある場合は、移行前に cloud-init をインストールしてください。これにより、結果として得られる ECS インスタンスは、起動時に初期化タスクを自動的に実行できます。
説明クラウドへの移行を計画していないサーバーの場合、cloud-init をインストールすると、不要な複雑さが加わったり、余分なリソースが使用されたりする可能性があります。特定の環境に基づいてインストールするかどうかを決定できます。
cloud-init バージョンが 0.7.9 より前の Linux サーバー
cloud-init の新しいバージョンには、通常、最新のクラウドプラットフォーム機能との互換性を向上させるためのより多くの機能とバグ修正が含まれています。サーバーに古いバージョンの cloud-init がある場合は、最適な互換性とセキュリティを確保するために、新しいバージョンにアップグレードする必要があります。
cloud-init がインストールされていない Alibaba Cloud 上の ECS インスタンス
ECS インスタンスに cloud-init がない場合は、インスタンスに手動でインストールして、初期化構成を完了できるようにすることができます。
ステップ 1: cloud-init をインストールまたはアップグレードするかどうかを確認する
ソースサーバーにログオンします。
次のコマンドを実行して、cloud-init がインストールされているかどうかを確認します。
CentOS シリーズ
rpm -qa | grep -i cloud-init pip list | grep -i cloud-initUbuntu シリーズ
dpkg -l | grep -i cloud-init pip list | grep -i cloud-init出力が返されない場合、またはバージョンが 0.7.9 より前の場合は: ステップ 2: cloud-init をインストールする に進みます。
重要バージョン 0.7.9 は cloud-init の初期のコミュニティバージョンであり、ECS インスタンスの初期化には適していません。新しいバージョンにアップグレードする必要があります。
バージョンが 18 以降の場合: cloud-init をインストールする必要はありません。ただし、cloud-init はインスタンスの初期化中にネットワークを自動的に構成します。デフォルトの構成がニーズを満たさない場合は、ネットワーク初期化機能を無効にできます。詳細については、「Alibaba Cloud による自動ネットワーク初期化を無効にする」をご参照ください。
バージョンが 19.1.21 の場合: Alibaba Cloud cloud-init 23.2.2 にアップグレードします。Alibaba Cloud cloud-init 23.2.2 は、バージョン 19.1.21 と比較して、次の改善と新機能を提供します:
cloud-init 23.2.2 を使用するインスタンスは、セキュリティ強化モードでのメタデータへのアクセスをサポートします。インスタンスメタデータの詳細については、「インスタンスメタデータ」をご参照ください。
その他の変更には、機能強化、パフォーマンスの向上、バグ修正、コミュニティへの貢献が含まれます。詳細については、「ChangeLog ファイル」をご参照ください。
その他のバージョン: cloud-init をインストールする必要はありません。次のステップ に進みます。
インストール中の誤った操作によるデータ損失を防ぐために、まずソースサーバーのデータをバックアップすることをお勧めします。たとえば、スナップショットを作成できます。
ステップ 2: cloud-init をインストールする
(推奨) Alibaba Cloud cloud-init 23.2.2: Python 3.6 以降が必要です。データソースは
Aliyunです。Alibaba Cloud cloud-init 19.1.21: Python 3.6 以降が必要です。データソースは
Aliyunです。Alibaba Cloud cloud-init 0.7.6a17: このバージョンは、CentOS 6、Debian 9、SUSE Linux Enterprise Server 12 などの一部の古いオペレーティングシステムで必要です。Python 2.7 が必要です。データソースは
Aliyunです。重要Python コミュニティは Python 2.7 のテクニカルサポートを提供しなくなったため、依存関係ライブラリの潜在的な問題を回避するために、新しいバージョンの cloud-init を使用することをお勧めします。
cloud-init のコミュニティバージョン: コミュニティバージョンは cloud-init コミュニティによって維持されています。Alibaba Cloud cloud-init の最新バージョンは 23.2.2 です。新しいバージョンが必要な場合は、コミュニティバージョンをインストールできます。バージョンの詳細については、「cloud-init の公式 Web サイト」をご参照ください。
cloud-init のコミュニティバージョンは、プロジェクトの公式バージョンです。Alibaba Cloud バージョンは Alibaba Cloud プラットフォーム用に最適化されており、そのサービスに対するより良いサポートを提供します。したがって、Alibaba Cloud バージョンの cloud-init を使用することをお勧めします。ニーズに基づいてインストールするバージョンを選択できます。
(推奨) Alibaba Cloud cloud-init 23.2.2
Alibaba Cloud cloud-init の最新バージョンは 23.2.2 です。このバージョンはソフトウェアパッケージとして維持されています。お使いのオペレーティングシステム用のパッケージをインストールするか、ソースパッケージからインストールできます。
次の手順では、Debian 12 と CentOS Stream 9 を例として、バイナリパッケージをダウンロードしてインストールする方法を説明します。
Debian 12
次のコマンドを実行して、cloud-init パッケージをダウンロードします。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb次のコマンドを実行して、パッケージをインストールします。
sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb(オプション) パッケージが後のオープンソースバージョンに更新またはアップグレードされるのを防ぐために、次のコマンドを実行して cloud-init パッケージを現在のバージョンに保持できます。
sudo apt-mark hold cloud-init次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。
cloud-init --version
CentOS Stream 9
次のコマンドを実行して、cloud-init パッケージをダウンロードします。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm次のコマンドを実行して、パッケージをインストールします。
sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm(オプション) パッケージが後のオープンソースバージョンに更新またはアップグレードされるのを防ぐために、次のコマンドを実行して cloud-init パッケージを現在のバージョンにロックできます。
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。
cloud-init --version
デフォルトでは、Alibaba Cloud cloud-init 23.2.2 は、ホスト名からプライベート IPv4 アドレスへのマッピングを `/etc/hosts` ファイルに追加しなくなりました。ビジネスでこの構成が必要な場合は、自分で構成する必要があります。後のオペレーティングシステムバージョンでは、nss-myhostname コンポーネントを使用してホスト名との接続性を確保します。このコンポーネントは、systemd-libs パッケージ (Red Hat シリーズの場合) または libnss-myhostname パッケージ (Debian シリーズの場合) によって提供され、`/etc/nsswitch.conf` 構成ファイルを通じて有効になります。詳細については、「nss-myhostname マニュアル」をご参照ください。
Alibaba Cloud cloud-init 19.1.21
ソースサーバーに Python PIP 依存関係ライブラリがインストールされていることを確認します。
次の例は、さまざまな Linux ディストリビューションに `python3-pip` 依存関係ライブラリをインストールする方法を示しています。
CentOS/Red Hat Enterprise Linux
sudo yum -y install python3-pipUbuntu/Debian
sudo apt-get -y install python3-pipOpenSUSE/SUSE
sudo zypper -n install python3-pip次のコマンドを実行して、Alibaba Cloud cloud-init をダウンロードします。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz次のコマンドを実行して、cloud-init インストールパッケージを現在のディレクトリに解凍します。
tar -zxvf cloud-init-19.1.21.tgzcloud-init ディレクトリに移動し、依存関係ライブラリをインストールします。
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txtcloud-init ディレクトリの tools サブディレクトリに移動します。
cd ./tools次のコマンドを実行して deploy.sh スクリプトを実行し、cloud-init をインストールします。
sudo bash ./deploy.sh <issue> <major_version>次の表に、deploy.sh スクリプトのパラメーターと値の例を示します。
パラメーター
説明
例
<issue>
オペレーティングシステムプラットフォームの種類。有効な値: centos、redhat、rhel、debian、ubuntu、opensuse、および sles。パラメーターの値では大文字と小文字が区別されます。sles は SUSE/SLES を指定します。
説明オペレーティングシステムが CentOS Stream の場合、このパラメーターを centos に設定します。
centos
<major_version>
オペレーティングシステムプラットフォームのメジャーバージョン番号。
説明Ubuntu 14 に Alibaba Cloud cloud-init 19.1.21 をインストールすることはできません。
CentOS 7.6 のメジャーバージョン番号は 7 です。
たとえば、現在のオペレーティングシステムが CentOS 7 の場合は、コマンド
sudo bash ./deploy.sh centos 7を実行します。cloud-init がインストールされていることを確認します。
"description": "success"が返された場合、インストールは成功です。
次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。
cloud-init --version
次のセクションでは、参照用にさまざまな Linux ディストリビューションに Alibaba Cloud cloud-init をインストールするためのサンプルシェルスクリプトを提供します。オペレーティングシステムに基づいてスクリプトを変更できます。
CentOS 7/8
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"Red Hat Enterprise Linux 7/8
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"Ubuntu 16/18/20
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get install python36 python3-pip -y
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"Debian 9/10
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get -y install python3-pip
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"SUSE 12/15
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"OpenSUSE 15
# python3-pip を確認してインストールします。
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# 古いバージョンの cloud-init をバックアップします。
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Alibaba Cloud cloud-init パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# cloud-init をインストールします。
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh opensuse"$issue_major"Alibaba Cloud cloud-init 0.7.6a17
デフォルトでは、CentOS 6、Debian 9、および SUSE Linux Enterprise Server 12 用の Alibaba Cloud パブリックイメージには cloud-init-0.7.6a17 がインストールされています。テストを実行するには、sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak コマンドを実行して、最初に構成ファイルをバックアップできます。
次のコマンドを実行して、オペレーティングシステムが CentOS 6、Debian 9、または SUSE Linux Enterprise Server 12 であるかどうかを確認します。
cat /etc/issueソースサーバーに Python PIP 依存関係ライブラリがインストールされていることを確認します。
次の例は、`python2-pip` 依存関係ライブラリをインストールする方法を示しています。
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pip次のコマンドを実行して、Alibaba Cloud cloud-init 0.7.6a17 をダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a17.tgz tar -zxvf cloud-init-0.7.6a17.tgzcloud-init ディレクトリの tools サブディレクトリに移動します。
cd cloud-init-0.7.6a17/tools/次のコマンドを実行して、cloud-init をインストールします。
sudo bash ./deploy.sh <issue> <major_version>たとえば、現在のオペレーティングシステムが CentOS 6 の場合は、コマンド
sudo bash ./deploy.sh centos 6を実行します。次の表に、deploy.sh スクリプトのパラメーターと値の例を示します。
パラメーター
説明
例
<issue>
オペレーティングシステムプラットフォームの種類。有効な値: centos、debian、および sles。パラメーターの値では大文字と小文字が区別されます。sles は SUSE/SLES を指定します。
centos
<major_version>
オペレーティングシステムプラットフォームのメジャーバージョン番号。
CentOS 6.5 のメジャーバージョン番号は 6 です。
次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。
cloud-init --version
cloud-init のコミュニティバージョン
ソースサーバーに Git、Python、および Python PIP 依存関係ライブラリがインストールされていることを確認します。
次の例は、さまざまな Linux ディストリビューションに Git、Python 3.6、および `python3-pip` 依存関係ライブラリをインストールする方法を示しています。
CentOS/Red Hat Enterprise Linux
sudo yum -y install git python36 python3-pipUbuntu/Debian
sudo apt-get -y install git python36 python3-pipOpenSUSE/SUSE
sudo zypper -n install git python36 python3-pip次のコマンドを実行して、Git を使用して cloud-init ソースパッケージをダウンロードします。
git clone https://git.launchpad.net/cloud-initcloud-init ディレクトリに移動します。
cd ./cloud-init次のコマンドを実行して、すべての依存関係ライブラリをインストールします。
sudo pip3 install -r ./requirements.txt次のコマンドを実行して、cloud-init をインストールします。
python3 setup.py installcloud.cfg 構成ファイルを変更します。
構成ファイルを開きます。
sudo vi /etc/cloud/cloud.cfg
cloud_init_modules:の前の構成を次の内容に置き換えます。# データソース構成の例 # トップレベルの設定は、モジュールおよびシステム構成として使用されます。 # # 'default' エントリが見つかった場合にさまざまなモジュールによって適用および/または使用される可能性のあるユーザーのセット。 # これは、以下で指定されたディストリビューション構成の 'default_user' を参照します users: - default user: name: root lock_passwd: False # これが設定されている場合、'root' は ssh でログインできなくなり、 # 代わりに上記の $user としてログインするようにメッセージが表示されます disable_root: false # これにより、set+update ホスト名モジュールが動作しなくなります (true の場合) preserve_hostname: false syslog_fix_perms: root:root datasource_list: [ AliYun ] # データソース構成の例 datasource: AliYun: support_xen: false timeout: 5 # (デフォルトは 50 秒) max_wait: 60 # (デフォルトは 120 秒) # metadata_urls: [ 'blah.com' ] # 'init' ステージで実行されるモジュール cloud_init_modules:
次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。
cloud-init --version
(オプション) ステップ 3: cloud-init を構成する
Alibaba Cloud による自動ネットワーク初期化を無効にする
cloud-init のバージョンが 18 以降の場合、次の構成でネットワークの初期化を自動的に完了します: BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no。デフォルトのネットワーク構成がビジネスニーズを満たさない場合は、cloud-init 構成ファイルを変更してネットワーク構成をカスタマイズできます。
次のコマンドを実行して、デフォルトの cloud-init 構成ファイルを開きます。次に、
iキーを押して挿入モードに入ります。sudo vim /etc/cloud/cloud.cfgExample datasource configの前に、disabled 構成を追加して、cloud-init の自動ネットワーク構成機能を無効にします。network: config: disabled
この構成を追加すると、cloud-init は /etc/sysconfig/network-scripts/ ディレクトリ内の
ifcfg-eth0などのネットワーク構成ファイルを管理しなくなります。これらのファイルは自分で管理する必要があります。Escキーを押し、:wqと入力して、Enterキーを押してファイルを保存して閉じます。必要に応じて、/etc/sysconfig/network-scripts/ ディレクトリで、IP アドレス、サブネットマスク、ゲートウェイなどのネットワーク構成をカスタマイズできます。
Alibaba Cloud による自動ホスト名設定を無効にする
デフォルトでは、cloud-init はインスタンスの起動時にホスト名を自動的に設定し、/etc/hostname ファイルを更新します。ホスト名を変更したくない場合は、次のように cloud-init 構成ファイルを変更できます。
次のコマンドを実行して、デフォルトの cloud-init 構成ファイルを開きます。次に、
iキーを押して編集モードに入ります。sudo vim /etc/cloud/cloud.cfg構成ファイルで、
preserve_hostname: falseをpreserve_hostname: trueに変更します。
Escキーを押し、:wqと入力して、Enterキーを押してファイルを保存して閉じます。
次のステップ
クラウドへの移行を計画している Linux サーバーの場合、サーバ移行センタ (SMC) を使用して移行できます。詳細については、「サーバを Elastic Compute Service (ECS) に移行する」をご参照ください。
Alibaba Cloud で既に Linux カスタムイメージを実行している ECS インスタンスの場合、システムを再起動して結果を確認できます。ホスト名、ネットワーク、および Network Time Protocol (NTP) が自動的に構成されている場合、cloud-init は正常にインストールされています。たとえば、次のコマンドを実行してネットワーク構成ファイルを表示できます:
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0次の出力は、システムが cloud-init を使用して、DHCP プロトコル、ネットワークデバイス、デバイスタイプなどのネットワーク設定を自動的に構成したことを示しています。
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
