RHEL の cloud-init の設定と管理


Red Hat Enterprise Linux 10

cloud-init を使用した RHEL インスタンスの初期化および設定の自動化

Red Hat Customer Content Services

概要

cloud-init パッケージを使用すると、さまざまなクラウドプラットフォーム上で、一貫性のある繰り返し可能なデプロイ方法を使用して、複数の RHEL クラウドインスタンスを効率的に作成できます。このコンテンツでは、cloud-init の仕組み、cloud-init を使用してクラウドインスタンスを起動する方法、Red Hat がサポートする cloud-init の使用例を説明します。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 パブリッククラウドプラットフォームでの RHEL の導入

パブリッククラウドプラットフォームは、コンピューティングリソースをサービスとして提供します。オンプレミスのハードウェアを使用する代わりに、Red Hat Enterprise Linux (RHEL) システムなどの IT ワークロードをパブリッククラウドインスタンスとして実行できます。

1.1. パブリッククラウドで RHEL を使用する利点

パブリッククラウドプラットフォーム上に配置されたクラウドインスタンスとしての RHEL には、RHEL オンプレミスの物理システムまたは仮想マシン (VM) に比べて次の利点があります。

リソースの柔軟性と詳細な割り当て

RHEL のクラウドインスタンスは、クラウドプラットフォーム上の仮想マシンとして実行されます。この仮想マシンは、クラウドサービスプロバイダーによって維持管理されるリモートサーバーのクラスターです。したがって、ソフトウェアレベルでは、特定の種類の CPU やストレージをはじめとするハードウェアリソースのインスタンスへの割当は、簡単にカスタマイズできます。

また、ローカルの RHEL システムと比較すると、物理ホストの機能によって制限されることがありません。むしろ、クラウドプロバイダーが提供する選択肢に基づいて、さまざまな機能から選択できます。

領域とコスト効率

クラウドワークロードをホストするためにオンプレミスサーバーを所有する必要がありません。これにより、物理ハードウェアに関連するスペース、電力、メンテナンスの要件が回避されます。

代わりに、パブリッククラウドプラットフォームでは、クラウドインスタンスの使用料をクラウドプロバイダーに直接支払います。通常、コストはインスタンスに割り当てられたハードウェアとその使用時間に基づきます。したがって、要件に基づいてコストを最適化できます。

ソフトウェアで制御される設定

クラウドインスタンスの設定は、すべてクラウドプラットフォーム上にデータとして保存し、ソフトウェアで制御します。したがって、インスタンスの作成、削除、クローン作成、または移行を簡単に行うことができます。また、クラウドインスタンスは、クラウドプロバイダーのコンソールでリモートで操作され、デフォルトでリモートストレージに接続されます。

さらに、クラウドインスタンスの現在の状態をいつでもスナップショットとしてバックアップできます。その後、スナップショットをロードしてインスタンスを保存した状態に復元できます。

ホストからの分離とソフトウェアの互換性

ローカルの仮想マシンと同様に、クラウドインスタンス上の RHEL ゲストオペレーティングシステムは Kernel-based Virtual Machine (KVM) 上で実行されます。このカーネルは、ホストオペレーティングシステムや、インスタンスへの接続に使用する クライアント システムとは別のものです。

したがって、任意のオペレーティングシステムをクラウドインスタンスにインストールできます。つまり、RHEL パブリッククラウドインスタンスでは、ローカルオペレーティングシステムでは使用できない RHEL 固有のアプリケーションを実行できます。

さらに、インスタンスのオペレーティングシステムが不安定になったり侵害されたりした場合でも、クライアントシステムには一切影響がありません。

1.2. RHEL のパブリッククラウドのユースケース

パブリッククラウドへのデプロイには多くの利点がありますが、すべてのシナリオにおいて最も効率的なソリューションであるとは限りません。RHEL デプロイメントをパブリッククラウドに移行するかどうかを評価している場合は、ユースケースがパブリッククラウドの利点を享受できるかどうかを検討してください。

有益なユースケース
  • パブリッククラウドインスタンスのデプロイは、デプロイメントのアクティブなコンピューティング能力を柔軟に増減する (スケールアップ および スケールダウン とも呼ばれます) 場合に非常に効果的です。したがって、次の状況ではパブリッククラウド上で RHEL を使用できます。

    • ピーク時のワークロードが高く、一般的なパフォーマンス要件が低いクラスター。要求に応じてスケールアップおよびスケールダウンすることで、リソースコストの面で高い効率が得られる場合があります。
    • クラスターを迅速にセットアップまたは拡張できます。これにより、ローカルサーバーのセットアップにかかる高額な初期費用が回避されます。
  • クラウドインスタンスは、ローカル環境で何が起こっても影響を受けません。したがって、バックアップや障害復旧に使用できます。
問題が発生する可能性のあるユースケース
  • 調整不可能な既存の環境を運用している場合。既存デプロイメントの特定のニーズに合わせてクラウドインスタンスをカスタマイズすることは、現在のホストプラットフォームと比較して経済的でない可能性があります。
  • 厳しい予算制限の中で運用している場合。通常、ローカルデータセンターでデプロイメントを維持管理すると、パブリッククラウドよりも柔軟性は低くなりますが、最大リソースコストをより細かく制御できます。

パブリッククラウドデプロイメント用の RHEL を入手する方法の詳細は、パブリッククラウドデプロイメント用の RHEL の入手 を参照してください。

1.3. パブリッククラウドへの移行時によくある懸念事項

RHEL ワークロードをローカル環境からパブリッククラウドプラットフォームに移行すると、それに伴う変更に懸念が生じる可能性があります。よくある質問は次のとおりです。

RHEL は、クラウドインスタンスとして動作する場合、ローカル仮想マシンとして動作する場合とは異なる動作になりますか?

パブリッククラウドプラットフォーム上の RHEL インスタンスは、ほとんどの点で、オンプレミスサーバーなどのローカルホスト上の RHEL 仮想マシンと同じように機能します。注目すべき例外には次のようなものがあります。

  • パブリッククラウドインスタンスは、プライベートオーケストレーションインターフェイスの代わりに、プロバイダー固有のコンソールインターフェイスを使用してクラウドリソースを管理します。
  • ネストされた仮想化などの特定の機能が正しく動作しない可能性があります。特定の機能がデプロイメントにとって重要な場合は、選択したパブリッククラウドプロバイダーとその機能の互換性を事前に確認してください。
ローカルサーバーと比べて、パブリッククラウドではデータは安全に保たれますか?

RHEL クラウドインスタンス内のデータの所有権はユーザーにあり、パブリッククラウドプロバイダーはデータにアクセスできません。さらに、主要なクラウドプロバイダーは転送中のデータ暗号化をサポートしているため、仮想マシンをパブリッククラウドに移行する際のデータのセキュリティーが向上します。

RHEL パブリッククラウドインスタンスのセキュリティーに関しては、以下が適用されます。

  • パブリッククラウドプロバイダーは、クラウドハイパーバイザーのセキュリティーを担当します。
  • Red Hat は、RHEL ゲストオペレーティングシステムのセキュリティー機能をインスタンスに提供します。
  • ユーザーは、クラウドインフラストラクチャーにおける特定のセキュリティー設定とプラクティスを管理します。
