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

Elastic Compute Service:cloud-init のインストール

最終更新日:Nov 09, 2025

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 をインストールまたはアップグレードするかどうかを確認する

  1. ソースサーバーにログオンします。

  2. 次のコマンドを実行して、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
    • 出力が返されない場合、またはバージョンが 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 をインストールする必要はありません。次のステップ に進みます。

  3. インストール中の誤った操作によるデータ損失を防ぐために、まずソースサーバーのデータをバックアップすることをお勧めします。たとえば、スナップショットを作成できます。

ステップ 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 です。このバージョンはソフトウェアパッケージとして維持されています。お使いのオペレーティングシステム用のパッケージをインストールするか、ソースパッケージからインストールできます。

次の表に、さまざまなオペレーティングシステム用のパッケージのダウンロードリンクを示します。

オペレーティングシステムの種類

オペレーティングシステムのバージョン

バイナリパッケージ

MD5SUM チェック

ソースパッケージ

Debian

12

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-23.2.2-8.tar.gz

11

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb.md5sum

CentOS Stream

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Fedora

40

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm.md5sum

39

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm.md5sum

38

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm.md5sum

AlmaLinux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Rocky Linux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Ubuntu

24

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb.md5sum

22

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb.md5sum

20

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb.md5sum

次の手順では、Debian 12 と CentOS Stream 9 を例として、バイナリパッケージをダウンロードしてインストールする方法を説明します。

Debian 12

  1. 次のコマンドを実行して、cloud-init パッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb
  2. 次のコマンドを実行して、パッケージをインストールします。

    sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb
  3. (オプション) パッケージが後のオープンソースバージョンに更新またはアップグレードされるのを防ぐために、次のコマンドを実行して cloud-init パッケージを現在のバージョンに保持できます。

    sudo apt-mark hold cloud-init
  4. 次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。

    cloud-init --version

CentOS Stream 9

  1. 次のコマンドを実行して、cloud-init パッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm
  2. 次のコマンドを実行して、パッケージをインストールします。

    sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm
  3. (オプション) パッケージが後のオープンソースバージョンに更新またはアップグレードされるのを防ぐために、次のコマンドを実行して cloud-init パッケージを現在のバージョンにロックできます。

    sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'
  4. 次のコマンドを実行して、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

  1. ソースサーバーに Python PIP 依存関係ライブラリがインストールされていることを確認します。

    次の例は、さまざまな Linux ディストリビューションに `python3-pip` 依存関係ライブラリをインストールする方法を示しています。

    CentOS/Red Hat Enterprise Linux

    sudo yum -y install python3-pip

    Ubuntu/Debian

    sudo apt-get -y install python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install python3-pip
  2. 次のコマンドを実行して、Alibaba Cloud cloud-init をダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. 次のコマンドを実行して、cloud-init インストールパッケージを現在のディレクトリに解凍します。

    tar -zxvf cloud-init-19.1.21.tgz
  4. cloud-init ディレクトリに移動し、依存関係ライブラリをインストールします。

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. cloud-init ディレクトリの tools サブディレクトリに移動します。

    cd ./tools
  6. 次のコマンドを実行して deploy.sh スクリプトを実行し、cloud-init をインストールします。

    sudo bash ./deploy.sh <issue> <major_version>

    次の表に、deploy.sh スクリプトのパラメーターと値の例を示します。

    パラメーター

    説明

    <issue>

    オペレーティングシステムプラットフォームの種類。有効な値: centosredhatrheldebianubuntuopensuse、および 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 を実行します。

  7. cloud-init がインストールされていることを確認します。

    "description": "success" が返された場合、インストールは成功です。阿里云cloud-init安装成功

  8. 次のコマンドを実行して、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 コマンドを実行して、最初に構成ファイルをバックアップできます。

  1. 次のコマンドを実行して、オペレーティングシステムが CentOS 6、Debian 9、または SUSE Linux Enterprise Server 12 であるかどうかを確認します。

    cat /etc/issue
  2. ソースサーバーに Python PIP 依存関係ライブラリがインストールされていることを確認します。

    次の例は、`python2-pip` 依存関係ライブラリをインストールする方法を示しています。

    CentOS 6/SUSE Linux Enterprise Server 12

    sudo yum -y install python2-pip

    Debian 9

    sudo apt-get -y install python2-pip
  3. 次のコマンドを実行して、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.tgz
  4. cloud-init ディレクトリの tools サブディレクトリに移動します。

    cd cloud-init-0.7.6a17/tools/
  5. 次のコマンドを実行して、cloud-init をインストールします。

    sudo bash ./deploy.sh <issue> <major_version>

    たとえば、現在のオペレーティングシステムが CentOS 6 の場合は、コマンド sudo bash ./deploy.sh centos 6 を実行します。

    次の表に、deploy.sh スクリプトのパラメーターと値の例を示します。

    パラメーター

    説明

    <issue>

    オペレーティングシステムプラットフォームの種類。有効な値: centosdebian、および sles。パラメーターの値では大文字と小文字が区別されます。sles は SUSE/SLES を指定します。

    centos

    <major_version>

    オペレーティングシステムプラットフォームのメジャーバージョン番号。

    CentOS 6.5 のメジャーバージョン番号は 6 です。

  6. 次のコマンドを実行して、cloud-init のバージョンが期待されるバージョンであるかどうかを確認します。

    cloud-init --version

