Google Cloud Platform

Puppet 用の GCP リソース管理モジュールをリリース

クラウド ネイティブ アプリケーションを作成する開発者にとって、愛用のツールを使ってプログラムでリソースを管理できることは大きな利点となります。そこで私たちは、Puppet ユーザーを対象に、Puppet のドメイン固有言語(DSL)を使って Google Cloud Platform(GCP)のリソースを効果的に管理するための包括的なモジュール セットをオープンソースとしてリリースしました。

これらの新しいモジュールは、Puppet のオブジェクト コンバージェンス モデルに従っており、お客様は GCP リソースの望ましい状態を定義できます。定義した状態は、Puppet 言語内で私たちのプロバイダーによって直接適用されます。

新モジュールは以下のプロダクトをサポートしています。


新モジュールは、品質などに関する Puppet Engineering チームの厳しい審査基準をクリアして Puppet Approved 認定を受けており、Apache 2.0 ライセンス準拠のオープンソースとして GCP の GitHub リポジトリで公開されています。

また私たちは、すべてのモジュール用に単一の認証メカニズムを提供する統一認証モジュールもリリースしました。

新モジュールは、CentOS、Debian、Ubuntu、Windows などの OS でテストされています。互換性の詳細については、GCP プロダクト別のサポート OS 一覧を参照してください。新モジュールは Puppet Open SourcePuppet Enterprise の両方に対応しています。

新モジュールについてもっと知りたい方や、動いているところを見たい方は、2017 年 9 月 13 日に行われる、私と Puppet の Cody Herriges 氏のウェビナーにお申し込みください

Puppet の威力

Puppet はスクリプト言語ではありません。このことに留意することが重要です。Puppet はオブジェクト コンバージェンス モデルに従っています。開発者はリソースの望ましい状態を定義でき、私たちのプロバイダーが必要な変更を適用してその状態を実現します。

言い換えれば、Puppet では「このリストのコマンドを実行し、私のマシンに Apache をインストールせよ」と指示する形でコードを記述するのではなく、「Apache がインストールされ、構成されていなければならない」と状態を定義する形で記述するのです。

微妙な違いがありますが、Puppet は後者の記述に従って、Apache がインストールされているかどうかを確認し、依存関係をチェックし、バージョンが適切でない場合はアップグレードし、そして最も重要なことに、すべてが良好な状態であれば何もしません。Puppet は OS 間の実装の違いを理解しており、選択されたディストリビューションに応じて適切な処理を行います。

Puppet がオブジェクト コンバージェンス モデルに従っていることにはさまざまなメリットがあります。リソース マニフェストが宣言的になり、さまざまな細部の違いが抽象化され(OS 固有の挙動など)、定義の読み取り、変更、監査が容易になります。次のマニフェストは、わずか 15 行のコードで完全な Google Container Engine クラスタを作成します。

  gauth_credential { 'mycred':
  provider => serviceaccount,
  path     => '/home/nelsona/my_account.json',
  scopes   => ['https://www.googleapis.com/auth/cloud-platform'],
}
gcontainer_cluster { 'myapp-netes':
  ensure             => present,
  initial_node_count => 2,
  node_config        => {
    machine_type => 'n1-standard-4', # we want a 4-core machine for our cluster
    disk_size_gb => 500,             # ... and a lot of disk space
  },
  zone               => 'us-central1-f',
  project            => 'google.com:graphite-playground',
  credential         => 'mycred',
}

個々の GCP モジュールでの Puppet の具体的な使い方については、それぞれの Forge ページを参照してください。

GCP リソース管理のための基本手順

Puppet でGCP のリソース管理を始めるには、適切なモジュールをインストールしてから、以下の基本的な手順に従います。


1. 管理したい GCP リソースの特権を持つサービス アカウントを取得し、使用する GCP サービスそれぞれの API を有効にします

2. Puppet で GCP インフラストラクチャを記述します。

  • gauth_credential リソースを定義します。
  • GCP リソースを定義します。
3.マニフェストを適用します。


これらの手順を詳しく見ていきましょう。

1. モジュールのインストール

Puppet 用の Google モジュールはすべて Puppet Forge で配布されています。私たちは、すべての GCP モジュールを一度にインストールする “バンドル” モジュールも提供しています。バンドル モジュールを使えば、インフラストラクチャに導入するコードの粒度を選択できます。

注 : Google モジュールは、実行されるマシン上での管理者特権も、特別な特権 / スコープも必要としません。一般ユーザーとして、または Puppet マスターに、安全にインストールできます。すべてのクライアントに配布したい場合は、マスターにインストールしてください。

