LoginSignup
1
0

More than 3 years have passed since last update.

PackerでCompute Engineのイメージを焼くときはOSログインを無効化する

Posted at

これはなんですか

  • PackerでCompute Engineのイメージを焼いてる時にOSログインで詰まったので備忘としてメモしておきます。
  • コンテナ全盛の時代にイメージ焼いてます。

Packer と OSログイン

PackerとGCEのOSログイン設定について軽く説明する。

Packer

各種イメージを焼いてくれるすごいやつ。GCP向けには、Compute Engine向けのイメージを作成するためのBuilderが用意されている。

具体的な動作は次の通り:

  1. イメージ作成用のインスタンスを所定のネットワーク上に作成する
  2. インスタンスに接続し、イメージを焼くための各種操作を行う
  3. イメージを作成する
  4. インスタンスを削除する

JSONファイルで設定を記述し、packer build コマンドを実行すると、上記の順でイメージが作成される。設定は主に「何のイメージを作るか」を定義する Builder と「どのようにイメージ用インスタンスを構成するか」を定義する複数の Provisioner からなる。

OSログイン

VMインスタンスへのSSH接続、特権昇格をCloud IAMで制御するための機能。GCP的にはGCEを使う際の推奨設定らしい。設定方法はメタデータに enable-oslogin: TRUE を設定するだけ。

PackerはOSログインに対応していない

以下のIssue参照。
https://github.com/hashicorp/packer/issues/7663

回避方法

イメージ作成用のインスタンスのメタデータに enable-oslogin: FALSE を設定する。GCEのメタデータはプロジェクト単位、インスタンス単位で設定でき、同じキーについてはインスタンスの設定が優先される。そのため、Packer の Compute Engine Builder にメタデータを設定することで、プロジェクト単位でOSログインが設定されている状況でもイメージが作成できるようになる。

image.json
{
    "builders": [
        {
            "type": "googlecompute",
            "account_file": "{{user `account_file_path`}}",
            "project_id": "{{user `project_id`}}",
            "source_image_family": "{{user `source_image_family`}}",
            "ssh_username": "packer",
            "zone": "asia-northeast1-a",
            "image_family": "{{user `image_family`}}",
            "image_name": "{{user `image_family`}}-{{timestamp}}",
            "metadata": {
                "enable-oslogin": "FALSE"
            }
        }
    ],
    "provisioners": [
        ...
    ]
}

重要なのは以下の metadata 設定。

            "metadata": {
                "enable-oslogin": "FALSE"
            }

このブロックの中に、インスタンスのカスタムメタデータを記述する。

まとめ

  • OSログインが有効な環境ではPackerが使えない。
  • インスタンス単位でOSログインを無効化することで回避した。
  • しばらくはおまじない感覚で入れておくのが良さそう
    • そもそもPacker使う人がどれくらいいるか問題はあるが。。。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0