cloud-initは、起動時にElastic Compute Service (ECS) インスタンスの初期化を自動化するオープンソースソフトウェアです。 カスタムイメージにcloud-initがインストールされていない場合、イメージから作成されたECSインスタンスを初期化できるように、イメージにcloud-initをインストールする必要があります。 このトピックでは、cloud-initをインストールおよび設定する方法について説明します。
cloud-initの詳細については、「Cloud-initドキュメント」をご参照ください。
シナリオ
デフォルトでは、すべてのAlibaba cloudパブリックイメージにCloud-initがインストールされます。 次のシナリオでは、カスタムイメージの作成に基づいて、Alibaba Cloud cloud-initをLinuxサーバーにインストールすることを推奨します。 これにより、カスタムイメージから作成されたインスタンスを自動的に初期化できます。
クラウドへの移行を計画しているLinuxサーバーは、cloud-initと共にインストールされません。
説明クラウドへの移行を予定していないサーバーにAlibaba Cloud cloud-initをインストールする場合は、注意してください。
Linuxサーバーは、0.7.9より前のバージョンのcloud-initでインストールされます。
Alibaba Cloud ECSインスタンスはcloud-initと共にインストールされません。
ステップ1: cloud-initをインストールまたはアップグレードするかどうかを確認する
移行元サーバーにログオンします。
次のコマンドを実行して、cloud-initがインストールされているかどうかを確認します。
yum検索dpkg yumインストールdpkg dpkg -l | grep cloud-init
バージョン番号が返されない場合、またはcloud-initのバージョンが0.7.9より前の場合は、手順2: cloud-initのインストールに進みます。
説明バージョン0.7.9以前: ネイティブcloud-initの初期バージョンがソースサーバーにインストールされています。これはECSインスタンスの初期化には適用されないため、アップグレードする必要があります。
バージョン18以降: cloud-initはソースサーバーに既にインストールされています。 cloud-initは、インスタンスの初期化中にネットワークを設定できます。 設定がビジネス要件を満たしていない場合は、設定を変更できます。 詳細については、このトピックの「ネットワーク構成のカスタマイズ」をご参照ください。
その他: cloud-initがソースサーバーにインストールされます。 このトピックの次のセクションに進みます。
ステップ2: cloud-initのインストール
Alibaba Cloud cloud-init 19.1.21: 推奨。 実行するには、ソースサーバーにPython 3.6をインストールする必要があります。
Alibaba Cloud cloud-init 0.7.6a: サーバーがCentOS 6、Debian 9、またはSUSE Linux Enterprise server 12を実行している場合は、このバージョンを使用してください。 Alibaba Cloud cloud-init 0.7.6aを実行するには、ソースサーバーにPython 2.7をインストールする必要があります。
説明Pythonコミュニティは、Python 2.7のテクニカルサポートを提供しなくなりました。 依存関係ライブラリに関連する潜在的なリスクを防ぐために、新しいバージョンのcloud-initを使用することを推奨します。
Native cloud-init: コミュニティバージョンのcloud-initは、公开されている公式バージョンであり、プロジェクトに贡献する开発者のコミュニティによって管理されています。 Alibaba Cloud cloud-initの最新バージョンは19.1.21です。 新しいバージョンのcloud-initを使用する場合は、ネイティブcloud-initをインストールします。
Alibaba Cloud cloud-initは、Alibaba Cloudサービス向けに最適化され、より適切にサポートできるバージョンです。 互換性を確保するために、Alibaba Cloud cloud-initの使用を推奨します。
偶発的な操作によるデータの損失を防ぐため、スナップショットの作成など、移行元サーバーのデータをバックアップすることをお勧めします。
(推奨) Alibaba Cloud cloud-initのインストール
Alibaba Cloud cloud-initの最新バージョンは19.1.21、データソースはAliyun
です。 他のバージョンのcloud-initは、公式cloud-init Webサイトからダウンロードできます。
python-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。
実施例では、python3-pipが使用される。 次のいずれかのコマンドを実行して、移行元サーバーのオペレーティングシステムに基づいてpython-pip依存関係ライブラリをインストールします。
CentOSまたはRed Hat Enterprise Linux:
yum -y install python3-pip
UbuntuまたはDebian:
apt-get -y install python3-pip
openSUSEまたはSUSE:
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インストール-r. /requirements.txt
次のコマンドを実行して、cloud-initディレクトリのtoolsサブディレクトリに移動します。
cd. /ツール
次のコマンドを実行してdeploy.shスクリプトを実行し、cloud-initをインストールします。
bash。/deploy.sh <issue> <major_version>
次の表に、deploy.shスクリプトのパラメーターとその値を示します。
パラメーター
説明
例
<issue>
オペレーティングシステムの種類。 有効な値: centos、redhat、rhel、debian、ubuntu、opensuse、sles。 このパラメーターの値は大文字と小文字を区別します。 slesは、SUSEまたはSUSE Linux Enterprise Server (SLES) を示します。
centos
<major_version>
オペレーティングシステムのメジャーバージョン番号。
説明Alibaba Cloud cloud-init 19.1.21はUbuntu 14にインストールできません。
CentOS 7.6のメジャーバージョン番号は7です。
たとえば、現在のオペレーティングシステムがCentOS 7の場合、
bashを実行する必要があります。/deploy.sh centos 7
コマンド。cloud-initがインストールされているか確認します。
Alibaba Cloud cloud-initがインストールされている場合、
"description": "success"
が返されます。
次のセクションでは、さまざまなLinuxディストリビューション用にAlibaba Cloud cloud-initをインストールするために使用されるサンプルのシェルスクリプトを提供します。 スクリプトをオペレーティングシステムに適応させます。
CentOS 7/8
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools' >& /dev/null;
yum -yインストールpython3-pip
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh centos "$issue_major"
レッドハットエンタープライズLinux 7/8
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools' >& /dev/null;
yum -yインストールpython3-pip
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh rhel "$issue_major"
Ubuntu 16/18/20
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools' >& /dev/null;
apt-getインストールpython36 python3-pip -y
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh ubuntu "$issue_major"
デビアン9 /10
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools' >& /dev/null;
apt-get -yインストールpython3-pip
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh debian "$issue_major"
SUSE 12/15
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools'>& /dev/null;
zypper -nインストールpython3-pip
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh sles "$issue_major"
OpenSUSE 15
# python3-pip依存関係ライブラリがインストールされているかどうかを確認します。 そうでない場合は、インストールします。
if ! python3 -c 'import setuptools'>& /dev/null;
zypper -nインストールpython3-pip
fi
# 以前のバージョンのcloud-initをバックアップします。
テスト-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}')
バッシュ。/cloud-init-*/tools/deploy.sh opensuse "$issue_major"
Alibaba Cloud cloud-init 0.7.6 a15のインストール
ソースサーバーがCentOS 6、Debian 9、SUSE Linux Enterprise server 12などの以前のバージョンのオペレーティングシステムを実行している場合は、Alibaba Cloud cloud-init 0.7.6 a15をインストールします。
デフォルトでは、Alibaba Cloud cloud-init 0.7.6 a15
は、CentOS 6、Debian 9、SUSE Linux Enterprise Server 12のAlibaba Cloudパブリックイメージで停止します。 cloud-init-0.7.6a15をテストする場合は、まずmv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bakコマンドを実行してcloud-initの設定ファイルをバックアップします。
次のコマンドを実行して、オペレーティングシステムのバージョンがCentOS 6、Debian 9、またはSUSE Linux Enterprise Server 12かどうかを確認します。
cat /etc/issue
次のコマンドを実行して、Alibaba Cloud cloud-init 0.7.6 a15インストールパッケージをダウンロードして解凍します。
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a15.tgz tar -zxvf cloud-init-0.7.6a15.tgz
次のコマンドを実行して、cloud-initディレクトリのtoolsサブディレクトリに移動します。
cd cloud-init-0.7.6a15 /ツール /
次のコマンドを実行してdeploy.shスクリプトを実行し、cloud-initをインストールします。
bash。/deploy.sh <issue> <major_version>
次の表に、deploy.shスクリプトのパラメーターとその値を示します。
パラメーター
説明
例
<issue>
オペレーティングシステムの種類。 有効な値: centos、debian、sles。 このパラメーターの値は大文字と小文字を区別します。 slesはSUSEまたはSLESを示します。
centos
<major_version>
オペレーティングシステムのメジャーバージョン番号。
CentOS 6.5のメジャーバージョン番号は6です。
たとえば、現在のオペレーティングシステムがCentOS 6の場合、
bashを実行する必要があります。/deploy.sh centos 6
コマンド。
native cloud-initのインストール
Alibaba Cloud cloud-initの最新バージョンは19.1.21です。 新しいバージョンのcloud-initを使用する場合は、ネイティブcloud-initをインストールします。
Git、Python、およびpython-pipの依存関係ライブラリがソースサーバーにインストールされていることを確認します。
例では、Git、Python 3.6、およびpython3-pipが使用されています。 次のいずれかのコマンドを実行して、移行元サーバーのオペレーティングシステムに基づいてGit、Python、およびpython-pip依存関係ライブラリをインストールします。
CentOS/Red Hat Enterprise Linux
yum -yインストールgit python36 python3-pip
Ubuntu/Debian
apt-get -y install git python36 python3-pip
OpenSUSE/SUSE
zypper -nインストール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インストール
cloud.cfg設定ファイルを変更します。
設定ファイルを開きます。
vi /etc/cloud/cloud.cfg
cloud_init_modules:
の前のコンテンツを次のコンテンツに置き換えます。# datasource設定の例 # トップレベルの設定はモジュールとして使用されます # とシステム構成。 # さまざまなモジュールによって適用および /または使用される可能性のあるユーザーのセット # 'default' エントリが見つかった場合、'default_user' を参照します。# 以下に指定したdistro設定から ユーザー: -デフォルト ユーザー: 名前:ルート lock_passwd: False # これが設定されている場合、'root' はsshできません。# は代わりに上記の $ユーザーとしてログインするメッセージを取得します 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'] # 「初期」ステージで実行されるモジュール cloud_init_modules:
(オプション) 手順3: cloud-initの設定
ネットワーク設定のカスタマイズ
cloud-init v18以降は、次のようにネットワーク設定を自動的に初期化します。BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
。 デフォルトのネットワーク設定がビジネス要件を満たしていない場合は、次の操作を実行してネットワーク設定をカスタマイズできます。
cloud-initをインストールしたら、/etc/cloud/cloud.cfgファイルを開きます。
vim /etc/cloud/cloud.cfg
Iキーを押して挿入モードに入ります。
Example datasource config
の前に、次の無効設定を追加します。ネットワーク: config: 無効
説明設定を追加したら、/etc/sysconfig/network-scripts/ ディレクトリでネットワーク設定を手動で管理する必要があります。
Escキーを押して挿入モードを終了し、
:wq
と入力し、enterキーを押してファイルを保存して閉じます。
ホスト名と /etc/hosts設定ファイルの保持
デフォルトでは、cloud-init設定ファイルのホスト名は保持されません。 インスタンスのホスト名および /etc/hosts設定ファイルを変更しない場合は、次の操作を実行してcloud-init設定ファイルを変更できます。
cloud-initをインストールしたら、/etc/cloud/cloud.cfgファイルを開きます。
vim /etc/cloud/cloud.cfg
Iキーを押して挿入モードに入り、
preserve_hostname: false
をpreserve_hostname: true
に変更します。Escキーを押して挿入モードを終了し、
:wq
と入力し、enterキーを押してファイルを保存して閉じます。preserve_hostname: true
は、cloud-initがインスタンスのホスト名と /etc/hosts設定ファイルを変更しないようにします。
トラブルシューティング
次のステップ
クラウド移行ツールを使用して、Linuxインスタンスをクラウドに移行できます。 詳細については、「Cloud Migrationツールを使用したサーバーのAlibaba Cloudへの移行」をご参照ください。
Linuxカスタムイメージにcloud-initをインストールし、そのカスタムイメージを使用してECSインスタンスを作成した後、インスタンスを再起動して、cloud-initがインスタンスにインストールされているかどうかを確認できます。 cloud-initがインストールされている場合、インスタンスのホスト名、ソフトウェアリポジトリ、およびNTPを自動的に設定できます。
ネットワーク設定ファイルのサンプル内容:
[testuser @ iZbp1ios3psx4hoi ****** Z ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # インスタンス起動時にcloud-initによって自動的に作成され、編集しないでください。 # BOOTPROTO=dhcp デバイス=eth0 ONBOOT=はい STARTMODE=auto TYPE=イーサネット USERCTL=no
virtioドライバーをソースサーバーにインストールし、ソースサーバーに基づいてLinuxイメージファイルを作成し、イメージがインポート要件を満たしているかどうかを確認する必要があります。