cloud-init#

  • cloud-init.vendor-data

  • cloud-init.user-data

  • cloud-init.network-config

しかし、 cloud-init を使おうとする前に、これから使おうとするイメージ・ソース をどれにするかをまず決めてください。というのも、全てのイメージに cloud-init パッケージがインストールされているわけではないからです。

ubuntuubuntu-daily の remote にあるイメージは全て cloud-init が有効です。 images remote のイメージで cloud-init が有効なイメージがあるものは /cloud という接尾辞がつきます(例: images:ubuntu/22.04/cloud)。

vendor-datauser-data は同じルールに従いますが、以下の制約があります。

  • ユーザーは vendordata に対して究極のコントロールが可能です。実行を無効化したりマルチパートの入力の特定のパートの処理を無効化できます。

  • デフォルトでは初回ブート時のみ実行されます。

  • vendordata はユーザーにより無効化できます。インスタンスの実行に vendordata の使用が必須な場合は vendordata を使うべきではありません。

  • ユーザーが指定した cloud-config は vendordata の cloud-config の上にマージされます。

LXD のインスタンスではインスタンスの設定よりもプロファイル内の vendor-data を使うべきです。

cloud-config の例はこちらにあります。 https://cloudinit.readthedocs.io/en/latest/topics/examples.html

カスタムネットワーク設定#

cloud-init は、network-config データを使い、Ubuntu リリースに応じて ifupdown もしくは netplan のどちらかを使って、システム上の関連する設定 を行います。

デフォルトではインスタンスの eth0 インタフェースで DHCP クライアントを使うように なっています。

これを変更するためには設定ディクショナリ内の cloud-init.network-config キーを 使ってあなた自身のネットワーク設定を定義する必要があります。その設定が デフォルトの設定をオーバーライドするでしょう(これはテンプレートがそのように 構成されているためです)。

例えば、ある特定のネットワーク・インタフェースを静的 IPv4 アドレスを持ち、 カスタムのネームスペースを使うようにするには、以下のようにします。

config:
  cloud-init.network-config: |
    version: 1
    config:
      - type: physical
        name: eth1
        subnets:
          - type: static
            ipv4: true
            address: 10.10.101.20
            netmask: 255.255.255.0
            gateway: 10.10.101.1
            control: auto
      - type: nameserver
        address: 10.10.10.254

この結果、インスタンスの rootfs には以下のファイルが作られます。

  • /var/lib/cloud/seed/nocloud-net/network-config

  • /etc/network/interfaces.d/50-cloud-init.cfg (ifupdown を使う場合)

  • /etc/netplan/50-cloud-init.yaml (netplan を使う場合)