ナレッジベース

クラウドイニットで初回起動の作業を行う

注文にユーザーデータ文書を添付すると、インスタンスはユーザー、キー、パッケージ、ファイアウォールがすでに配置された状態で到着します。

何がいつ実行されるか

すべてのLinuxイメージにはcloud-initが搭載されている。最初の起動時に、注文に添付されたuser-dataを読み取り、一度だけ適用し、二度と実行されないようにマーカーを書き込む。これらはすべて、あなたが何かを入力する前に発生する。それが要点だ。インスタンスが存在してから設定されるまでの間に、あなたが操作できる隙間はない。

注文する前にドキュメントを検証してください。スキーマチェッカーは、再構築にコストがかかるインデントのミスを検出します:

cloud-init schema --config-file user-data.yaml --annotate

役立つことを行うuser-data

#cloud-config
hostname: edge-01
fqdn: edge-01.example.com
timezone: UTC

users:
  - name: deploy
    groups: [sudo]
    shell: /bin/bash
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3Nza... deploy@laptop

ssh_pwauth: false
disable_root: true

package_update: true
package_upgrade: true
packages:
  - nftables
  - vnstat
  - mtr-tiny

write_files:
  - path: /etc/ssh/sshd_config.d/10-local.conf
    permissions: "0644"
    content: |
      PermitRootLogin no
      PasswordAuthentication no
      AllowUsers deploy

runcmd:
  - [systemctl, enable, --now, nftables]
  - [systemctl, restart, ssh]

最初の行はコメントでも省略可能でもない。#cloud-configがないと、ドキュメントは黙って無視され、インスタンスは何も添付しなかったかのように起動する。

AlmaLinuxでは、groups: [sudo]groups: [wheel]になり、再起動するサービスはsshdになる。それ以外はすべて同一です。

動作の確認

cloud-init status --long
journalctl -u cloud-final -b
less /var/log/cloud-init-output.log

ジャーナルはどの段階で失敗したかを示します。cloud-init-output.logruncmdエントリの実際の出力を保持しており、そこに原因があります。

シークレットを入れない

user-dataはインスタンスの存続期間中、インスタンス内部から読み取り可能なままです:

cloud-init query userdata

そこにあるものはすべて、rootに到達できるプロセスや、ディスクのスナップショットを復元した人なら誰でも利用できます。シークレットを取得するための資格情報をインストールするために使用し、シークレットを運ぶためには使用しないでください。

インスタンスを消費せずにテストする

cloud-init clean --logs --reboot

これにより、マーカー、ログ、キャッシュされたデータソースが削除され、再起動して最初の起動が新しくなります。使い捨てで実行してください。本番環境で実行すると、runcmdが2回目に何をするかを知ることになります。それは通常、最初とは異なります。

どこで止めるか

cloud-initはブートストラップ用であり、マシンが明日どうあるべきかを知りません。実際のツールが引き継げる時点に到達するために使用してください:鍵、ネットワーク、エージェント。そこで止めてください。60行は健全なuser-dataであり、600行は収束方法のない設定管理システムです。

cloud-init query -a
cloud-init query ds.meta_data

インスタンスID、サイトコード、ホスト名、起動時に割り当てられたアドレスはすべてそこにあります。スクリプトがどこかに自分を登録する必要があり、どこで起動したかまだわからない場合に必要です。

準備はできている

都市を選べ。サイズを選べ。コインで支払え。

あなたが誰かに関するフォームも、承認する人間を待つ必要も、確認のための電話もありません。請求が完了すれば、認証情報があなたの受信トレイに届きます。