認証モジュールは、Google が公開しているいくつかの gem に依存しています。システム構成に関連するものはすべてそうですが、これらの gem は Puppet 自体を使ってインストールできます。

  $ puppet apply <<EOF
package { [
    'googleauth',
    'google-api-client',
  ]:
    ensure   =< present,
    provider =< gem,
}
EOF

Puppet 用のすべての GCP モジュールを一度にインストールするコマンドは次のとおりです。

  puppet module install google/cloud

また、選択した GCP プロダクトのモジュールだけをインストールすることもできます。

  puppet module install google/gcompute    # Google Compute Engine
puppet module install google/gcontainer  # Google Container Engine
puppet module install google/gdns        # Google Cloud DNS
puppet module install google/gsql        # Google Cloud SQL
puppet module install google/gstorage    # Google Cloud Storage

インストールしたら、モジュールの正常性をチェックします。

  puppet module list

次のように表示されます。

  $ puppet module list
/home/nelsona/.puppetlabs/etc/code/modules
├── google-cloud (v0.1.0)
├── google-gauth (v0.1.0)
├── google-gcompute (v0.1.0)
├── google-gcontainer (v0.1.0)
├── google-gdns (v0.1.0)
├── google-gsql (v0.1.0)
└── google-gstorage (v0.1.0)
/opt/puppetlabs/puppet/modules (no modules installed)

2. サービス アカウント資格情報の取得と API の有効化

最大限の柔軟性とポータビリティを確保するため、GCP リソースに対するすべての認証と認可はサービス アカウント資格情報によって行われなければなりません。サービス アカウントを使えば、ジョブの実行に必要な最小限の特権にとどめることができます。

注 : サービス アカウントはポータブルなので、Puppet を GCP 内で実行する必要はありません。私たちのモジュールは、インターネットに接続できるすべてのコンピュータで動作します。その中には、他のクラウド上のコンピュータも含まれます。たとえば、Travis や Jenkins などの CI/CD システム パイプライン内から、あるいはお客様の開発マシンからデプロイを実行できます。

サービス アカウントの詳細についてはこちらを、その作成および有効化の方法についてはこちらをご覧ください。

また、使用する GCP サービスそれぞれの API を有効にしておきます

3a. 認証メカニズムの定義

サービス アカウントを取得したら、以下のブロックをマニフェストに追加し、サービス アカウントの認証を開始します。リソース タイトル(ここでは 'mycred' )は、credential パラメータ内のオブジェクトで参照されます。

  gauth_credential { 'mycred':
  provider => serviceaccount,
  path     => '/home/nelsona/my_account.json',
  scopes   => ['https://www.googleapis.com/auth/cloud-platform'],
}

認証のセットアップまたはカスタマイズ方法の詳細は、Google 認証モジュールのドキュメントをご覧ください。

3b. リソースの定義

お客様は、私たちがサポートしているタイプのリソースをすべて管理できます。下の例では、Google Container Engine で Kubernetes クラスタを作成します。管理できるすべてのリソースのリストについては、この記事の冒頭に示した各モジュールのドキュメントのリンクからプロダクト別のリストを参照するか、それらのリストをまとめたこちらの一覧をご覧ください。

  gcontainer_cluster { 'myapp-netes':
  ensure             => present,
  initial_node_count => 2,
  node_config        => {
    machine_type => 'n1-standard-4', # we want a 4-core machine for our cluster
    disk_size_gb => 500,             # ... and a lot of disk space
  },
  project            => 'google.com:graphite-playground',
  credential         => 'mycred',
}

4. マニフェストの適用

マニフェストを適用し、マニフェストに記述された状態にリソースを設定するよう Puppet に指示します。たとえば、次のコマンドを実行します。

  puppet apply

なお、マニフェストの適用はスタンドアロンで、または 1 回だけ、あるいはエージェントを使ってバックグラウンドで定期的に行うことができます。

次のステップ

Puppet で GCP リソースを管理する準備ができました。クロスクラウド構成管理のメリットを享受しましょう。私たちはこれからもモジュールを改良するとともに、より多くの Google プロダクトをカバーしていきます。また、こうしたモジュールの作成に使用する技術をオープンソースとして公開する準備も進めていきます。

この取り組みへの質問がある場合は、Puppet on GCP Discussions フォーラムにお越しください。また、puppet-on-gcp@google.com にご連絡ください。

もっと知りたい方はこちらへ


* この投稿は米国時間 8 月 25 日、Software Engineer である Nelson Araujo によって投稿されたもの(投稿はこちら)の抄訳です。

- By Nelson Araujo, Software Engineer