ユーザーの地理的リージョンは、RHEL パブリッククラウドインスタンスの機能にどのように影響しますか?
RHEL インスタンスは、地理的な場所に関係なく、パブリッククラウドプラットフォームで使用できます。したがって、オンプレミスサーバーと同じリージョンでインスタンスを実行できます。ただし、物理的に離れたリージョンでインスタンスをホストすると、操作時に待ち時間が長くなる可能性があります。さらに、パブリッククラウドプロバイダーによっては、特定のリージョンで、追加機能が提供される場合や、より高いコスト効率が得られる場合があります。RHEL インスタンスを作成する前に、選択したクラウドプロバイダーで利用可能なホスティングリージョンのプロパティーを確認してください。

1.4. パブリッククラウドデプロイメント用の RHEL の入手

RHEL システムをパブリッククラウド環境にデプロイするには、次の手順を実行する必要があります。

1.5. RHEL クラウドインスタンスを作成する方法

RHEL インスタンスをパブリッククラウドプラットフォームにデプロイするには、次のいずれかの方法を使用できます。

RHEL システムイメージを作成してクラウドプラットフォームにインポートする
  • システムイメージを作成するには、RHEL Image Builder を使用するか、イメージを手動でビルドします。
  • これは既存の RHEL サブスクリプションを使用する方法で、bring your own subscription (BYOS) とも呼ばれます。
  • 年間サブスクリプションを前払いすると、Red Hat お客様割引を利用できます。
  • Red Hat がカスタマーサービスを提供します。
  • 多くのイメージを効率的に作成するには、cloud-init ツールを使用できます。
RHEL インスタンスをクラウドプロバイダーマーケットプレイスから直接購入する
  • サービスの利用に対して時間料金を後払いで支払います。したがって、この方法は 従量課金制 (PAYG) とも呼ばれます。
  • クラウドプラットフォームプロバイダーがカスタマーサービスを提供します。
注記

さまざまな方法を使用して RHEL インスタンスをデプロイする詳細な手順は、このドキュメントの次の章を参照してください。

第2章 cloud-init の概要

cloud-init ユーティリティーは、最初の起動時に仮想マシン (VM) (インスタンスとも呼ばれます) の初期化と設定を自動化します。次のようなタスクを実行するように cloud-init を設定できます。

  • ホスト名、ネットワークインターフェイス、およびユーザーアカウントの設定
  • インスタンスへのパッケージのインストール
  • スクリプトの実行
  • デフォルトの仮想マシン (VM) アクションの変更

始める前に、次の手順を必ず完了してください。

cloud-init は、次のようにさまざまなタイプの RHEL イメージで使用できます。

  • KVM 用の qcow2 ゲストイメージ には、cloud-init がプリインストールされています。インスタンスを起動すると、cloud-init ユーティリティーが自動的に有効になります。Red Hat カスタマーポータルの KVM ゲストイメージは、Red Hat Virtualization、Red Hat OpenStack Platform (RHOSP)、および Red Hat OpenShift Virtualization で使用できます。
  • Red Hat カスタマーポータルから Red Hat ISO イメージ をダウンロードしてカスタムゲストイメージを作成する場合は、そのカスタマイズされたゲストイメージに cloud-init パッケージをインストールしておく。
  • Amazon Web Services (AWS)、Google Cloud、Microsoft Azure などの認定クラウドサービスプロバイダー (CCSP) のイメージを使用する場合は、RHEL Image Builder を使用してイメージを作成できます。RHEL Image Builder は、特定のクラウドプロバイダー向けにイメージをカスタマイズします。次の形式のイメージには、プリインストールされた cloud-init が付属しています。

    • Amazon Machine Image (AMI)
    • Virtual Hard Drive (VHD)
    • QEMU copy-on-write (QCOW2)

RHEL Image Builder の詳細は、RHEL Image Builder のインストール を参照してください。

ほとんどのクラウドプラットフォームは cloud-init をサポートしますが、設定手順とサポートされるオプションは異なります。

または、NoCloud 環境用に cloud-init を設定することもできます。NoCloud を使用すると、ローカル設定 (ネットワークアクセスなし) とリモートサーバーから取得された設定の両方のクラウドインスタンスを管理できます。さらに、1 つの仮想マシンで cloud-init を設定して、仮想マシンテンプレートを作成することもできます。このテンプレートを使用すると、追加の仮想マシンまたは仮想マシンのクラスターを作成できます。

2.1. cloud-init 設定の概要

cloud-init ユーティリティーは、YAML 形式の設定ファイルを使用して、ユーザー定義のタスクをインスタンスに適用します。インスタンスが起動すると、cloud-init サービスが開始し、YAML ファイルからの指示を実行します。これらのタスクは、設定によっては仮想マシンの初回起動時、あるいはその後の起動時に完了する可能性があります。

特定のタスクを定義するには、/etc/cloud/cloud.cfg ファイルを設定し、/etc/cloud/cloud.cfg.d/ ディレクトリーにディレクティブを追加します。

  • cloud.cfg ファイルには、ユーザーアクセス、認証、システム情報など、さまざまなシステム設定のディレクティブが含まれます。このファイルには cloud-init のデフォルトモジュールとオプションモジュールも含まれています。デフォルトのモジュールグループは次のとおりです。

    • cloud_init_modules
    • cloud_config_modules
    • cloud_final_modules
  • cloud.cfg.d ディレクトリーに cloud-init の追加ディレクティブを含めることができます。
  • ディレクティブを cloud.cfg.d ディレクトリーに追加する場合は、*.cfg という名前のカスタムファイルにディレクティブを追加し、ファイルの上部に #cloud-config を常に含めます。

詳細は、cloud.cfg のサンプルファイルを参照してください。cloud.cfg ファイルの例 を参照してください。

2.2. cloud-init のデータソースの種類

データソースは、ユーザーデータとメタデータの形式での cloud-init の設定データのソースです。メタデータには、認定クラウドサービスプロバイダー (CCSP) によって作成された設定ドライブがあります。cloud-init は、データソースの設定にユーザーデータとメタデータを使用し、オプションでベンダーデータも使用します。ベンダーデータが利用可能かどうかを確認する必要がある場合:

# grep -i "vendor data" /var/log/cloud-init.log
Copy to Clipboard Toggle word wrap

データソースには、ユーザーデータ、メタデータ、ベンダーデータの 3 種類の設定データがあります。

  • ユーザーデータには、cloud.cfg ファイルと cloud.cfg.d ディレクトリーで指定されたディレクティブが含まれます。たとえば、ユーザーデータには、実行するファイル、インストールするパッケージ、シェルスクリプトなどが含まれます。cloud-init が許可するユーザーデータのタイプに関する詳細は、cloud-init ドキュメントの User-Data Formats セクションを参照してください。
  • メタデータには、特定のデータソースに関連付けられたデータが含まれます。たとえば、メタデータにはサーバー名やインスタンス ID を含めることができます。特定のクラウドプラットフォームを使用している場合、インスタンスがユーザーデータやメタデータをどこで取得できるかは、CCSP が決定します。HTTP サービスにユーザーデータとメタデータを追加した後。この場合、cloud-init が実行されると、HTTP サービスからユーザーデータとメタデータが使用されます。
  • ベンダーデータは、組織 (クラウドプロバイダーなど) がオプションで提供し、イメージが実行される環境に合わせてイメージをカスタマイズできる情報が含まれます。cloud-init は、メタデータを読み込んでシステムを初期化した後に、オプションのベンダーデータおよびユーザーデータに対応します。デフォルトでは、ベンダーデータは初回起動時に実行されます。ベンダーデータの実行を無効にすることができます。

