こんにちは。

VM Managerを利用すれば、インスタンスにインストールするミドルウェアやその設定を便利に管理できるので紹介します。

VM Managerは簡単に使える最強のインスタンス管理ツール

Compute Engineを利用する場合には様々なミドルウェアをインストールすると思います。

  • docker
  • google-fluentd
  • stackdriver-agent

などが代表的でしょうか。

これらをインストールし、その設定ファイルをインスタンスに配置する時に利用できるのがVM Managerの「ゲストポリシー」です。
yamlファイルで構成を定義するのは既存の構成管理ツールと同様ですが、ゲストポリシーは定期的にインスタンスの状態をチェックして定義内容と差分があればそれを是正します。

VM Managerには他にも機能があるのですが、この記事では「ゲストポリシー」に焦点を当てることにします。

前提条件

VM Managerを利用するためには管理対象としたいインスタンスのメタデータに enable-osconfig: TRUE が必要です。

今回はゲストポリシーを利用してubuntuにLoggingエージェントをインストールするので、試してみたい方はVM Manager APIを有効にして、インスタンスにメタデータを設定してください。

必須ではありませんが、ゲストポリシーで対象のインスタンスをフィルタするために、 ラベルとして os: ubuntu も設定してください。

定義ファイル

Loggingエージェントをインストールする際の公式ドキュメントの手順に従うものとします。
すると、Loggingエージェントをインストールする定義は次のようなものになります。

assignment:
  groupLabels:
  - labels:
      os: ubuntu
recipes:
- name: install-logging-agent
  desiredState: INSTALLED
  installSteps:
  - scriptRun:
      script: |-
        #!/bin/bash
        curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
        sudo bash add-logging-agent-repo.sh --also-install
        sudo service google-fluentd restart

ゲストポリシーの設定例のドキュメントにいくつかのサンプルが載っていますが、これらだけでは不十分なことが多いので、筆者はREST APIの仕様から書くべき設定ファイルを逆算しています。

上記の定義ファイルを guest-policy.yamlという名前で保存したとして、適用するには次のコマンドを実行します。

gcloud beta compute os-config guest-policies create \
    install-logging-agent \
    --file=guest-policy.yaml

これだけで、今後起動するものも含めてos: ubuntuラベルがついていて、enable-osconfig: TRUEメタデータが設定されているインスタンス全てに自動でLoggingエージェントがインストールされます。

GCSからファイルをダウンロードすることもできるので、fluentdの設定ファイルをGCSに置いて、インスタンスにはVM Manager経由で設定ファイルを配置することが可能です。

残された問題

GCPに限れば、cloud-initとどのように使い分けるのがいいのかわからない。