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

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

最終更新日:Feb 21, 2025

cloud-init は、初期パスワードの生成、ホスト名の構成、ユーザーデータスクリプトの実行など、Linux オペレーティングシステムの初期化操作を自動化するオープンソースの初期化ツールです。 cloud-init がインストールされていないオンプレミスのカスタムイメージを Alibaba Cloud に移行する場合、cloud-init を手動でインストールできます。 cloud-init をインストールしないと、カスタムイメージから作成された Elastic Compute Service (ECS) インスタンスは、ホスト名とネットワーク設定の構成などの初期化タスクを自動的に実行できません。これは、ECS インスタンスの自動デプロイと構成の効率に影響を与える可能性があります。このトピックでは、Linux オペレーティングシステムに cloud-init をインストールする方法について説明します。

cloud-init の詳細については、「Cloud-init ドキュメント」をご参照ください。

シナリオ

デフォルトでは、cloud-init はすべての Alibaba Cloud パブリックイメージにインストールされています。オンプレミスのカスタムイメージから作成された ECS インスタンスがシステム構成を自動的に初期化できるように、以下の推奨事項を参照し、実際のシナリオに基づいて関連操作を実行することをお勧めします。

  • Alibaba Cloud に移行する Linux サーバーに cloud-init がインストールされていません。

    cloud-init がインストールされていない Linux サーバーを Alibaba Cloud に移行する前に、サーバーに cloud-init をインストールします。このようにして、Linux サーバーに基づいて作成された ECS インスタンスは、システム起動時に自動的に初期化できます。

    説明

    Linux サーバーを Alibaba Cloud に移行しない場合、サーバーに cloud-init をインストールすると、不要な複雑さやリソース使用量が発生する可能性があります。実際の環境に基づいて、cloud-init をインストールするかどうかを決定してください。

  • Linux サーバーに cloud-init 0.7.9 以前がインストールされています。

    ほとんどの場合、最新の cloud-init バージョンには、最新のクラウドプラットフォーム機能との互換性を確保するためのより多くの機能と修正が含まれています。古いバージョンの cloud-init が Linux サーバーにインストールされている場合は、互換性とセキュリティを最大限に高めるために、cloud-init を 0.7.9 以降のバージョンにアップグレードすることをお勧めします。

  • ECS インスタンスに cloud-init がインストールされていません。

    ECS インスタンスに cloud-init がインストールされていない場合は、インスタンスが自動的に初期化されるように、インスタンスに 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
    • バージョン番号が返されないか、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 の他のバージョン番号が返された場合は、このトピックの次の手順セクションに記載されている操作を実行します。

  3. 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 (SLES) 12 などの特定の以前のオペレーティングシステムバージョンにこのバージョンの cloud-init をインストールします。 Alibaba Cloud cloud-init 0.7.6a17 には Python 2.7 が必要で、データソースとして Aliyun を使用します。

    重要

    Python コミュニティは、Python 2.7 のテクニカルサポートをもう提供していません。依存関係ライブラリに関連するリスクを防ぐために、最新の cloud-init バージョンを使用することをお勧めします。

  • ネイティブ cloud-init:cloud-init のコミュニティバージョンは、プロジェクトに貢献している開発者のコミュニティによって公開され、維持されている公式バージョンです。 Alibaba Cloud cloud-init の最新バージョンは 23.2.2 です。より新しい cloud-init バージョンを使用する場合は、cloud-init のコミュニティバージョンをインストールします。詳細については、公式 cloud-init ウェブサイトにアクセスしてください。

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 をインストールできます。

さまざまなオペレーティングシステムの Alibaba Cloud cloud-init 23.2.2 パッケージのダウンロードリンク

オペレーティングシステム ディストリビューション

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

バイナリパッケージ

MD5 チェックサム

ソースコードパッケージ

Debian

12

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

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

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

11

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

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

CentOS Stream

9

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

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

8

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

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

Fedora

