「Cloud-init」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(カテゴリの翻訳)
(Pkg/AUR テンプレートの更新)
 
(2人の利用者による、間の7版が非表示)
6行目: 6行目:
 
== インストール ==
 
== インストール ==
   
[[公式リポジトリ]] から {{Pkg|cloud-init}} をインストールします。
+
{{Pkg|cloud-init}} パッケージ[[インストール]]します。
   
 
== 設定 ==
 
== 設定 ==
15行目: 15行目:
 
* sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
 
* sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
 
* デフォルトユーザーがパスワードなしで sudo できるようにします。
 
* デフォルトユーザーがパスワードなしで sudo できるようにします。
* インスタンスのメタ情報を引き出せるように cloud-init を設定します。以下のことが含まれますが、これだけに限られるわけではありません:
+
* インスタンスのメタ情報を引き出せるように cloud-init を設定します。設定には以下が含まれますが、以下だけに限られるわけではありません:
 
** {{ic|hostname}} をセットする
 
** {{ic|hostname}} をセットする
 
** {{ic|resolv.conf}} をセットする
 
** {{ic|resolv.conf}} をセットする
 
** デフォルトユーザーの {{ic|~/.ssh/authorized_keys}} をセットする
 
** デフォルトユーザーの {{ic|~/.ssh/authorized_keys}} をセットする
   
cloud-init のメイン設定ファイルは {{ic|/etc/cloud/cloud.cfg}} です。{{ic|/etc/cloud/cloud.cfg.d}} に {{ic|*.cfg}} ファイルを 置くと、これらも読み込まれます。
+
cloud-init のメイン設定ファイルは {{ic|/etc/cloud/cloud.cfg}} です。{{ic|/etc/cloud/cloud.cfg.d}} に {{ic|*.cfg}} ファイルを置くと、配置した {{ic|*.cfg}} ファイルも読み込まれます。
   
 
=== デフォルトユーザーの設定 ===
 
=== デフォルトユーザーの設定 ===
  +
  +
2016年2月現在、パッケージに付属しているデフォルトの {{ic|/etc/cloud/cloud.cfg}} は Arch 向けに修正されておらず、ディストリが Ubuntu になっています。そのため、編集が必須です。
   
 
{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにします:
 
{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにします:
29行目: 31行目:
 
- default
 
- default
   
これによって {{ic|system_info}} > {{ic|default_user}} のユーザーがデフォルトユーザーになります。
+
上記の設定によって {{ic|system_info}} > {{ic|default_user}} のユーザーがデフォルトユーザーになります。
   
 
system_info:
 
system_info:
35行目: 37行目:
 
default_user:
 
default_user:
 
name: arch
 
name: arch
lock_passwd: True
+
lock_passwd: true
 
gecos: Arch
 
gecos: Arch
 
groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
 
groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
44行目: 46行目:
   
 
* デフォルトユーザーの名前を {{ic|arch}} にする
 
* デフォルトユーザーの名前を {{ic|arch}} にする
* デフォルトユーザーのパスワードをロックする。これによって起動時に設定した SSH 鍵なしにログインできなくなる。
+
* デフォルトユーザーのパスワードをロックする。ロックによって起動時に設定した SSH 鍵なしにログインできなくなる。
 
* デフォルトユーザーをグループ {{ic|adm}}, {{ic|audio}}, {{ic|cdrom}}, {{ic|dialout}}, {{ic|dip}}, {{ic|floppy}}, {{ic|netdev}}, {{ic|plugdev}}, {{ic|sudo}}, {{ic|video}} に追加する
 
* デフォルトユーザーをグループ {{ic|adm}}, {{ic|audio}}, {{ic|cdrom}}, {{ic|dialout}}, {{ic|dip}}, {{ic|floppy}}, {{ic|netdev}}, {{ic|plugdev}}, {{ic|sudo}}, {{ic|video}} に追加する
 
* デフォルトユーザーをパスワードなしで sudo できるようにする
 
* デフォルトユーザーをパスワードなしで sudo できるようにする
57行目: 59行目:
 
# passwd -d root
 
# passwd -d root
   
前のセクションでの設定が正しく動作することを確認できていない限り、これは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。
+
前のセクションでの設定が正しく動作することを確認できていない限り、上記のコマンドは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。
   
 
=== データソースの設定 ===
 
=== データソースの設定 ===
   
データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。これはどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、これは共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにしてください:
+
データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。定義はどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにしてください:
 
datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]
 
datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]
   