デフォルトでは、cloud-init は既存のデータソースを自動的に識別します。cloud-init は、ds-identify スクリプトを使用してクラウドプラットフォームの特定を試みます。スクリプトは、インスタンスの初回起動時に実行されます。カスタムデータソースディレクティブを追加すると cloud-init の実行時間を抑えることができます。ディレクティブは、/etc/cloud/cloud.cfg ファイルまたは /etc/cloud/cloud.cfg.d ディレクトリーに追加します。cloud-init の実行後に、プラットフォームに関する詳細情報を提供するログファイル (run/cloud-init/ds-identify.log) を表示できます。datasource_list の詳細は、カスタムデータソース を確認してください。

CCSP のデータソースの設定の詳細は、以下を参照してください。

2.3. cloud-init のブート段階

cloud-init ユーティリティーは、次の 5 つのブートステージで仮想マシン設定を完了します。フェーズは、モジュールの実行順序を制御するブートステージの論理的なグループです。デフォルトのモジュールは特定のフェーズで実行されます。

システムの起動中に、cloud-init ユーティリティーは 5 つの ステージ で動作し、cloud-init の実行の有無、データソースの検索先など、さまざまなタスクを決定します。各ステージは、実行されるモジュールを制御するモジュール実行 フェーズ にも属します。ステージは次のとおりです。

  1. 検出ステージ: このステージでは、systemd サービスを使用して、起動時に cloud-init ユーティリティーを実行するかどうかを決定します。ds-identify ツールは、有効なプラットフォームがない場合に cloud-init を実行するかどうかを検出します。

    このステージは 初期化 フェーズに属し、モジュールは実行されません。代わりに、cloud-init 設定のデータソースを識別します。

  2. ローカルステージ: cloud-init は、ローカルデータソースを検索し、DHCP ベースのフォールバックメカニズムを含むネットワーク設定を適用します。

    このステージは 初期化 フェーズに属し、モジュールは実行されません。

  3. ネットワークステージ: cloud-init は、/etc/cloud/cloud.cfg ファイルの cloud_init_modules の下にリスト表示されているモジュールを実行することで、ユーザーデータを処理します。cloud_init_modules セクションでモジュールを追加、削除、有効化、または無効化できます。

    このステージは、Networking モジュール実行ステージに属します。

  4. 設定ステージ: cloud-init は、/etc/cloud/cloud.cfg ファイルの cloud_config_modules セクションにリスト表示されているモジュールを実行します。cloud_config_modules セクションでモジュールを追加、削除、有効化、または無効化できます。

    このステージは、Configuration モジュール実行フェーズに属します。

  5. 最終ステージ: cloud-init は、/etc/cloud/cloud.cfg ファイルの cloud_final_modules セクションに含まれるモジュールと設定を実行します。これには、特定のパッケージのインストールや、設定管理プラグインやユーザー定義スクリプトのトリガーも含まれる場合があります。cloud_final_modules セクションでモジュールを追加、削除、有効化、または無効化できます。

    この段階は、Finalization モジュール実行フェーズに相当します。

仮想マシンの初回ブート時に cloud-init サービスが起動すると、設定されたすべてのモジュールがそれぞれのフェーズで実行されます。初回以降のブート時に、モジュールがあるフェーズ内で実行されるかどうかは、そのモジュールの モジュール実行頻度 によって決まります。モジュール実行頻度は、cloud-init の設定内で指定されます。この設定で、インスタンス上で cloud-init が実行されるたびにモジュールを実行するのか、インスタンス ID が変更された場合でも、cloud-init の初回実行時にのみモジュールを実行するのかを決定します。

注記

インスタンス ID はインスタンスを一意に識別します。インスタンス ID が変更されると、cloud-init はそのインスタンスを新しいインスタンスとして処理します。詳細は、モジュール作成のシーン名の定義 を参照してください。

設定可能な モジュール実行頻度 の値は次のとおりです。

  • PER_INSTANCE とは、モジュールがインスタンスの初回起動時に実行されることを意味します。たとえば、インスタンスのクローンを作成したり、保存したイメージから新しいインスタンスを作成したりすると、インスタンス別と指定されたモジュールは再度実行されます。
  • ONCE とは、モジュールが 1 回だけ実行されることを意味します。たとえば、インスタンスのクローンを作成したり、保存したイメージから新しいインスタンスを作成したりすると、1 回と指定されたモジュールは、それらのインスタンスでは再度実行されません。
  • PER_ALWAYS とは、モジュールが起動のたびに実行されることを意味します。
注記

モジュールの実行頻度は、モジュールを設定するとき、またはコマンドラインを使用してオーバーライドできます。

2.4. cloud-init にとって重要なファイルとディレクトリー

Red Hat は、cloud-init ユーティリティー、cloud-init モジュール、およびデフォルトのディレクトリーとファイルをサポートしています。ディレクトリーとファイルを使用すると、次のようなタスクを実行できます。

  • cloud-init の設定
  • cloud-init 実行後の設定詳細の確認
  • ログファイルの検証
  • テンプレートの検索

要件とデータソースによっては、設定にとって重要な追加のファイルとディレクトリーが存在する場合があります。

Expand
表2.1 cloud-init ディレクトリーおよびファイル
ディレクトリーまたはファイル説明

/etc/cloud/cloud.cfg

cloud.cfg ファイルには基本的な cloud-init 設定が含まれ、各モジュールが実行するフェーズを確認できます。

/etc/cloud/cloud.cfg.d

cloud.cfg.d ディレクトリーでは、cloud-init の追加ディレクティブを追加できます。

/var/lib/cloud

cloud-init を実行すると、/var/lib/cloud の下にディレクトリーレイアウトが作成されます。このレイアウトには、インスタンス設定の詳細情報を提供するディレクトリーとファイルが含まれます。

/usr/share/doc/cloud-init/examples

examples ディレクトリーには、複数の例が含まれています。これらを使用すると、独自のディレクティブを作成できます。

/etc/cloud/templates

このディレクトリーには、特定のシナリオの cloud-init で有効にできるテンプレートが含まれています。テンプレートは、有効にするための指示を提供します。

/var/log/cloud-init.log

cloud-init.log ファイルは、デバッグに役立つログ情報を提供します。

/run/cloud-init

/run/cloud-init ディレクトリーには、データソースおよび ds-identify スクリプトのログ記録情報が含まれます。

2.4.1. デフォルトの cloud.cfg ファイル

/etc/cloud/cloud.cfg ファイルには、cloud-init の基本設定に含まれるモジュールがリストされます。これらのモジュールは cloud-init のデフォルトモジュールです。要件に応じてモジュールを設定または削除できます。

  • いずれかの cloud-init フェーズでアクションを実行するには、各モジュールを個別に設定し、cloud.cfg ファイルにリストする必要があります。モジュールは、cloud.cfg で指定された順序で実行されます。通常、この順序を変更することはありません。ただし、追加するモジュールが Red Hat によってサポートされている場合は、cloud.cfg にモジュールを追加できます。
  • cloud.cfg ディレクティブは、ユーザーデータによって上書きされることができます。cloud-init を手動で実行する場合、コマンドラインオプションを使用して cloud.cfg を上書きできます。
  • 各モジュールには独自の設定オプションが含まれており、この設定オプションに特定の情報を追加することができます。
  • 設定の機能を最適化するには、モジュール名にダッシュ (-) ではなくアンダースコア (_) を使用します。
  • Red Hat Enterprise Linux (RHEL) 用ファイルのデフォルトの内容は次のとおりです。