cloud-init のコミュニティバージョン

  1. ソースサーバーに Git、Python、および Python PIP 依存関係ライブラリがインストールされていることを確認します。

    次の例は、さまざまな Linux ディストリビューションに Git、Python 3.6、および `python3-pip` 依存関係ライブラリをインストールする方法を示しています。

    CentOS/Red Hat Enterprise Linux

    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
  2. 次のコマンドを実行して、Git を使用して cloud-init ソースパッケージをダウンロードします。

    git clone https://git.launchpad.net/cloud-init
  3. cloud-init ディレクトリに移動します。

    cd ./cloud-init
  4. 次のコマンドを実行して、すべての依存関係ライブラリをインストールします。

    sudo pip3 install -r ./requirements.txt
  5. 次のコマンドを実行して、cloud-init をインストールします。

    python3 setup.py install
  6. cloud.cfg 構成ファイルを変更します。

    1. 構成ファイルを開きます。

      sudo vi /etc/cloud/cloud.cfg

      vi /etc/cloud/cloud.cfg

    2. 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:
  7. 次のコマンドを実行して、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 構成ファイルを変更してネットワーク構成をカスタマイズできます。

  1. 次のコマンドを実行して、デフォルトの cloud-init 構成ファイルを開きます。次に、i キーを押して挿入モードに入ります。

    sudo vim /etc/cloud/cloud.cfg
  2. Example datasource config の前に、disabled 構成を追加して、cloud-init の自動ネットワーク構成機能を無効にします。

    network:
      config: disabled

    image

    この構成を追加すると、cloud-init は /etc/sysconfig/network-scripts/ ディレクトリ内の ifcfg-eth0 などのネットワーク構成ファイルを管理しなくなります。これらのファイルは自分で管理する必要があります。

  3. Esc キーを押し、:wq と入力して、Enter キーを押してファイルを保存して閉じます。

  4. 必要に応じて、/etc/sysconfig/network-scripts/ ディレクトリで、IP アドレス、サブネットマスク、ゲートウェイなどのネットワーク構成をカスタマイズできます。

Alibaba Cloud による自動ホスト名設定を無効にする

デフォルトでは、cloud-init はインスタンスの起動時にホスト名を自動的に設定し、/etc/hostname ファイルを更新します。ホスト名を変更したくない場合は、次のように cloud-init 構成ファイルを変更できます。

  1. 次のコマンドを実行して、デフォルトの cloud-init 構成ファイルを開きます。次に、i キーを押して編集モードに入ります。

    sudo vim /etc/cloud/cloud.cfg
  2. 構成ファイルで、preserve_hostname: falsepreserve_hostname: true に変更します。

    image

  3. 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

