やりたかった事
Secret Manager に登録してある値を取得したい
公式ドキュメントを探す
公式に書いてある方法は、シークレットを追加してから取得する方法のみ
https://cloud.google.com/secret-manager/docs/reference/libraries
値の取得だけをしたいんじゃ
「GCP Secret Manager Python」等で検索をかけると、取得する方法を書いた記事が出てくる。
ありがたくコードを拝借する。
from google.cloud import secretmanager
def get_secret_text(project_id, secret_name, secret_ver):
client = secretmanager.SecretManagerServiceClient()
name = client.secret_version_path(project_id, secret_name, secret_ver)
response = client.access_secret_version(name)
return response.payload.data.decode("UTF-8")
if __name__ == "__main__":
print(get_secret_text("project_id", "secret_id", "latest"))
動かない
Traceback (most recent call last):
File "/Users/chun/programs/secret.py", line 13, in <module>
print(get_secret_text("project_id", "secret_id", "latest"))
File "/Users/chun/programs/secret.py", line 7, in get_secret_text
response = client.access_secret_version(name)
File "/Users/chun/programs/.venv/lib/python3.9/site-packages/google/cloud/secretmanager_v1/services/secret_manager_service/client.py", line 1136, in access_secret_version
request = service.AccessSecretVersionRequest(request)
File "/Users/chun/programs/.venv/lib/python3.9/site-packages/proto/message.py", line 486, in __init__
raise TypeError(
TypeError: Invalid constructor input for AccessSecretVersionRequest: 'projects/project_id/secrets/secret_id/versions/latest'
google-cloud-secret-manager のドキュメントを見る
access_secret_version の引数がおかしいっぽいので、モジュールのドキュメントを探す
現在の最新(2.4.0)では、第一引数が AccessSecretVersionRequest
というオブジェクトを引き受けるようになっている。
コレは何かよくわからない。
name を渡したいので、
client.access_secret_version(name=name)
とすると、うまく動いた。
バージョン 2.0.0 から、access_secret_version の引数が変更されたようだ。
最終的な動くコード
from google.cloud import secretmanager
def get_secret_text(project_id, secret_name, secret_ver):
client = secretmanager.SecretManagerServiceClient()
name = client.secret_version_path(project_id, secret_name, secret_ver)
response = client.access_secret_version(name=name)
return response.payload.data.decode("UTF-8")
if __name__ == "__main__":
print(get_secret_text("project_id", "secret_id", "latest"))
最後に
Google の公式ドキュメントでは、作成したのちに作成したものを取得する内容しか書いてなかった。
非常に不便だと感じた。
google-cloud-secret-manager のドキュメントは非常に読みづらいし、Basic Usage とか書かれていなかったし、つらい。