users:
 - default

disable_root: true
resize_rootfs_tmp: /dev
ssh_pwauth:   false

mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
ssh_deletekeys:   true
ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']
syslog_fix_perms: ~
disable_vmware_customization: false

cloud_init_modules:
  - migrator
  - seed_random
  - bootcmd
  - write_files
  - growpart
  - resizefs
  - disk_setup
  - mounts
  - set_hostname
  - update_hostname
  - update_etc_hosts
  - ca_certs
  - rsyslog
  - users_groups
  - ssh

cloud_config_modules:
  - ssh_import_id
  - locale
  - set_passwords
  - rh_subscription
  - spacewalk
  - yum_add_repo
  - ntp
  - timezone
  - disable_ec2_metadata
  - runcmd

cloud_final_modules:
  - package_update_upgrade_install
  - write_files_deferred
  - puppet
  - chef
  - ansible
  - mcollective
  - salt_minion
  - reset_rmc
  - rightscale_userdata
  - scripts_vendor
  - scripts_per_once
  - scripts_per_boot
  - scripts_per_instance
  - scripts_user
  - ssh_authkey_fingerprints
  - keys_to_console
  - install_hotplug
  - phone_home
  - final_message
  - power_state_change

system_info:
  default_user:
    name: cloud-user
    lock_passwd: true
    gecos: Cloud User
    groups: [adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
   distro: rhel
   network:
    renderers: ['sysconfig', 'eni', 'netplan', 'network-manager', 'networkd']
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_svcname: sshd

# vim:syntax=yaml
Copy to Clipboard Toggle word wrap
  • users はシステムのデフォルトユーザーを指定します。詳細は、Users and Groups を参照してください。
  • disable_root は、root ログインを有効または無効にします。詳細は、Authorized Keys を参照してください。
  • ssh_pwauth は、パスワード認証を許可するように ssh を設定するかどうかを指定します。詳細は、Set Passwords を参照してください。
  • mount_default_fields はマウントポイントを設定します。6 つの値を含むリストを設定する必要があります。詳細は、Mounts を参照してください。
  • ssh_deletekeys は、デフォルトのホスト SSH 鍵を削除するかどうかを指定します。詳細は、Host Keys を参照してください。
  • ssh_genkeytypes は生成する鍵の種類を指定します。詳細は、Host Keys を参照してください。
  • syslog_fix_perms は、すべてのブート段階をログファイルに記録するように cloud-init を設定します。詳細は、usr/share/doc/cloud-init/examples ディレクトリーの cloud-config.txt ファイルを参照してください。
  • disable_vmware_customization は、VMware vSphere のカスタマイズを有効または無効にします。
  • cloud_init_modules: このセクションのモジュールは、ブートプロセスの早い段階で cloud-init サービスが起動するときに実行されるサービスです。
  • cloud_config_modules: これらのモジュールは、初期ブート後の cloud-init 設定中に実行されます。
  • cloud_final_modules: これらのモジュールは、設定が完了した後、cloud-init の最終フェーズで実行されます。
  • default_user は、デフォルトユーザーの詳細を指定します。詳細は、Users and Groups を参照してください。
  • distro: ディストリビューションを指定します。
  • cloud_dir は、cloud-init 固有のサブディレクトリーを含むメインディレクトリーを指定します。詳細は、Directory layout を参照してください。
  • templates_dir はテンプレートが配置される場所を指定します。
  • ssh_svcname は SSH サービスの名前です。

2.4.2. デフォルトの cloud.cfg.d ディレクトリー

cloud-init は、ユーザーが提供および設定するディレクティブに対応します。通常、これらのディレクティブは cloud.cfg.d ディレクトリーに含まれています。

注記

cloud.cfg ファイル内でユーザーデータディレクティブを追加することでモジュールを設定できますが、cloud.cfg を未変更のままにすること (ベストプラクティス) をご検討ください。ディレクティブを /etc/cloud/cloud.cfg.d ディレクトリーに追加します。このディレクトリーにディレクティブを追加することで、今後の変更およびアップグレードを容易にすることができます。

ユーザースクリプトを *.cfg ファイルとして追加する方法の詳細は ユーザーデータ形式 を参照してください。

2.4.3. デフォルトの 05_logging.cfg ファイル

05_logging.cfg ファイルは、ログ情報と cloud-init のデフォルトのログ設定ファイルを設定します。/etc/cloud/cloud.cfg.d ディレクトリーには、このファイルとその他の cloud-init ディレクティブが含まれています。RHEL のファイルのデフォルトの内容は次のとおりです。

## This yaml formatted config file handles setting
## logger information.  The values that are necessary to be set
## are seen at the bottom.  The top '_log' are only used to remove
## redundancy in a syslog and fallback-to-file case.
##
## The 'log_cfgs' entry defines a list of logger configs
## Each entry in the list is tried, and the first one that
## works is used.  If a log_cfg list entry is an array, it will
## be joined with '\n'.
_log:
 - &log_base |
   [loggers]
   keys=root,cloudinit

   [handlers]
   keys=consoleHandler,cloudLogHandler

   [formatters]
   keys=simpleFormatter,arg0Formatter

   [logger_root]
   level=DEBUG
   handlers=consoleHandler,cloudLogHandler

   [logger_cloudinit]
   level=DEBUG
   qualname=cloudinit
   handlers=
   propagate=1

   [handler_consoleHandler]
   class=StreamHandler
   level=WARNING
   formatter=arg0Formatter
   args=(sys.stderr,)

   [formatter_arg0Formatter]
   format=%(asctime)s - %(filename)s[%(levelname)s]: %(message)s

   [formatter_simpleFormatter]
   format=[CLOUDINIT] %(filename)s[%(levelname)s]: %(message)s
 - &log_file |
   [handler_cloudLogHandler]
   class=FileHandler
   level=DEBUG
   formatter=arg0Formatter
   args=('/var/log/cloud-init.log',)
 - &log_syslog |
   [handler_cloudLogHandler]
   class=handlers.SysLogHandler
   level=DEBUG
   formatter=simpleFormatter
   args=("/dev/log", handlers.SysLogHandler.LOG_USER)

log_cfgs:
# Array entries in this list will be joined into a string
# that defines the configuration.
#
# If you want logs to go to syslog, uncomment the following line.
# - [ *log_base, *log_syslog ]
#
# The default behavior is to just log to a file.
# This mechanism that does not depend on a system service to operate.
 - [ *log_base, *log_file ]
# A file path can also be used.
# - /etc/log.conf

# This tells cloud-init to redirect its stdout and stderr to
# 'tee -a /var/log/cloud-init-output.log' so the user can see output
# there without needing to look on the console.
output: {all: '| tee -a /var/log/cloud-init-output.log'}
Copy to Clipboard Toggle word wrap

2.4.4. /var/lib/cloud ディレクトリーのレイアウト

cloud-init が開始されると、インスタンスの詳細と cloud-init 設定を含むディレクトリーレイアウトが作成されます。このディレクトリーには、/scripts/vendor などのオプションのディレクトリーを含めることができます。以下は、cloud-init のサンプルディレクトリーレイアウトです。

/var/lib/cloud/
    - data/
       - instance-id
       - previous-instance-id
       - previous-datasource
       - previous-hostname
       - result.json
       - set-hostname
       - status.json
    - handlers/
    - instance
       - boot-finished
       - cloud-config.txt
       - datasource
       - handlers/
       - obj.pkl
       - scripts/
       - sem/
       - user-data.txt
       - user-data.txt.i
       - vendor-data.txt
       - vendor-data.txt.i
    - instances/
        f111ee00-0a4a-4eea-9c17-3fa164739c55/
          - boot-finished
          - cloud-config.txt
          - datasource
          - handlers/
          - obj.pkl
          - scripts/
          - sem/
          - user-data.txt
          - user-data.txt.i
          - vendor-data.txt
          - vendor-data.txt.i
    - scripts/
       - per-boot/
       - per-instance/
       - per-once/
       - vendor/
    - seed/
    - sem/
       - config_scripts_per_once.once
Copy to Clipboard Toggle word wrap

第3章 Red Hat による cloud-init のサポート

Red Hat は、さまざまな Red Hat 製品において、cloud-init ユーティリティー、cloud-init モジュール、およびデフォルトのディレクトリーとファイルをサポートしています。

3.1. cloud-init を使用する Red Hat 製品

cloud-init は次の Red Hat 製品で使用できます。

3.2. サポートされている cloud-init モジュール

Red Hat はほとんどの cloud-init モジュールをサポートしています。個々のモジュールには、複数の設定オプションを含めることができます。次の表には、Red Hat が現在サポートしているすべての cloud-init モジュールが記載されており、簡単な説明とデフォルトのモジュール実行頻度が示されています。

Expand
表3.1 サポートされている cloud-init モジュール
cloud-init モジュール説明デフォルトのモジュール実行頻度

bootcmd

ブートプロセスの初期段階でコマンドを実行します。

常時

ca_certs

CA 証明書を追加します。

インスタンス別

debug

デバッグを支援するために内部情報の出力を有効または無効にします。

インスタンス別

disable_ec2_metadata

AWS EC2 メタデータを有効または無効にします。

常時

disk_setup

シンプルなパーティションテーブルとファイルシステムを設定します。

インスタンス別

final_message

cloud-init の完了後に出力メッセージを指定します。

常時

foo

モジュール構造の例 (モジュールは何もしません)。

インスタンス別

growpart

パーティションのサイズを変更して、利用可能なディスク領域を埋めます。

常時

keys_to_console

コンソールに書き込むことができるフィンガープリントとキーの制御を許可します。

インスタンス別

landscape

ランドスケープクライアントをインストールおよび設定します。

インスタンス別

locale

システムロケールを設定し、システム全体に適用します。

インスタンス別

mcollective

mcollective をインストール、設定、および起動します。

インスタンス別

migrator

cloud-init の古いバージョンを新しいバージョンへに移動します。

常時

mounts

マウントポイントとスワップファイルを設定します。

インスタンス別

phone_home

起動完了後にリモートホストにデータを投稿します。

インスタンス別

power_state_change

すべての設定モジュールの実行後にシャットダウンを完了し、再起動します。

インスタンス別

puppet

puppet をインストールおよび設定します。

インスタンス別

resizefs

ファイルシステムのサイズを変更し、パーティションで利用可能な領域をすべて使用します。

常時

resolv_conf

resolv.conf を設定します。

インスタンス別

rh_subscription

Red Hat Enterprise Linux (RHEL) システムを登録します。

インスタンス別

rightscale_userdata

cloud-init に RightScale 設定フックのサポートを追加します。

インスタンス別

rsyslog

rsyslog を使用してリモートシステムロギングを設定します。

インスタンス別

runcmd

任意のコマンドを実行します。

インスタンス別

salt_minion

salt minion をインストール、設定、および開始します。

インスタンス別

scripts_per_boot

起動スクリプトごとに実行します。

常時

scripts_per_instance

インスタンススクリプトごとに実行します。

インスタンス別

scripts_per_once

スクリプトを 1 回実行します。

1 回

scripts_user

ユーザースクリプトを実行します。

インスタンス別

scripts_vendor

ベンダースクリプトを実行します。

インスタンス別

seed_random

ランダムなシードデータを提供します。

インスタンス別

set_hostname

ホスト名および完全修飾ドメイン名 (FQDN) を設定します。

常時

set_passwords

ユーザーパスワードを設定し、SSH パスワード認証を有効または無効にします。

インスタンス別

ssh_authkey_fingerprints

ユーザーの SSH 鍵のフィンガープリントをログに記録します。

インスタンス別

ssh_import_id

SSH 鍵をインポートします。

インスタンス別

ssh

SSH、ホスト、および認可された SSH 鍵を設定します。

インスタンス別

timezone

システムのタイムゾーンを設定します。

インスタンス別

update_etc_hosts

/etc/hosts を更新します。

常時

update_hostname

ホスト名および FQDN を更新します。

常時

users_groups

ユーザーおよびグループを設定します。

インスタンス別

write_files

任意のファイルを書き込みます。

インスタンス別

yum_add_repo

dnf リポジトリー設定をシステムに追加します。

常時

3.3. Red Hat のサポート対象外の cloud-init モジュール

次のモジュールのリストは Red Hat では サポートされていない ため、cloud-init 設定でこのようなモジュールを使用することは推奨されません。

Expand
表3.2 モジュールはサポートされません。
モジュール

apt_configure

apt_pipeline

byobu

chef

emit_upstart

grub_dpkg

ubuntu_init_switch

第4章 cloud-init での仮想マシンの作成

cloud-init を含む新しい仮想マシン (VM) を作成するには、meta-data ファイルと user-data ファイルを作成します。

  • meta-data ファイルには、インスタンスの詳細が含まれます。
  • user-data ファイルには、ユーザーを作成し、アクセスを付与するための情報が含まれます。

これらのファイルを新しい ISO イメージに追加し、KVM ゲストイメージから作成した新しい仮想マシンに ISO ファイルをアタッチします。このシナリオでは、データソースは NoCloud です。

手順

  1. cloudinitiso ディレクトリーを作成し、作業ディレクトリーとして設定します。

    $ mkdir cloudinitiso
    $ cd cloudinitiso
    Copy to Clipboard Toggle word wrap
  2. meta-data ファイルを編集します。

    $ vi meta-data
    
    instance-id: citest
    local-hostname: citest-1
    Copy to Clipboard Toggle word wrap
  3. user-data ファイルを編集します。

    $ vi user-data
    
    #cloud-config
    password: cilogon
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - <ssh-rsa AAA...fhHQ== sample@example.com>
    Copy to Clipboard Toggle word wrap
    注記

    SSH 公開鍵は ~/.ssh/id_rsa.pub ファイルにあります。

  4. user-datameta-data を含む ISO イメージを作成します。

    # genisoimage -output ciiso.iso -volid cidata -joliet -rock user-data meta-data
    
    I: -input-charset not specified, using utf-8 (detected in locale settings)
    Total translation table size: 0
    Total rockridge attributes bytes: 331
    Total directory bytes: 0
    Path table size(bytes): 10
    Max brk space used 0
    183 extents written (0 MB)
    Copy to Clipboard Toggle word wrap
  5. Red Hat カスタマーポータルから、/var/lib/libvirt/images ディレクトリーに KVM ゲストイメージをダウンロードします。
  6. virt-install ユーティリティーを使用して KVM ゲストイメージから新しい仮想マシンを作成し、ダウンロードしたイメージを既存のイメージにアタッチします。

    # virt-install \
        --memory 4096 \
        --vcpus 4 \
        --name mytestcivm \
        --disk /var/lib/libvirt/images/rhel-8.1-x86_64-kvm.qcow2,device=disk,bus=virtio,format=qcow2 \
        --disk /home/sample/cloudinitiso/ciiso.iso,device=cdrom \
        --os-type Linux \
        --os-variant rhel10.0 \
        --virt-type kvm \
        --graphics none \
        --import
    Copy to Clipboard Toggle word wrap
  7. デフォルトのユーザー名 cloud-user とデフォルトのパスワード cilogon を使用してイメージにログオンします。

    citest-1 login: cloud-user
    Password:
    [cloud-user@citest-1 ~]$
    Copy to Clipboard Toggle word wrap

検証

  • cloud-init サービスのステータスをチェックして、ユーティリティーが定義されたタスクを完了したことを確認します。

    [cloud-user@citest-1 instance]$ cloud-init status
    status: done
    Copy to Clipboard Toggle word wrap

    cloud-init ユーティリティーは、実行時に /var/lib/cloud の下の cloud-init ディレクトリーレイアウトを作成し、指定したディレクティブに基づいて特定のディレクトリーコンテンツを更新または変更します。

  • たとえば、データソースファイルをチェックして、データソースが NoCloud であることを確認できます。

    $ cd /var/lib/cloud/instance
    $ cat datasource
    
    DataSourceNoCloud: DataSourceNoCloud [seed=/dev/sr0][dsmode=net]
    Copy to Clipboard Toggle word wrap
  • cloud-init は、user-data を /var/lib/cloud/instance/user-data.txt にコピーします。

    $ cat user-data.txt
    
    #cloud-config
    password: cilogon
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...fhHQ== sample@redhat.com
    Copy to Clipboard Toggle word wrap
注記

OpenStack の場合、インスタンスの作成と管理 には、cloud-init を使用してインスタンスを設定するための情報が含まれています。具体的な手順は、カスタムインスタンスの作成 を参照してください。

第5章 cloud-init を使用して初回起動コマンドを実行する

仮想マシンの最初の起動と初期化中にコマンドを実行するには、cloud-init 設定の runcmd セクションと bootcmd セクションを使用できます。

  • bootcmd セクションは、初期化プロセスの早い段階で実行され、デフォルトでは起動ごとに実行されます。
  • runcmd セクションは、プロセスの最後の方で実行され、初回起動時および初期化中にのみ実行されます。

前提条件

  • データソースの要件に応じて、user-data ファイルを編集するか、次のディレクティブを cloud.cfg.d ディレクトリーに追加する。

    注記

    cloud-init が、ユーザーディレクティブを含むファイルを認識できるように、すべてのユーザーディレクティブはファイルの最上部に #cloud-config が含まれます。cloud.cfg.d ディレクトリーにディレクティブを含める場合は、ファイル名を *.cfg とし、ファイルの最上部に常に #cloud-config を含めます。

手順

  1. bootcmd および runcmd のセクションを追加します。cloud-init が実行するコマンドを含めます。

    #cloud-config
    users:
      - default
      - name: user2
        gecos: User N. Ame
        groups: users
    chpasswd:
      list: |
        root:password
        fedora:myfedpassword
        user2:mypassword2
      expire: False
    bootcmd:
     - echo New MOTD >> /etc/motd
    runcmd:
     - echo New MOTD2 >> /etc/motd
    Copy to Clipboard Toggle word wrap

第6章 仮想マシンでの cloud-init の再実行

cloud-init サービスで設定された仮想マシン (VM) に追加の設定が必要な場合は、cloud-init プロセスを再実行できます。

警告

cloud-init プロセスを再実行すると、データが失われ、SSH 鍵やパスワードなどの認証情報が上書きされる可能性があります。実稼働環境で cloud-init を再実行することは避けてください。

6.1. cloud-init の実行後に KVM ゲストイメージから作成された仮想マシンの変更

cloud-init パッケージがインストールされ有効になっている仮想マシンを起動すると、仮想マシンの初回起動時に cloud-init がデフォルトの状態で実行されます。仮想マシンの設定を変更する場合は、cloud-init の設定を変更して cloud-init を再実行できます。

手順

  1. 仮想マシンにログインします。
  2. ディレクティブを追加または変更します。たとえば、/etc/cloud ディレクトリーの cloud.cfg ファイルを変更するか、ディレクティブを /etc/cloud/cloud.cfg.d ディレクトリーに追加します。
  3. cloud-init clean コマンドを実行してディレクトリーをクリーンアップし、cloud-init を再実行できるようにします。
  4. 仮想マシンデータを消去するには、次のコマンドを root として実行します。

    rm -Rf /var/lib/cloud/instances/
    rm -Rf /var/lib/cloud/instance
    rm -Rf /var/lib/cloud/data/
    Copy to Clipboard Toggle word wrap
    注記

    クリーンアップしたイメージをテンプレートイメージとして保存し、そのイメージを複数の仮想マシンに使用できます。新しい仮想マシンは更新された設定を使用して cloud-init を実行します。

  5. 設定の変更を実装するには、cloud-init を再実行するか、仮想マシンを再起動します。cloud-init の再実行の詳細は、cloud-init の再実行 を参照してください。

6.2. cloud-init 実行後の特定データソースの仮想マシンの変更

cloud-init を再実行する前に、cloud-init の設定を変更できます。実行する必要がある正確な手順は、データソースによって異なることに注意してください。次の手順では、OpenStack をデータソースの例として使用します。

手順

  1. OpenStack Platform のインスタンスを作成して起動します。OpenStack のインスタンスの作成は、インスタンスの作成 を参照してください。この例では、仮想マシンには cloud-init が含まれており、これは仮想マシンの起動時に実行されます。
  2. ディレクティブを追加または変更します。たとえば、OpenStack HTTP サーバー上に保管されている user-data.file ファイルを変更します。
  3. 仮想マシンをクリーンアップします。

    # rm -rf /etc/resolv.conf /run/cloud-init
    # userdel -rf cloud-user
    # hostnamectl set-hostname localhost.localdomain
    # rm /etc/NetworkManager/conf.d/99-cloud-init.conf
    Copy to Clipboard Toggle word wrap
    注記

    クリーンアップしたイメージをテンプレートイメージとして保存し、そのイメージを複数の仮想マシンで使用できます。新しい仮想マシンは、更新された cloud-init 設定を使用して、cloud-init を実行します。

  4. 設定の変更を実装するには、cloud-init を再実行するか、仮想マシンを再起動します。cloud-init の再実行の詳細は、cloud-init の再実行 を参照してください。

第7章 cloud-init を使用した認証の設定

cloud-init ユーティリティーを使用して、ユーザー、アクセス権、およびパスワードを管理できます。具体的には、仮想マシンで次のいずれかを実行するように cloud-init を設定できます。

  • users セクションでユーザーを作成して、記述します。users セクションを追加する場合は、そのセクションでデフォルトのユーザーオプションも設定する必要があります。セクションを変更して、初期システム設定にユーザーを追加したり、追加のユーザーオプションを設定したりすることもできます。
  • users セクションに sudo および groups エントリーを追加して、ユーザーを sudoer として設定します。
  • 自分だけが root ユーザーの権限を所有するようにユーザーデータを設定します。
  • パスワードをリセットするには、最初のログイン時に cloud-usercloud-user のパスワードを強制的に変更させます。
  • ユーザーリストを作成して、root パスワードを設定します。

前提条件

  • データソースの要件に応じて、user-data ファイルを編集するか、次のディレクティブを cloud.cfg.d ディレクトリーに追加する。

    注記

    cloud-init が、ユーザーディレクティブを含むファイルを認識できるように、すべてのユーザーディレクティブはファイルの最上部に #cloud-config が含まれます。cloud.cfg.d ディレクトリーにディレクティブを含める場合は、ファイル名を *.cfg とし、ファイルの最上部に常に #cloud-config を含めます。

手順

  • ユーザーとユーザーオプションを追加 します。

    • デフォルトでは、selinux-user 値がない場合、ユーザーは unconfined_u とラベル付けされます。

      注記

      この例では、ユーザー user2userswheel の 2 つのグループに配置します。

    • users セクションを追加または変更し、ユーザーを追加します。以下に例を示します。

      #cloud-config
      users:
        - default
        - name: user2
          gecos: User N. Ame
          selinux-user: staff_u
          groups: users,wheel
          ssh_pwauth: True
          ssh_authorized_keys:
            - ssh-rsa AA..vz user@domain.com
      chpasswd:
        list: |
          root:password
          cloud-user:mypassword
          user2:mypassword2
        expire: False
      Copy to Clipboard Toggle word wrap
    • cloud-user を、指定する他のユーザーと共に作成したデフォルトユーザーにするには、セクションの最初のエントリーとして default を追加することを確認してください。これが最初のエントリーでない場合は、cloud-user は作成されません。
  • sudo ユーザーをユーザーリストに追加 します。

    • sudo エントリーを追加し、ユーザーアクセスを指定します。たとえば、sudo: ALL=(ALL) NOPASSWD:ALL は、ユーザーに無制限のユーザーアクセスを許可します。
    • groups エントリーを追加し、ユーザーを含むグループを指定します。

      #cloud-config
      users:
        - default
        - name: user2
          gecos: User D. Two
          sudo: ["ALL=(ALL) NOPASSWD:ALL"]
          groups: wheel,adm,systemd-journal
          ssh_pwauth: True
          ssh_authorized_keys:
            - ssh-rsa AA...vz user@domain.com
      chpasswd:
        list: |
          root:password
          cloud-user:mypassword
          user2:mypassword2
        expire: False
      Copy to Clipboard Toggle word wrap
  • ユーザーに排他的な root アクセスを設定 します。

    • name オプションを変更して、users セクションにユーザー root のエントリーを作成します。

      users:
        - name: root
      chpasswd:
        list: |
          root:password
        expire: False
      Copy to Clipboard Toggle word wrap
    • オプション: root ユーザーの SSH 鍵を設定します。

      users:
        - name: root
          ssh_pwauth: True
          ssh_authorized_keys:
            - ssh-rsa AA..vz user@domain.com
      Copy to Clipboard Toggle word wrap
  • デフォルトの cloud-init ユーザー名を変更するには、次の手順に従います。

    • user: <username> の行を追加します。<username> は新しいデフォルトのユーザー名に置き換えます。

      #cloud-config
      user: username
      password: mypassword
      chpasswd: {expire: False}
      ssh_pwauth: True
      ssh_authorized_keys:
        - ssh-rsa AAA...SDvz user1@yourdomain.com
        - ssh-rsa AAB...QTuo user2@yourdomain.com
      Copy to Clipboard Toggle word wrap
  • 新しいユーザーのパスワードをリセット します。

    • chpasswd: {expire: False} の行を chpasswd: {expire: True} に変更します。

      #cloud-config
      password: mypassword
      chpasswd: {expire: True}
      ssh_pwauth: True
      ssh_authorized_keys:
        - ssh-rsa AAA...SDvz user1@yourdomain.com
        - ssh-rsa AAB...QTuo user2@yourdomain.com
      Copy to Clipboard Toggle word wrap
      注記
      • これはパスワードを失効させます。なぜなら、passwordchpasswd は特に指定がない限り、デフォルトのユーザーで動作するからです。
      • これはグローバル設定です。chpasswdTrue に設定すると、作成するすべてのユーザーが、ログイン時にパスワードを変更する必要があります。
  • root パスワードを設定 します。

    • chpasswd セクションにユーザーリストを作成します。

      注記

      空白は重要です。ユーザーリストのコロンの前後に空白を含めないでください。空白が含まれている場合、パスワードは空白を入れた設定となります。

      #cloud-config
      ssh_pwauth: True
      ssh_authorized_keys:
        - ssh-rsa AAA...SDvz user1@yourdomain.com
        - ssh-rsa AAB...QTuo user2@yourdomain.com
      chpasswd:
        list: |
           root:myrootpassword
           cloud-user:mypassword
        expire: False
      Copy to Clipboard Toggle word wrap
      注記

      この方法を使用してユーザーパスワードを設定する場合は、このセクションの すべてのパスワード を設定する必要があります。

第8章 cloud-init を使用した Red Hat サブスクリプションの管理

rh_subscription ディレクティブを使用してシステムを登録できます。サブスクリプションごとに、ユーザーデータを編集する必要があります。

default オプションの使用

rh_subscription の下に、usernamepassword を追加します。

rh_subscription:
  username: <example@redhat.com>
  password: <example_password>
Copy to Clipboard Toggle word wrap
activation-keyorg オプションの使用

rh_subscription の下に、activation keyorg の番号を追加します。

rh_subscription:
  activation-key: <example_key>
  org: <example_id>
Copy to Clipboard Toggle word wrap
server-hostname オプションの使用

/etc/rhsm/rhsm.conf ファイルでサーバーのホスト名を設定できます。rh_subscription の下に、usernamepassword、および server-hostname を追加します。

rh_subscription:
  username: <example@redhat.com>
  password: <example_password>
  server-hostname: <test.example.com>
Copy to Clipboard Toggle word wrap

第9章 cloud-init を使用した静的ネットワークの設定

network-interfaces セクションをメタデータに追加することで、cloud-init を使用してネットワーク設定をセットアップできます。

Red Hat Enterprise Linux (RHEL) は、NetworkManager を通じてデフォルトのネットワークサービスを提供します。これは、動的なネットワーク制御および設定を行うデーモンであり、ネットワークデバイスと接続が利用可能なときに、それらをアクティブな稼働状態に維持します。

+

注記

データソースがネットワーク設定を提供する場合があります。詳細は、cloud-init セクションの ネットワーク設定ソース を参照してください。

cloud-init のネットワーク設定を指定しておらず、ネットワーク設定を無効にしていない場合、cloud-init は割り当てられているデバイスに既存の接続があるかどうかを判別しようとします。接続されたデバイスを見つけると、インターフェイスで DHCP 要求を発行するネットワーク設定が生成されます。詳細は、cloud-init ドキュメントの Fallback Network Configuration セクションを参照してください。

前提条件

  • データソースの要件に応じて、user-data ファイルを編集するか、次のディレクティブを cloud.cfg.d ディレクトリーに追加する。

    注記

    cloud-init が、ユーザーディレクティブを含むファイルを認識できるように、すべてのユーザーディレクティブはファイルの最上部に #cloud-config が含まれます。cloud.cfg.d ディレクトリーにディレクティブを含める場合は、ファイル名を *.cfg とし、ファイルの最上部に常に #cloud-config を含めます。

手順

  • network-interfaces セクションを追加します。以下に例を示します。

    network:
      version: 1
      config:
        - type: physical
          name: eth0
          subnets:
            - type: static
              address: 192.0.2.1/24
              gateway: 192.0.2.254
    Copy to Clipboard Toggle word wrap

メタデータに以下の情報を追加することで、ネットワーク設定を無効にすることができます。

network:
  config: disabled
Copy to Clipboard Toggle word wrap

第10章 cloud-init を使用したコンテナーストレージの設定

write_files モジュール内で、container-storage-setup ユーティリティーを参照してストレージを設定できます。

前提条件

  • データソースの要件に応じて、user-data ファイルを編集するか、次のディレクティブを cloud.cfg.d ディレクトリーに追加する。

    注記

    cloud-init が、ユーザーディレクティブを含むファイルを認識できるように、すべてのユーザーディレクティブはファイルの最上部に #cloud-config が含まれます。cloud.cfg.d ディレクトリーにディレクティブを含める場合は、ファイル名を *.cfg とし、ファイルの最上部に常に #cloud-config を含めます。

手順

  • container-storage-setup ユーティリティーへのパスを含めるように write_files モジュールを追加または変更します。

    write_files:
      - path: /etc/sysconfig/docker-storage-setup
        permissions: 0644
        owner: root
        content: |
        ROOT_SIZE=6G
    Copy to Clipboard Toggle word wrap

    この例では、ルート論理ボリュームのサイズをデフォルトの 3 GB ではなく 6 GB に設定します。

第11章 cloud-init でのシェルスクリプトの使用

bootcmd または runcmd に、リスト値または文字列の値を追加できます。また、ユーザーデータ内にシェルスクリプトを指定することもできます。

  • 文字列値を使用する場合、文字列全体がシェルスクリプトとして実行されます。
  • bootcmd または runcmd のリスト値を使用する場合、各リスト項目は execve を使用して順番に実行されます。
  • cloud-init を使用してシェルスクリプトを実行する場合は、cloud-init.yaml ファイルを指定する代わりに、シェルスクリプト (シバン #! を追加すること) を指定できます。

シェルスクリプトを bootcmd および runcmd に配置する方法の例は、Run commands on first boot を参照してください。

第12章 cloud-init を使用したシステムロケールの変更

locale モジュールを使用して、システムの場所を設定できます。

前提条件

  • データソースの要件に応じて、meta-data ファイルを編集します。次のディレクティブを cloud.cfg ファイルまたは cloud.cfg.d ディレクトリーに追加することもできます。

手順

  • 場所を指定して locale ディレクティブを追加します。以下の例では、UTF-8 エンコーディングで localeja_JP (日本) に設定しています。
#cloud-config
locale: ja_JP.UTF-8
Copy to Clipboard Toggle word wrap

第13章 cloud-init による設定ファイルの更新の阻止

バックアップイメージからインスタンスを作成または復元すると、インスタンス ID が変更されます。インスタンス ID が更新されると、cloud-init ユーティリティーは設定ファイルを更新します。ただし、バックアップを作成またはバックアップから復元するときに、cloud-init が特定の設定ファイルを更新しないようにすることができます。

手順

  1. /etc/cloud/cloud.cfg ファイルを編集します。

    # vi /etc/cloud/cloud.cfg
    Copy to Clipboard Toggle word wrap
  2. インスタンスの復元時に、cloud-init が更新しない設定をコメントアウトまたは削除します。たとえば、SSH 鍵ファイルの更新を回避するには、cloud_init_modules セクションから -ssh を削除します。

    cloud_init_modules:
     - disk_setup
     - migrator
     - bootcmd
     - write-files
     - growpart
     - resizefs
     - set_hostname
     - update_hostname
     - update_etc_hosts
     - rsyslog
     - users-groups
     # - ssh
    Copy to Clipboard Toggle word wrap

検証

  • cloud-init によって更新された設定ファイルを確認するには、/var/log/cloud/cloud-init.log ファイルを調べます。更新されたファイルは、インスタンスの起動時に Writing to で始まるメッセージでログに記録されます。

    2019-09-03 00:16:07,XXX - util.py[DEBUG]: Writing to /root/.ssh/authorized_keys - wb: [XXX] 554 bytes
    2019-09-03 00:16:08,XXX - util.py[DEBUG]: Writing to /etc/ssh/sshd_config - wb: [XXX] 3905 bytes
    Copy to Clipboard Toggle word wrap

第14章 cloud-init のトラブルシューティング

cloud-init ユーティリティーを実行した後、設定ファイルとログファイルを調べることでインスタンスのトラブルシューティングを行うことができます。問題を特定したら、インスタンスで cloud-init を再実行します。コマンドラインから cloud-init を実行できます。詳細は、cloud-init --help コマンドを実行してください。

  • 一般的な設定の問題は、cloud-init 設定ファイルを確認してください。

    1. /etc/cloud/cloud.cfg 設定ファイルを検証します。cloud_init_modulescloud_config_modules、および cloud_final_modules に含まれるモジュールを確認します。
    2. /etc/cloud/cloud.cfg.d ディレクトリーで、ディレクティブ (*.cfg files) を確認します。
  • root パーティションが自動的に拡張されなかった場合は、growpart ユーティリティーのログメッセージを確認します。

    注記

    growpart は LVM をサポートしません。root パーティションが LVM をベースとしている場合は、root パーティションは初回起動時に自動的に拡張されません。

    • 特定の問題の詳細は、/var/log/cloud-init.log ファイルおよび /var/log/cloud-init-output.log ファイルを確認してください。
  • ファイルシステムが拡張されなかった場合は、ログメッセージで resizefs を確認します。

    # grep resizefs /var/log/cloud-init.log
    Copy to Clipboard Toggle word wrap
重要

cloud-init コマンドを root として再実行します。

  • init モジュールのみで cloud-init を再実行します。

    # /usr/bin/cloud-init -d init
    Copy to Clipboard Toggle word wrap
  • 設定内のすべてのモジュールで cloud-init を再実行します。

    # /usr/bin/cloud-init -d modules
    Copy to Clipboard Toggle word wrap
  • cloud-init キャッシュを削除し、起動後に cloud-init を強制的に実行します。

    # rm -rf /var/lib/cloud/ && /usr/bin/cloud-init -d init
    Copy to Clipboard Toggle word wrap
  • ディレクトリーをクリーンアップし、クリーンなインスタンスをシミュレートします。

    # rm -rf /var/lib/cloud/instances/
    # rm -rf /var/lib/cloud/instance
    # rm -rf /var/lib/cloud/data/
    # reboot
    Copy to Clipboard Toggle word wrap
  • cloud-init ユーティリティーを再実行します。

    # cloud-init init --local
    # cloud-init init
    Copy to Clipboard Toggle word wrap

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る