40

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

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

39

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

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

38

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

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

AlmaLinux

9

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

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

8

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

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

Rocky Linux

9

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

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

8

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

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

Ubuntu

24

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

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

22

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

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

20

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

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

以下のセクションでは、cloud-init のバイナリパッケージをダウンロードし、Debian 12 と CentOS Stream 9 に cloud-init をインストールする方法について説明します。

Debian 12

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

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

    sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb
  3. (オプション)Alibaba Cloud cloud-init パッケージが最新のオープンソースバージョンに自動的に更新またはアップグレードされないようにするために、次のコマンドを実行してパッケージを現在のバージョンに保持することをお勧めします。

    sudo apt-mark hold cloud-init
  4. 次のコマンドを実行して、cloud-init のバージョンが想定どおりであることを確認します。

    cloud-init --version

CentOS Stream 9

  1. 次のコマンドを実行して、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
  2. 次のコマンドを実行して、Alibaba Cloud cloud-init パッケージをインストールします。

    sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm
  3. (オプション)Alibaba Cloud 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 アドレスへのマッピングを自動的に追加しなくなりました。ビジネス要件に基づいて、ファイルにマッピングを手動で追加できます。最近のオペレーティングシステムバージョンでは、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 をインストールする

  1. ソースサーバーに 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
  2. 次のコマンドを実行して、Alibaba Cloud cloud-init インストールパッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. 次のコマンドを実行して、Alibaba Cloud 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. tools サブディレクトリ cloud-init に移動します。

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

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

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

    パラメータ

    説明

    <issue>

    オペレーティングシステムの種類。有効な値:centosredhatrheldebianubuntuopensusesles。このパラメータの値は大文字と小文字が区別されます。 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. Alibaba Cloud cloud-init がインストールされているかどうかを確認します。

    Alibaba Cloud cloud-init がインストールされている場合、"description": "success" が返されます。阿里云cloud-init安装成功

  8. 次のコマンドを実行して、cloud-init のバージョンが想定どおりであることを確認します。

    cloud-init --version

次のセクションでは、さまざまな Linux ディストリビューションに Alibaba Cloud cloud-init をインストールするために使用できるサンプルシェルスクリプトを提供します。オペレーティングシステムに基づいてシェルスクリプトを変更します。

CentOS 7 および CentOS 8

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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"

Debian 9 および Debian 10

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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

# python3-pip 依存関係ライブラリがインストールされているかどうかを確認します。 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
# 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.6a17 をインストールする

説明

デフォルトでは、CentOS 6、Debian 9、SLES 12 の Alibaba Cloud パブリックイメージに Alibaba Cloud cloud-init-0.7.6a17 がインストールされています。 Alibaba Cloud cloud-init 0.7.6a17 をテストする場合は、最初に sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak コマンドを実行して構成ファイルをバックアップしてください。

  1. 次のコマンドを実行して、オペレーティングシステムのバージョンが CentOS 6、Debian 9、または SLES 12 であることを確認します。

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

    この例では、python2-pip 依存関係ライブラリが使用されています。次のコマンドを実行して、python2-pip 依存関係ライブラリをインストールします。

    CentOS 6 および SLES 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 ディレクトリの サブディレクトリに移動します。

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

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

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

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

    パラメータ

    説明

    <issue>

    オペレーティングシステムの種類。有効な値:centosdebiansles。このパラメータの値は大文字と小文字が区別されます。 sles は SUSE または SLES を指定します。

    centos

    <major_version>

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

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

  6. 次のコマンドを実行して、cloud-init のバージョンが想定どおりであることを確認します。

    cloud-init --version