73行目: 75行目:
 
</nowiki>}}
 
</nowiki>}}
   
上記の設定は、OpenStack データソースの場合に {{ic|<nowiki>http://169.254.169.254:80</nowiki>}} からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。これはどちらもデフォルトの挙動であり、省略できます。
+
上記の設定は、OpenStack データソースの場合に {{ic|<nowiki>http://169.254.169.254:80</nowiki>}} からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。どちらもデフォルトの挙動であり、省略できます。
   
 
== cloud.cfg の他のセクション ==
 
== cloud.cfg の他のセクション ==
   
{{ic|cloud.cfg}} には他にもいくつかのセクションがあり {{ic|cloud_init_modules}}, {{ic|cloud_config_modules}}, {{ic|cloud_final_modules}} などを含んでいます。これらはインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。
+
{{ic|cloud.cfg}} には他にもいくつかのセクションがあり {{ic|cloud_init_modules}}, {{ic|cloud_config_modules}}, {{ic|cloud_final_modules}} などがあります。これらのセクションではインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。
   
これらのモジュールは {{ic|/usr/lib/python2.7/site-packages/cloudinit/config/}} から動的にロードされ、起動時に実行されます。
+
定義したモジュールは {{ic|/usr/lib/python2.7/site-packages/cloudinit/config/}} から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:
独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:
 
   
 
* ディスクをリサイズする
 
* ディスクをリサイズする
 
* パッケージをアップデートする
 
* パッケージをアップデートする
  +
  +
モジュールは動作確認済みのディストリを cloud-init に知らせます。たとえあなたが実行したいと指定しても、{{ic|cloud.cfg}} で設定したディストリが検証済みのディストリのリストに記載されてなければモジュールは動作しません。検証がない場合でもモジュールを Arch で動作させたい場合、モジュールを {{ic|cloud.cfg}} の {{ic|unverified_modules:}} セクションに追加してください。例:
  +
unverified_modules: ['ssh-import-id']
   
 
== Systemd との統合 ==
 
== Systemd との統合 ==
   
cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。これらが以下の順番で起動するように依存関係が構築されます:
+
cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。サービスとターゲットは以下の順番で起動するように依存関係が構築されます:
 
* {{ic|cloud-init-local.service}}。ファイルシステムが立ち上がっていることを要求するだけ。{{ic|cloud-init init --local}} を実行する。
 
* {{ic|cloud-init-local.service}}。ファイルシステムが立ち上がっていることを要求するだけ。{{ic|cloud-init init --local}} を実行する。
 
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。
 
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。
* {{ic|cloud-config.target}}。Corresponds to the cloud-config upstart event "to inform third parties that cloud-config is available"
+
* {{ic|cloud-config.target}}。cloud-config の起動イベントに反応して cloud-config が利用できるようになったことを第三者に伝えます。
* {{ic|cloud-config.service}}. {{ic|cloud-init modules <nowiki>--mode=config</nowiki>}} を実行する。
+
* {{ic|cloud-config.service}}{{ic|cloud-init modules <nowiki>--mode=config</nowiki>}} を実行する。
* {{ic|cloud-final.service}}. {{ic|cloud-init modules <nowiki>--mode=final</nowiki>}} を実行する。
+
* {{ic|cloud-final.service}}{{ic|cloud-init modules <nowiki>--mode=final</nowiki>}} を実行する。
   
[[Arch_Linux_AMIs_for_Amazon_Web_Services|Uplink Labs EC2 images]] は上記の全てを有効にしています。もっともこは依存関係のせいでやりすぎになっているようですが。
+
[[Amazon Web Services の Arch Linux AMI#Uplink Labs の AMI イメージ|Uplink Labs EC2 イメージ]]は上記の全てを有効にしています。もっともこのイメージは依存関係のせいでやりすぎになっているようですが。

2019年11月21日 (木) 18:48時点における最新版

Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。OpenStackAWS などのクラウドで起動するための Arch Linux イメージに入れる必要があります。

インストール

cloud-init パッケージをインストールします。

設定

クラウド用の Arch のイメージを準備するためには、いくつかのステップが必要になります:

  • デフォルトユーザーを作成する。このユーザーでインスタンスにログインすることになります。ここでは arch というユーザーを作成します。
  • sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
  • デフォルトユーザーがパスワードなしで sudo できるようにします。
  • インスタンスのメタ情報を引き出せるように cloud-init を設定します。設定には以下が含まれますが、以下だけに限られるわけではありません:
    • hostname をセットする
    • resolv.conf をセットする
    • デフォルトユーザーの ~/.ssh/authorized_keys をセットする

cloud-init のメイン設定ファイルは /etc/cloud/cloud.cfg です。/etc/cloud/cloud.cfg.d*.cfg ファイルを置くと、配置した *.cfg ファイルも読み込まれます。

デフォルトユーザーの設定

2016年2月現在、パッケージに付属しているデフォルトの /etc/cloud/cloud.cfg は Arch 向けに修正されておらず、ディストリが Ubuntu になっています。そのため、編集が必須です。

/etc/cloud/cloud.cfg を編集して以下のようにします:

users:
  - default

上記の設定によって system_info > default_user のユーザーがデフォルトユーザーになります。

system_info:
   distro: arch
   default_user:
     name: arch 
     lock_passwd: true
     gecos: Arch
     groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
     shell: /bin/bash

system_info の中でディストロを "arch" と指定しています。これによって設定に arch.py が使われるようになります。さらに以下の設定をしています:

  • デフォルトユーザーの名前を arch にする
  • デフォルトユーザーのパスワードをロックする。ロックによって起動時に設定した SSH 鍵なしにログインできなくなる。
  • デフォルトユーザーをグループ adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video に追加する
  • デフォルトユーザーをパスワードなしで sudo できるようにする
  • デフォルトユーザーのシェルを /bin/bash にする

root でのログインを禁止する

/etc/cloud/cloud.cfg で次のように指定します:

disable_root: true

また、root ユーザーのパスワードを削除することもできます:

# passwd -d root

前のセクションでの設定が正しく動作することを確認できていない限り、上記のコマンドは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。

データソースの設定

データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。定義はどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。/etc/cloud/cloud.cfg を編集して以下のようにしてください:

datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]

これによって、インスタンスのメタ情報をダウンロードするときにどのモジュールを使うかを指定します。状況に応じて、以下のように各データソースごとのパラメータを渡すこともできます:

datasource:
  OpenStack:
    metadata_urls: [ 'http://169.254.169.254:80' ]
    dsmode: net

上記の設定は、OpenStack データソースの場合に http://169.254.169.254:80 からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。どちらもデフォルトの挙動であり、省略できます。

cloud.cfg の他のセクション

cloud.cfg には他にもいくつかのセクションがあり cloud_init_modules, cloud_config_modules, cloud_final_modules などがあります。これらのセクションではインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。

定義したモジュールは /usr/lib/python2.7/site-packages/cloudinit/config/ から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:

  • ディスクをリサイズする
  • パッケージをアップデートする

モジュールは動作確認済みのディストリを cloud-init に知らせます。たとえあなたが実行したいと指定しても、cloud.cfg で設定したディストリが検証済みのディストリのリストに記載されてなければモジュールは動作しません。検証がない場合でもモジュールを Arch で動作させたい場合、モジュールを cloud.cfgunverified_modules: セクションに追加してください。例:

unverified_modules: ['ssh-import-id']

Systemd との統合

cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。サービスとターゲットは以下の順番で起動するように依存関係が構築されます:

  • cloud-init-local.service。ファイルシステムが立ち上がっていることを要求するだけ。cloud-init init --local を実行する。
  • cloud-init.service。ネットワークが起動することを要求する。cloud-init init を実行する。
  • cloud-config.target。cloud-config の起動イベントに反応して cloud-config が利用できるようになったことを第三者に伝えます。
  • cloud-config.servicecloud-init modules --mode=config を実行する。
  • cloud-final.servicecloud-init modules --mode=final を実行する。

Uplink Labs の EC2 イメージは上記の全てを有効にしています。もっともこのイメージは依存関係のせいでやりすぎになっているようですが。