よくある質問

  • Python 3 を使用して cloud-init をインストールするときに依存関係ライブラリが見つからない場合はどうすればよいですか?

    見つからないライブラリはイメージによって異なる場合があります。pip を使用してインストールしてから、cloud-init を再度インストールできます。

  • cloud-init が異常に実行され、エラーメッセージが返された場合はどうすればよいですか?

    デフォルトのパッケージマネージャ (yum など) と pip マネージャが同じ依存関係ライブラリの異なるバージョンをインストールしている場合、バージョンの競合が発生し、cloud-init が異常に実行される可能性があります。エラーメッセージに基づいて、必要な依存関係ライブラリをダウンロードできます。

    エラーメッセージ

    原因

    トラブルシューティングコマンド

    no setuptools module in python

    python setuptools モジュールがありません。

    Python 3.6 の場合:

    • CentOS/Red Hat: yum -y install python3-pip

    • Ubuntu/Debian: apt-get -y install python3-pip

    • OpenSUSE/SUSE: zypper -n install python3-pip

    File "/home/testuser/cloud-init/cloudinit/log.py", line 19, in <module>
          import six
      ImportError: No module named six  )

    six 依存関係ライブラリがありません。

    pip3 install six
    File "/home/testuser/cloud-init/cloudinit/url_helper.py", line 20, in <module>
          import oauthlib.oauth1 as oauth1
      ImportError: No module named oauthlib.oauth1  )

    oauthlib 依存関係ライブラリがありません。

    pip3 install oauthlib

    エラーメッセージに、見つからない依存関係ライブラリが指定されていません。

    関連するエラーメッセージがマッピングされていません。

    cloud-init の requirements.txt ファイルにリストされているライブラリに基づいて、次のコマンドを実行してすべての依存関係ライブラリをインストールします:

    pip3 install -r requirements.txt
  • インスタンスに新しいバージョンの Python 3 をインストールした後に cloud-init が異常に実行される場合はどうすればよいですか?

    インスタンスに Python 3.9 などの新しいバージョンの Python 3 をインストールし、シンボリックリンクを作成して (例: ln -s /usr/bin/python3.9 /usr/bin/python3) デフォルトバージョンとして設定すると、インストールされている cloud-init が異常に実行されることがあります。たとえば、cloud-init --version コマンドを実行すると、エラーが報告されます:

    $cloud-init --version
    Traceback (most recent call last):
      File "/usr/local/bin/cloud-init", line 33, in <module>
        sys.exit(load_entry_point('cloud-init==19.1.9', 'console_scripts', 'cloud-init')())
      File "/usr/local/bin/cloud-init", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/lib64/python3.9/importlib/metadata.py", line 524, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/lib64/python3.9/importlib/metadata.py", line 187, in from_name
        raise PackageNotFoundError(name)
    importlib.metadata.PackageNotFoundError: cloud-init

    この問題を解決するには、次のいずれかの方法を使用できます:

    • 方法 1: 新しいバージョンの Python 3 を使用して cloud-init を再インストールします。

    • 方法 2: cloud-init 実行可能ファイルを変更して、Python インタープリターのパスを以前の Python 3 バージョンのパスに変更します。次の例は、cloud-init 実行可能ファイルのインタープリターを Python 3.6 に変更する方法を示しています:

      1. 次のコマンドを実行して、cloud-init ファイルを開きます。

        vim   /usr/local/bin/cloud-init
      2. i を押して編集モードに入ります。ファイルの先頭で、#! の後の内容を Python 3.6 があるパスに変更します。

        変更後、#! で始まる行は次のようになります:

        #!/usr/bin/python3.6
      3. Esc キーを押して編集モードを終了します。次に、:wq と入力して Enter キーを押し、ファイルを保存して閉じます。

  • cloud-init をインストールした後、インスタンスの作成時に設定したインスタンスのユーザーデータが実行に失敗するのはなぜですか?

    1. インスタンスで次のコマンドを実行して、インスタンスメタデータにユーザーデータが存在するかどうかを確認します。

      curl http://100.100.100.200/latest/user-data

      結果の説明:

      • ユーザーデータが設定されている場合、ユーザーデータが返されます。問題をトラブルシューティングするには、次のステップに進む必要があります。

      • 情報が返されない場合は、ユーザーデータを設定していません。

    2. 次のいずれかの方法を使用して、ユーザーデータが実行に失敗する理由を特定します。

      • ユーザーデータが正しい形式であるかどうかを確認します。

        ユーザーデータは cloud-init によって実行されます。データ形式が正しいことを確認する必要があります。たとえば、ユーザーデータの最初の行は #! で始まる必要があります。詳細については、「インスタンスの初期化構成をカスタマイズする」をご参照ください。

      • cloud-init の /var/log/cloud-init.log ログファイルでユーザーデータの実行結果を確認し、エラーメッセージに基づいて問題をトラブルシューティングします。

        以下は、ログファイルに記録される情報の例です:

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • ユーザーデータ実行プロセスの標準出力と標準エラー出力を表示します。

        Linux システム初期化ツールである systemd では、ユーザーデータは `cloud-final.service` システムサービスによって実行されます。次のコマンドを実行して、ユーザーデータ実行プロセスの標準出力と標準エラー出力を表示し、出力に基づいて問題をトラブルシューティングできます。

        journalctl -u cloud-final.service
      • 上記の方法でユーザーデータが実行に失敗する理由を特定できない場合は、ユーザーデータの内容をローカルホストにコピーしてデバッグし、正常に実行できるかどうかを確認できます。

  • cloud-init をインストールした後、システムの初期化構成とインスタンスのユーザーデータスクリプトが期待どおりに実行されないのはなぜですか?

    1. 次のコマンドを実行して、4 つの cloud-init サービスが起動時に開始するように有効になっているかどうかを確認します。

      systemctl is-enabled cloud-init-local.service
      systemctl is-enabled cloud-init.service
      systemctl is-enabled cloud-config.service
      systemctl is-enabled cloud-final.service

      エラーメッセージまたは disabled メッセージが返された場合、cloud-init は起動時に開始するように有効になっていません。

    2. 次のコマンドを実行して、起動時に cloud-init を開始するように有効にします。systemctl enable cloud-init-local.service systemctl enable cloud-init.service systemctl enable cloud-config.service systemctl enable cloud-final.service

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • インスタンスを作成するときにシステムディスクのサイズを変更しましたが、ルートパーティションが自動的にサイズ変更されませんでした。どうすればよいですか?

    Linux インスタンスの自動パーティションサイズ変更は cloud-init でサポートされています。`growpart` ツールがシステムにインストールされており、cloud.cfg ファイルが正しく構成されていることを確認してください。

    1. 次のコマンドを実行して、`growpart` ツールがシステムにインストールされているかどうかを確認します。

      which growpart
    2. (該当する場合に必須) ツールがインストールされていない場合は、次のいずれかのコマンドを実行してインストールします。

      • RHEL シリーズ:

        sudo yum -y install cloud-utils-growpart
      • Debian シリーズ:

        sudo apt -y install cloud-guest-utils
    3. 次のコマンドを実行して、/etc/cloud/cloud.cfg ファイルに次の図に示す内容が含まれているかどうかを確認します。

      cat /etc/cloud/cloud.cfg

      配置内容

    4. (該当する場合に必須) 内容が存在しない場合は、/etc/cloud/cloud.cfg ファイルに追加します。

  • cloud-init 0.7.6a16 以前の ECS インスタンスの場合、コンソールでホスト名を変更してインスタンスを再起動してもホスト名が更新されません。どうすればよいですか?

    • 問題の説明

      ECS コンソールでホスト名を更新して ECS インスタンスを再起動しても、新しいホスト名は有効になりません。cloud-init --version コマンドを実行すると、出力は cloud-init のバージョンが 0.7.6a16 以前であることを示します。

    • 原因

      cloud-init が update_hostname モジュールを使用してホスト名を更新する場合、hostname コマンドを実行して現在のシステムホスト名を取得し、/var/lib/cloud/data/previous-hostname ファイルを読み取って cloud-init データキャッシュからホスト名を取得します。次に、2 つのホスト名を比較します。それらが同じ場合、ホスト名を更新します。異なる場合、ホスト名が手動で変更されたと見なし、更新しません。

      Red Hat ベースのオペレーティングシステムでは、/var/lib/cloud/data/previous-hostname から読み取られた内容は改行で処理されますが、hostname コマンドの出力は処理されません。これにより不一致が発生し、ホスト名は更新されません。

    • ソリューション

      この問題を解決するには、次のいずれかのソリューションを使用できます:

      • cloud-init のバージョンをアップグレードします。詳細については、「ステップ 2: cloud-init をインストールする」をご参照ください。

        • CentOS 6 以前のオペレーティングシステムを使用している場合は、cloud-init 0.7.6a17 を使用してください。

        • CentOS 7 を使用している場合は、cloud-init 19.1.21 を使用してください。

        • CentOS 8 以降のオペレーティングシステムを使用している場合は、cloud-init 23.2.2 以降のバージョンを使用することをお勧めします。

      • 改行を手動で処理します。

        cloud-init の欠陥のあるファイル cloudinit/distros/rhel.py を手動で変更します (find / -name rhel.py コマンドを使用してファイルパスを検索します)。distros/rhel.py: _read_hostname() が "hostname" の strip を欠落している を参照して、hostname コマンドの出力の改行を処理します。次の例は、改行を処理する方法を示しています:

        diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py
        index 0b68414e..65176e99 100644
        --- a/cloudinit/distros/rhel.py
        +++ b/cloudinit/distros/rhel.py
        @@ -143,6 +143,7 @@ class Distro(distros.Distro):
                     return util.load_file(filename).strip()
                 elif self.uses_systemd():
                     (out, _err) = util.subp(['hostname'])
        +            out = out.strip()
                     if len(out):
                         return out
                     else: