cloud-initは、初期パスワードの生成、ホスト名の設定、ユーザーデータスクリプトの実行など、Linuxオペレーティングシステムの初期化操作を自動化するオープンソースの初期化ツールです。 cloud-initがインストールされていないオンプレミスのカスタムイメージをAlibaba Cloudに移行する場合は、cloud-initを手動でインストールできます。 cloud-initをインストールしない場合、カスタムイメージから作成されたElastic Compute Service (ECS) インスタンスは、ホスト名やネットワーク設定などの初期化タスクを自動的に実行できません。 これは、ECSインスタンスの自動デプロイと構成の効率に影響を与える可能性があります。 このトピックでは、Linuxオペレーティングシステムにcloud-initをインストールする方法について説明します。
cloud-initの詳細については、「Cloud-initドキュメント」をご参照ください。
シナリオ
デフォルトでは、すべてのAlibaba cloudパブリックイメージにCloud-initがインストールされます。 オンプレミスのカスタムイメージから作成されたECSインスタンスが自動的にシステム設定を初期化できるようにするには、次の提案を参照し、実際のシナリオに基づいて関連する操作を実行することを推奨します。
Cloud-initは、Alibaba Cloudに移行するLinuxサーバーにインストールされていません。
cloud-initがインストールされていないLinuxサーバーをAlibaba Cloudに移行する前に、サーバーにcloud-initをインストールします。 これにより、Linuxサーバーに基づいて作成されたECSインスタンスは、システムブート中に自動的に初期化できます。
説明LinuxサーバーをAlibaba Cloudに移行したくない場合、サーバーにcloud-initをインストールすると、不必要な複雑さやリソースの使用が発生する可能性があります。 実際の環境に基づいてcloud-initをインストールするかどうかを決定します。
Cloud-init 0.7.9以前はLinuxサーバーにインストールされています。
ほとんどの場合、最近のcloud-initバージョンには、最新のクラウドプラットフォーム機能との互換性を確保するためのより多くの機能と修正が含まれています。 Linuxサーバーに古いバージョンのcloud-initがインストールされている場合は、互換性とセキュリティを最大限に高めるために、cloud-initを0.7.9以降のバージョンにアップグレードすることをお勧めします。
Cloud-initはECSインスタンスにインストールされていません。
ECSインスタンスにcloud-initがインストールされていない場合は、インスタンスにcloud-initをインストールして、インスタンスを自動的に初期化できるようにすることを推奨します。
手順1: cloud-initをインストールまたはアップグレードする必要があるかどうかを確認する
ソースサーバーにログインします。
ソースサーバーにcloud-initがインストールされているかどうかを確認します。
CentOSシリーズ
rpm -qa | grep -i cloud-init pip list | grep -i cloud-init
Ubuntuシリーズ
dpkg -l | grep -i cloud-init pip list | grep -i cloud-init
バージョン番号が返されない場合、またはcloud-initのバージョンが0.7.9以前の場合は、手順2: cloud-initのインストールに進みます。
重要cloud-init 0.7.9は、ネイティブcloud-initの初期バージョンであり、ECSインスタンスには適していないため、アップグレードする必要があります。
cloud-init 18以降が使用されている場合、cloud-initはインスタンスの初期化中にネットワークを自動的に設定できます。 ネットワーク構成がビジネス要件を満たしていない場合は、ニーズに応じてネットワーク構成をカスタマイズできます。
cloud-init 19.1.21が使用されている場合は、Alibaba Cloud cloud-init 23.2.2にアップグレードすることを推奨します。 Alibaba Cloud cloud-init 19.1.21と比較して、Alibaba Cloud cloud-init 23.2.2は以下の改善と新機能を提供します。
Cloud-init 23.2.2では、セキュリティ強化モードでインスタンスメタデータにアクセスできます。 インスタンスメタデータの詳細については、「インスタンスメタデータの取得」をご参照ください。
その他の機能強化、パフォーマンスの改善、エラー修正、およびコミュニティへの貢献。 詳細は、「ChangeLog」をご参照ください。
cloud-initの他のバージョン番号が返された場合は、このトピックの [次の操作] セクションで説明されている操作を実行します。
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.6 a17: このバージョンのcloud-initを、CentOS 6、Debian 9、SUSE Linux Enterprise Server (SLES) 12などの以前の特定のオペレーティングシステムバージョンにインストールします。 Alibaba Cloud cloud-init 0.7.6 a17にはPython 2.7が必要で、データソースとして
Aliyun
を使用します。重要Pythonコミュニティは、Python 2.7のテクニカルサポートを提供しなくなりました。 依存関係ライブラリに関連するリスクを防ぐために、新しいバージョンのcloud-initを使用することを推奨します。
Native cloud-init: コミュニティバージョンのcloud-initは、プロジェクトに貢献する開発者のコミュニティによって公開および管理されている公式バージョンです。 Alibaba Cloud cloud-initの最新バージョンは23.2.2です。 最新バージョンのcloud-initを使用する場合は、コミュニティバージョンのcloud-initをインストールします。 詳細については、公式cloud-init Webサイトをご覧ください。
Alibaba Cloud cloud-initは、Alibaba Cloudサービス向けに最適化されており、より良いサポートを提供できます。 互換性を確保するために、Alibaba Cloud cloud-initの使用を推奨します。 ビジネス要件に基づいてインストールするcloud-initバージョンを選択します。
(推奨) Alibaba Cloud cloud-initのインストール23.2.2
Alibaba Cloud cloud-initの最新バージョンは23.2.2です。 Alibaba Cloud cloud-init 23.2.2はパッケージとして維持されます。 オペレーティングシステムのバージョンに適したパッケージをダウンロードするか、ソースコードパッケージを使用してAlibaba Cloud cloud-init 23.2.2をインストールできます。
次のセクションでは、cloud-initのバイナリパッケージをダウンロードし、Debian 12およびCentOS Stream 9にcloud-initをインストールする方法について説明します。
デビアン12
次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをダウンロードします。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb
次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをインストールします。
sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb
(オプション) Alibaba Cloud cloud-initパッケージが自動的に更新されたり、最新のオープンソースバージョンにアップグレードされたりしないようにするには、次のコマンドを実行してパッケージを現在のバージョンに保持することを推奨します。
sudo apt-mark hold cloud-init
次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。
cloud-init --version
CentOSストリーム9
次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをダウンロードします。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm
次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをインストールします。
sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm
(オプション) Alibaba Cloud 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アドレスへのマッピングを自動的に追加しなくなりました。 ビジネス要件に基づいて、マッピングをファイルに手動で追加できます。 最近のオペレーティングシステムバージョンでは、nss-myhostnameモジュールを使用してホスト名の解決を提供しています。 Red Hatオペレーティングシステムでは、nss-myhostnameモジュールはsystemd-libsパッケージに含まれています。 Debianオペレーティングシステムでは、nss-myhostnameモジュールはlibnss-myhostnameパッケージに含まれています。 /etc/nsswitch.conf設定ファイルは、nss-myhostnameモジュールを有効にするために使用されます。 詳細については、「nss-myhostname(8) - Linuxマニュアルページ」をご参照ください。
Alibaba Cloud cloud-initのインストール19.1.21
python-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。
例では、python3-pip依存関係ライブラリが使用されます。 次のいずれかのコマンドを実行して、移行元サーバーのオペレーティングシステムに基づいてpython-pip依存関係ライブラリをインストールします。
CentOSおよびRed Hat Enterprise Linux (RHEL)
sudo yum -y install python3-pip
UbuntuとDebian
sudo apt-get -y install python3-pip
openSUSEと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
次のコマンドを実行して、Alibaba Cloud 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スクリプトを実行し、Alibaba Cloud 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>
オペレーティングシステムのメジャーバージョン番号。
説明Alibaba Cloud cloud-init 19.1.21をUbuntu 14にインストールすることはできません。
CentOS 7.6のメジャーバージョン番号は7です。
たとえば、現在のオペレーティングシステムがCentOS 7の場合、
スードバッシュ。/deploy.sh centos 7
コマンドを実行します。Alibaba Cloud cloud-initがインストールされているかどうかを確認します。
Alibaba Cloud cloud-initがインストールされている場合、
"description": "success"
が返されます。次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。
cloud-init --version
次のセクションでは、Alibaba Cloud cloud-initをさまざまなLinuxディストリビューションにインストールするために使用できるサンプルのシェルスクリプトを提供します。 オペレーティングシステムに基づいてシェルスクリプトを変更します。
CentOS 7およびCentOS 8
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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"
RHEL 7およびRHEL 8
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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、Ubuntu 18、およびUbuntu 20
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get install python36 python3-pip -y
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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"
デビアン9とデビアン10
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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とSUSE 15
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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
# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
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
# Install Alibaba Cloud 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.6 a17のインストール
デフォルトでは、CentOS 6、Debian 9、およびSLES 12のAlibaba Cloud cloud-init-0.7.6a1 7
がAlibaba Cloudパブリックイメージにインストールされます。 Alibaba Cloud cloud-init 0.7.6 a17をテストする場合は、sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak
コマンドを実行して、最初に設定ファイルをバックアップします。
次のコマンドを実行して、オペレーティングシステムのバージョンがCentOS 6、Debian 9、またはSLES 12であるかどうかを確認します。
cat /etc/issue
python-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。
この例では、python2-pip依存関係ライブラリが使用されます。 次のコマンドを実行して、python2-pip依存関係ライブラリをインストールします。
CentOS 6とSLES 12
sudo yum -y install python2-pip
デビアン9
sudo apt-get -y install python2-pip
次のコマンドを実行して、Alibaba Cloud cloud-init 0.7.6 a17インストールパッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a17.tgz tar -zxvf cloud-init-0.7.6a17.tgz
次のコマンドを実行して、cloud-initディレクトリのtoolsサブディレクトリに移動します。
cd cloud-init-0.7.6a17/tools/
次のコマンドを実行してdeploy.shスクリプトを実行し、Alibaba Cloud cloud-initをインストールします。
sudo bash ./deploy.sh <issue> <major_version>
たとえば、現在のオペレーティングシステムがCentOS 6の場合、
スードバッシュ。/deploy.sh centos 6
コマンドを実行して、Alibaba Cloud cloud-initをインストールします。次の表に、deploy.shスクリプトのパラメーターと対応する値を示します。
パラメーター
説明
例
<issue>
オペレーティングシステムのタイプ。 有効な値: centos、debian、sles。 このパラメーターの値は大文字と小文字が区別されます。 slesはSUSEまたはSLESを指定します。
centos
<major_version>
オペレーティングシステムのメジャーバージョン番号。
CentOS 6.5のメジャーバージョン番号は6です。
次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。
cloud-init --version
native cloud-initのインストール
Git、Python、およびpython-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。
例では、Git、Python 3.6、およびpython3-pipが使用されています。 次のコマンドを実行して、特定のLinuxディストリビューション用のGit、Python、およびpython-pip依存ライブラリをインストールします。
CentOSとRHEL
sudo yum -y install git python36 python3-pip
UbuntuとDebian
sudo apt-get -y install git python36 python3-pip
openSUSEと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
変更します。Modify thecloud.cfg設定ファイル。
cloud.cfg設定ファイルを開きます。
sudo vi /etc/cloud/cloud.cfg
cloud_init_modules:
の前のコンテンツを次のコンテンツに置き換えます。# Example datasource config # The top level settings are used as module # and system configuration. # A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below users: - default user: name: root lock_passwd: False # If this is set, 'root' will not be able to ssh in and they # will get a message to login instead as the above $user disable_root: false # This will cause the set+update hostname module to not operate (if true) preserve_hostname: false syslog_fix_perms: root:root datasource_list: [ AliYun ] # Example datasource config datasource: AliYun: support_xen: false timeout: 5 # (defaults to 50 seconds) max_wait: 60 # (defaults to 120 seconds) # metadata_urls: [ 'blah.com' ] # The modules that run in the 'init' stage cloud_init_modules:
次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。
cloud-init --version
(オプション) 手順3: cloud-initの設定
ネットワーク設定のカスタマイズ
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
の前に次の無効設定を追加します。network: config: disabled
設定を追加した後、cloud-initはネットワーク設定を管理しないため、/etc/sysconfig/network-scripts/ ディレクトリ内の
ifcfg-eth0
などのネットワーク設定ファイルを手動で管理する必要があります。Esc
キーを押して挿入モードを終了し、:wq
と入力し、enter
キーを押してcloud-init設定ファイルを保存して閉じます。ビジネス要件に基づいて、/etc/sysconfig/network-scripts/ ディレクトリのIPアドレス、サブネットマスク、ゲートウェイなどのネットワーク設定をカスタマイズします。
自動ホスト名設定の無効化
デフォルトでは、cloud-initはインスタンスの起動時にECSインスタンスのホスト名および /etc/hostname
ファイルを自動的に変更します。 ECSインスタンスのホスト名または /etc/hostsファイルを変更したくない場合は、以下の操作を実行してcloud-init設定ファイルを変更できます。
次のコマンドを実行して、
cloud-init
のデフォルト設定ファイルを開きます。I
キーを押して挿入モードに入ります。sudo vim /etc/cloud/cloud.cfg
preserve_hostname: false
をpreserve_hostname: true
に変更します。Esc
キーを押して挿入モードを終了し、:wq
と入力し、enterキーを押してcloud-init設定ファイルを保存して閉じます。
次のステップ
Server Migration Center (SMC) を使用して、LinuxサーバーをAlibaba Cloudに移行できます。 詳細については、「ECSインスタンスへのサーバーの移行」をご参照ください。
Linuxカスタムイメージを実行するECSインスタンスにcloud-initをインストールした後、インスタンスを再起動してcloud-initが期待どおりにインストールされているかどうかを確認できます。 ECSインスタンスのホスト名、ネットワーク設定、およびnetwork Time Protocol (NTP) 設定を自動的に設定できる場合、cloud-initは期待どおりにインストールされます。 たとえば、次のcatコマンドを実行して、ECSインスタンスの再起動後にネットワーク設定ファイルを表示します。
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0
次のコマンド出力は、システムがDHCP、ネットワークデバイス、デバイスタイプなどのネットワーク設定を自動的に構成したことを示しています。
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no