ネイティブ cloud-init をインストールする

  1. ソースサーバーに 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
  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. cloud.cfg 構成ファイルを開きます。

      sudo vi /etc/cloud/cloud.cfg

      vi /etc/cloud/cloud.cfg

    2. cloud_init_modules: の前のコンテンツを次のコンテンツに置き換えます。

      # データソース構成の例
      # トップレベルの設定はモジュールとして使用されます
      # およびシステム構成。
      # 「default」エントリが見つかったときにさまざまなモジュールによって適用および/または使用される可能性のあるユーザーのセット
      # 以下で指定された distro 構成の「default_user」を参照します
      users:
         - default
      user:
          name: root
          lock_passwd: False
      # これが設定されている場合、「root」は ssh でログインできなくなり、
      # 上記の $user として代わりにログインするようにメッセージが表示されます
      disable_root: false
      # これにより、set+update hostname モジュールが動作しなくなります(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 を構成する

ネットワーク構成をカスタマイズする

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 の前に次の無効化構成を追加して、自動ネットワーク構成を無効にします。

    network:
      config: disabled

    cloud-init-disable-config

    構成を追加した後、cloud-init はネットワーク構成を管理しないため、/etc/sysconfig/network-scripts/ ディレクトリの ifcfg-eth0 などのネットワーク構成ファイルを手動で管理する必要があります。

  3. Esc キーを押して挿入モードを終了し、:wq と入力して Enter キーを押して、cloud-init 構成ファイルを保存して閉じます。

  4. ビジネス要件に基づいて、/etc/sysconfig/network-scripts/ ディレクトリのネットワーク設定(IP アドレス、サブネットマスク、ゲートウェイなど)をカスタマイズします。

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

デフォルトでは、cloud-init はインスタンスの起動時に ECS インスタンスのホスト名と /etc/hostname ファイルを自動的に変更します。 ECS インスタンスのホスト名または /etc/hosts ファイルを変更したくない場合は、次の操作を実行して cloud-init 構成ファイルを変更できます。

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

    sudo vim /etc/cloud/cloud.cfg
  2. preserve_hostname: falsepreserve_hostname: true に変更します。

    hostname

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

    次のコマンド出力は、システムが cloud-init を使用してネットワーク設定(ブートプロトコル、ネットワークデバイス、デバイスタイプなど)を自動的に構成したことを示しています。

    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 を使用する場合は、オペレーティングシステムに基づいて次のコマンドのいずれかを実行して、python setuptools モジュールをインストールします。

    • 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 が ECS インスタンスで想定どおりに実行されない場合はどうすればよいですか?

    Python 3.9 などの Python 3 の新しいバージョンを ECS インスタンスにインストールし、そのバージョンのシンボリックリンク(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 が使用されています。次の操作を実行して、cloud-init 実行可能ファイルの Python インタープリターのパスを変更します。

      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)
      • ユーザーデータの実行時に生成された標準出力 (stdout) と標準エラー (stderr) を確認します。

        systemd (Linux のシステム初期化ツール) では、ユーザーデータは cloud-final.service システムサービスによって実行されます。次のコマンドを実行して、ユーザーデータの実行時に生成された stdout と stderr を確認できます。次に、コマンド出力に基づいて問題のトラブルシューティングを行うことができます。

        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

      cloud-init サービスでエラーメッセージまたは disabled が表示された場合、サービスはシステム起動時に自動的に実行されるように構成されていません。

    2. 次のコマンドを実行して、4 つの cloud-init サービスがシステム起動時に自動的に実行されるように構成します。

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • インスタンスの作成時にディスクのサイズを変更した後に、システムディスクのルートパーティションが自動的に拡張されない場合はどうすればよいですか?

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

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

      which growpart
    2. (条件付きで必須)インスタンスオペレーティングシステムに growpart ツールがインストールされていない場合は、オペレーティングシステムに基づいて次のコマンドのいずれかを実行して growpart ツールをインストールします。

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

    • 原因

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

      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 ファイルを変更し、hostname コマンド出力に改行を追加します。 find / -name rhel.py コマンドを実行して、cloudinit/distros/rhel.py ファイルのパスを取得できます。 hostname コマンド出力に改行を追加する方法については、「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: