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

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

最終更新日:May 21, 2026

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 のバージョンの確認

  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 は、Elastic Compute Service (ECS) の初期化には適していない初期のコミュニティバージョンです。新しいバージョンへのアップグレードを推奨します。

    • バージョンが 18 以降の場合、インストールは不要です。デフォルトのネットワーク構成をカスタマイズする場合は、Alibaba Cloud による自動ネットワーク初期化の無効化をご参照ください。

    • バージョンが 19.1.21 の場合、Alibaba Cloud cloud-init 23.2.2 へのアップグレードを推奨します。19.1.21 からの主な改善点は次のとおりです:

      • セキュリティ強化モードでのメタデータアクセスに対応しています。インスタンスメタデータをご参照ください。

      • その他の変更には、機能強化、パフォーマンス改善、バグ修正が含まれます。ChangeLog ファイルをご参照ください。

    • その他のバージョン:インストールは不要です。次のステップをご参照ください。

  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.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 はソフトウェアパッケージとして配布されます。お使いのオペレーティングシステム用のパッケージをインストールするか、ソースからビルドしてください。

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

オペレーティングシステムタイプ

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

バイナリパッケージ

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-8_all.deb
  2. パッケージをインストールします。

    sudo apt-get install -y ./cloud-init_23.2.2-8_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-8.el9.noarch.rpm
  2. パッケージをインストールします。

    sudo yum install -y ./cloud-init-23.2.2-8.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 は /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

  1. python3-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 スクリプトのパラメーター:

    パラメーター

    説明

    <問題>

    OS プラットフォームタイプ。有効な値: centosredhatrheldebianubuntuopensuse、および 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 コマンドを実行します。

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

    "description": "success" が返された場合、インストールは成功です。Alibaba Cloud 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.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 コマンドを実行して設定ファイルをバックアップします。

  1. オペレーティングシステムが CentOS 6、Debian 9、または SUSE Linux Enterprise Server 12 であることを確認します。

    cat /etc/issue
  2. python2-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.6a18 パッケージをダウンロードして解凍します。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz
    tar -zxvf cloud-init-0.7.6a18.tgz
  4. cloud-init ディレクトリの tools サブディレクトリに移動します。

    cd cloud-init-0.7.6a18/tools/
  5. cloud-init をインストールします。

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

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

    deploy.sh スクリプトのパラメーター:

    パラメーター

    説明

    <イシュー>

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

    centos

    <メジャーバージョン>

    オペレーティングシステムのメジャーバージョン番号。

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

  6. cloud-init のバージョンを確認します。

    cloud-init --version

cloud-init のコミュニティ版

  1. Git、Python、および python3-pip パッケージがインストールされていることを確認します。

    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 でログインできなくなり、
      # 代わりに上記のユーザーとしてログインするように指示されます。
      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:
  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 サーバーをクラウドに移行するには、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

よくある質問

  • 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

    エラーメッセージに不足している依存関係ライブラリが指定されていません。

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

    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 バージョンに変更します。次の例では、インタープリターを 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 によって実行されるため、正しいフォーマットである必要があります。たとえば、最初の行は #! で始まる必要があります。詳細については、「インスタンス初期化設定のカスタマイズ」をご参照ください。

      • /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)
      • ユーザーデータ実行の標準出力と標準エラー出力を表示します。

        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
  • インスタンスの作成時にシステムディスクのサイズを変更しましたが、ルートパーティションが自動的にサイズ変更されませんでした。どうすればよいですか?

    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

      Configuration content

    4. (該当する場合) 内容が不足している場合は、/etc/cloud/cloud.cfg ファイルに追加します。

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

    • 問題の説明

      ECS コンソールでホスト名を更新してインスタンスを再起動した後、新しいホスト名が有効になりません。cloud-init --version コマンドで 0.7.6a16 以前のバージョンが表示されます。

    • 原因

      cloud-init が update_hostname モジュールを使用してホスト名を更新する際、hostname コマンドを実行して現在のシステムホスト名を取得し、/var/lib/cloud/data/previous-hostname からキャッシュされたホスト名を読み取ります。この 2 つを比較し、一致する場合はホスト名を更新します。異なる場合は、ホスト名が手動で変更されたと見なし、更新をスキップします。

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

    • 解決策

      次のいずれかの解決策を使用してください:

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

        • CentOS 6 の場合は、cloud-init 0.7.6a18 を使用してください。

        • 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() missing strip on "hostname" を参照して、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: