
GoogleCloudのParameterManagerを使ってみる
はじめに
データ事業本部のkobayashiです。クラウド環境でのアプリケーション開発において、設定パラメータの管理は重要な課題です。特に環境ごとに異なる設定やシークレット情報を安全に管理する必要があります。
そこで今回は、Google CloudのParameter Managerについて調べてみたのでまとめます。
Parameter Manager とは?
Parameter Manager は、Google CloudのSecret Managerの拡張機能であり、アプリケーションのデプロイメントに関連する設定パラメータを一元管理するためのサービスになり、Parameter Manager を活用することで、設定の一元管理、バージョン管理、セキュリティ強化が可能になります。
Parameter Manager には、以下のような便利な機能が備わっています。
- データの暗号化
- すべてのパラメータはAES-256で暗号化され、セキュリティが確保される
- バージョン管理
- 各パラメータは複数のバージョンを持つことができ、変更履歴を追跡し、過去のバージョンにロールバックすることも可能
- フォーマットの柔軟性
- パラメータはJSONやYAML形式で保存できるほか、プレーンテキストやカスタムフォーマットも利用できる
- Secret Managerとの統合
- Parameter Manager からSecret Managerに保存されたシークレットを参照することが可能
- リージョナルパラメータ
- リージョンごとに異なるパラメータを管理できるため、クラウド環境の分散運用にも適している
パラメータの作成と管理
それでは、実際にGoogle Cloud CLIとPythonを使ってパラメータを作成してみます。
Parameter Managerではパラメータを作成しその中でバージョンをキーとして設定パラメータを保持する仕組みになっています。
したがって手順としては
- パラメータを作成する
- バージョンとしてdevelop,production用にパラメータを保存する
- それぞれのバージョンのパラメータを取得する
といった流れで進めていきます。
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を使ってパラメータを取り出してみます。
使用するスクリプトは以下です。
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との統合などの機能を活用することで、より安全でスケーラブルなアプリケーション運用が実現できます。
最後まで読んで頂いてありがとうございました。