GoogleCloudのParameterManagerを使ってみる

GoogleCloudのParameterManagerを使ってみる

Clock Icon2025.03.19

はじめに

データ事業本部のkobayashiです。クラウド環境でのアプリケーション開発において、設定パラメータの管理は重要な課題です。特に環境ごとに異なる設定やシークレット情報を安全に管理する必要があります。
そこで今回は、Google CloudのParameter Managerについて調べてみたのでまとめます。

https://cloud.google.com/release-notes#461a0087

Parameter Manager とは?

Parameter Manager は、Google CloudのSecret Managerの拡張機能であり、アプリケーションのデプロイメントに関連する設定パラメータを一元管理するためのサービスになり、Parameter Manager を活用することで、設定の一元管理、バージョン管理、セキュリティ強化が可能になります。
Parameter Manager には、以下のような便利な機能が備わっています。

  • データの暗号化
    • すべてのパラメータはAES-256で暗号化され、セキュリティが確保される
  • バージョン管理
    • 各パラメータは複数のバージョンを持つことができ、変更履歴を追跡し、過去のバージョンにロールバックすることも可能
  • フォーマットの柔軟性
    • パラメータはJSONやYAML形式で保存できるほか、プレーンテキストやカスタムフォーマットも利用できる
  • Secret Managerとの統合
    • Parameter Manager からSecret Managerに保存されたシークレットを参照することが可能
  • リージョナルパラメータ
    • リージョンごとに異なるパラメータを管理できるため、クラウド環境の分散運用にも適している

https://cloud.google.com/secret-manager/parameter-manager/docs/overview

パラメータの作成と管理

それでは、実際にGoogle Cloud CLIとPythonを使ってパラメータを作成してみます。
Parameter Managerではパラメータを作成しその中でバージョンをキーとして設定パラメータを保持する仕組みになっています。
したがって手順としては

  1. パラメータを作成する
  2. バージョンとしてdevelop,production用にパラメータを保存する
  3. それぞれのバージョンのパラメータを取得する

といった流れで進めていきます。
Parameter ManagerはJSON,YAML,テキストの3つの形式で保存できます。これはパラメータ作成する段階で決まります。今回はJSONとテキストを試してみたいと思います。

1. パラメータを作成する

$ gcloud beta parametermanager parameters create param_store_test_json --location=global --parameter-format=json
Created parameter [param_store_test_json].
$ gcloud beta parametermanager parameters createparam_store_test_unfromatted --location=global --parameter-format=UNFORMATTED
Created parameter [param_store_test_unfromatted].

このコマンドにより、JSON形式とテキスト形式ののパラメータが作成されます。

2. バージョンを作成する

$ gcloud beta parametermanager parameters versions create develop --parameter=param_store_test_json --location=global --payload-data='{         "database": "myapp_test",         "username": "test_user",         "password": "test_password",         "host": "dev.example.com",         "port": 5432     }'
Created parameterVersion [develop].

$ gcloud beta parametermanager parameters versions create develop --parameter=param_store_test_unfromatted --location=global --payload-data="develop_password"
Created parameterVersion [develop].
$ gcloud beta parametermanager parameters versions create production --parameter=param_store_test_unfromatted --location=global --payload-data="production_password"
Created parameterVersion [production].

環境ごとに異なるパラメータをバージョンとして管理することで、開発・本番環境の設定を簡単に切り替えることができます。

3. パラメータの取得

作成したパラメータを取得するにはコンソール、gcloudコマンド、RESTで取得することができます。gcloudコマンド、RESTのレスポンスはBase64でエンコードされた値が返ってくるので取り回しを考えてPythonでRESTを使ってパラメータを取り出してみます。
使用するスクリプトは以下です。

get_param.py
import requests
import google.auth
import google.auth.transport.requests

import base64
import json

# サービスアカウントの認証情報を取得
credentials, project = google.auth.default(
    scopes=["https://www.googleapis.com/auth/cloud-platform"]
)

# 認証リクエストの準備
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)

# アクセストークンを取得
headers = {
    "Authorization": f"Bearer {credentials.token}",
}

# JSON形式のパラメータを取得
param_name = "param_store_test_json"
version = "develop"
response = requests.get(
    f"https://parametermanager.googleapis.com/v1/projects/{project}/locations/global/parameters/{param_name}/versions/{version}:render",
    headers=headers,
)
ret = response.json()
decoded_bytes = base64.b64decode(ret["payload"]["data"]).decode("utf-8")
config_dict = json.loads(decoded_bytes)
print("JSON形式のパラメータを取得")
print(config_dict)

# テキスト形式のパラメータを取得
# ## developバージョンのパラメータを取得
param_name = "param_store_test_unfromatted"
version = "develop"

response = requests.get(
    f"https://parametermanager.googleapis.com/v1/projects/{project}/locations/global/parameters/{param_name}/versions/{version}:render",
    headers=headers,
)
ret = response.json()
decoded_bytes = base64.b64decode(ret["payload"]["data"]).decode("utf-8")
print(f"テキスト形式のパラメータを取得 {version}")
print(decoded_bytes)

# ## productionバージョンのパラメータを取得
version = "production"
response = requests.get(
    f"https://parametermanager.googleapis.com/v1/projects/{project}/locations/global/parameters/{param_name}/versions/{version}:render",
    headers=headers,
)
ret = response.json()
decoded_bytes = base64.b64decode(ret["payload"]["data"]).decode("utf-8")
print(f"テキスト形式のパラメータを取得 {version}")
print(decoded_bytes)

このスクリプトを実行してみます。

$ python get_param.py 
JSON形式のパラメータを取得
{'database': 'myapp_test', 'username': 'test_user', 'password': 'test_password', 'host': 'dev.example.com', 'port': 5432}

テキスト形式のパラメータを取得 develop
develop_password

テキスト形式のパラメータを取得 production
production_password

するとパラメータとして設定した値が取得できます。

まとめ

今回は、Google CloudのParameter Manager について紹介しました。
Parameter Manager を活用することで、設定の一元管理、セキュリティの強化、環境ごとの設定の簡素化が可能になります。
特に、バージョン管理やSecret Managerとの統合などの機能を活用することで、より安全でスケーラブルなアプリケーション運用が実現できます。

最後まで読んで頂いてありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.