Linux サーバーに cloud-init をインストールすると、Elastic Compute Service (ECS) インスタンスのホスト名、ネットワーク、ユーザーデータを自動で初期化できます。
cloud-init の公式ドキュメントをご参照ください。
ユースケース
cloud-init は、Alibaba Cloud のすべてのパブリックイメージにプリインストールされています。カスタムイメージの場合は、シナリオに応じて以下の推奨事項に従ってください。
-
cloud-init がインストールされていない、クラウドへ移行予定の Linux サーバー
サーバーを Alibaba Cloud に移行する前に cloud-init をインストールしてください。これにより、移行後の ECS インスタンスで、起動時に初期化タスクを実行できます。
説明クラウドに移行しないサーバーでは、cloud-init によって不要な複雑さが増す場合があります。環境に応じて判断してください。
-
cloud-init のバージョンが 0.7.9 よりも古い Linux サーバー
新しいバージョンには、より多くの機能とバグ修正が含まれています。互換性とセキュリティを向上させるため、より新しいバージョンにアップグレードしてください。
-
cloud-init がインストールされていない、Alibaba Cloud 上の 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 は、Elastic Compute Service (ECS) の初期化には適していない初期のコミュニティバージョンです。新しいバージョンへのアップグレードを推奨します。
-
バージョンが 18 以降の場合、インストールは不要です。デフォルトのネットワーク構成をカスタマイズする場合は、Alibaba Cloud による自動ネットワーク初期化の無効化をご参照ください。
-
バージョンが 19.1.21 の場合、Alibaba Cloud cloud-init 23.2.2 へのアップグレードを推奨します。19.1.21 からの主な改善点は次のとおりです:
-
セキュリティ強化モードでのメタデータアクセスに対応しています。インスタンスメタデータをご参照ください。
-
その他の変更には、機能強化、パフォーマンス改善、バグ修正が含まれます。ChangeLog ファイルをご参照ください。
-
-
その他のバージョン:インストールは不要です。次のステップをご参照ください。
-
-
データ損失を防ぐため、インストール前にソースサーバーのデータをバックアップしてください。たとえば、スナップショットを作成してください。
ステップ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.6a18:このバージョンは、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 バージョンは 23.2.2 です。より新しいバージョンが必要な場合は、cloud-init の公式ウェブサイトからコミュニティ版をインストールしてください。
Alibaba Cloud バージョンは Alibaba Cloud サービス向けに最適化されています。より新しいコミュニティリリースが必要な場合を除き、Alibaba Cloud バージョンを使用してください。
(推奨) 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-8_all.deb -
パッケージをインストールします。
sudo apt-get install -y ./cloud-init_23.2.2-8_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-8.el9.noarch.rpm -
パッケージをインストールします。
sudo yum install -y ./cloud-init-23.2.2-8.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 は /etc/hosts ファイル内でホスト名をプライベート IPv4 アドレスにマッピングしなくなりました。このマッピングが必要な場合は、手動で設定してください。新しいバージョンの OS は、ホスト名接続に nss-myhostname コンポーネントを使用します。このコンポーネントは、systemd-libs パッケージ (Red Hat 系) または libnss-myhostname パッケージ (Debian 系) によって提供され、/etc/nsswitch.conf ファイルで有効化されます。nss-myhostname のマニュアルをご参照ください。
Alibaba Cloud cloud-init 19.1.21
-
python3-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.tgz -
cloud-init ディレクトリに移動して、依存関係ライブラリをインストールします。
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt -
cloud-init ディレクトリの tools サブディレクトリに移動します。
cd ./tools -
deploy.sh スクリプトを実行して cloud-init をインストールします。
sudo bash ./deploy.sh <issue> <major_version>deploy.sh スクリプトのパラメーター:
パラメーター
説明
例
<問題>
OS プラットフォームタイプ。有効な値: centos、redhat、rhel、debian、ubuntu、opensuse、および sles。パラメーター値では大文字と小文字が区別されます。sles は SUSE/SLES を示します。
説明オペレーティングシステムが CentOS Stream の場合、このパラメーターを centos に設定します。
centos
<メジャーバージョン>
オペレーティングシステムのメジャーバージョン番号。
説明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.6a18
CentOS 6、Debian 9、および SUSE Linux Enterprise Server 12 向けの Alibaba Cloud パブリックイメージには、デフォルトで cloud-init-0.7.6a18 がインストールされています。テストを行う場合は、まず sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak コマンドを実行して設定ファイルをバックアップします。
-
オペレーティングシステムが CentOS 6、Debian 9、または SUSE Linux Enterprise Server 12 であることを確認します。
cat /etc/issue -
python2-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.6a18 パッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz tar -zxvf cloud-init-0.7.6a18.tgzcloud-init ディレクトリの tools サブディレクトリに移動します。
cd cloud-init-0.7.6a18/tools/-
cloud-init をインストールします。
sudo bash ./deploy.sh <issue> <major_version>たとえば、現在のオペレーティングシステムが CentOS 6 の場合は、コマンド
sudo bash ./deploy.sh centos 6を実行します。deploy.sh スクリプトのパラメーター:
パラメーター
説明
例
<イシュー>
オペレーティングシステムのプラットフォームタイプ。有効な値は centos、debian、sles です。パラメーター値では大文字と小文字が区別されます。sles は SUSE/SLES を指定します。
centos
<メジャーバージョン>
オペレーティングシステムのメジャーバージョン番号。
CentOS 6.5 のメジャーバージョン番号は 6 です。
-
cloud-init のバージョンを確認します。
cloud-init --version
cloud-init のコミュニティ版
-
Git、Python、および python3-pip パッケージがインストールされていることを確認します。
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-init -
cloud-init ディレクトリに移動します。
cd ./cloud-init -
すべての依存関係ライブラリをインストールします。
sudo pip3 install -r ./requirements.txt -
cloud-init をインストールします。
python3 setup.py install -
cloud.cfg 設定ファイルを変更します。
-
設定ファイルを開きます。
sudo vi /etc/cloud/cloud.cfg
-
cloud_init_modules:の前の設定を、以下の内容で置き換えます。# トップレベルの設定は、モジュールおよびシステム設定として使用されます。 # さまざまなモジュールによって適用または使用されるユーザーのセットです。 # 'default' エントリが見つかった場合、以下で指定されたディストリビューション設定の 'default_user' から参照されます。 users: - default user: name: root lock_passwd: False # これが設定されている場合、'root' は ssh でログインできなくなり、 # 代わりに上記のユーザーとしてログインするように指示されます。 disable_root: false # これにより、(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.cfg -
Example 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 サーバーをクラウドに移行するには、Server Migration Center (SMC) を使用してください。詳細については、「サーバーをECS インスタンスに移行する」をご参照ください。
-
Alibaba Cloud 上で Linux カスタムイメージを実行している ECS インスタンスの場合は、システムを再起動してインストールが正常に完了したかを確認してください。ホスト名、ネットワーク、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
