AWS Systems Manager Parameter Storeは、設定データや機密情報(APIキーやパスワードなど)を安全に管理するためのサービスです。本記事では、Pythonを使ってParameter Storeから値を取得する汎用的な方法を解説します。
目次
必要な準備
- Python環境の構築
PythonとAWS SDK for Python(Boto3)がインストールされている必要があります。以下のコマンドでBoto3をインストールします。
pip install boto3
- AWSの認証情報と権限
プログラムを実行する環境に、適切なAWS認証情報が設定されている必要があります(~/.aws/credentials
または環境変数)。また、以下の権限が必要です。
ssm:GetParameter
- 暗号化された値を取得する場合は、KMSキーの復号化権限(
kms:Decrypt
)
- Parameter Storeへの登録
Parameter Storeに取得したい値を登録します。例として、以下のコマンドで値を登録できます。
aws ssm put-parameter \
--name "/example/parameter" \
--value "my-secret-value" \
--type "SecureString"
汎用的なPythonコードスニペット
以下のコードは、Parameter Storeから値を取得するための汎用的な関数です。
import boto3
from botocore.exceptions import BotoCoreError, ClientError
def fetch_parameter(parameter_name, with_decryption=True):
"""
AWS Systems Manager Parameter Storeからパラメータを取得する汎用関数
Args:
parameter_name (str): 取得するパラメータの名前
with_decryption (bool): 暗号化された値を復号化するかどうか
Returns:
str: パラメータの値(取得成功時)
None: エラー時
"""
# SSMクライアントの初期化
ssm_client = boto3.client('ssm')
try:
# パラメータの取得
response = ssm_client.get_parameter(
Name=parameter_name,
WithDecryption=with_decryption
)
return response['Parameter']['Value']
except (BotoCoreError, ClientError) as e:
print(f"Error fetching parameter '{parameter_name}': {e}")
return None
# 使用例
if __name__ == "__main__":
parameter_name = "/example/parameter"
value = fetch_parameter(parameter_name)
if value:
print(f"Parameter value: {value}")
else:
print("Failed to fetch the parameter.")
コードの説明
fetch_parameter
関数の引数
parameter_name
Parameter Storeで登録されているパラメータ名を指定します。with_decryption
暗号化されたパラメータを復号化するかを指定します。デフォルトはTrue
(復号化する)です。
例外処理
BotoCoreError
およびClientError
は、AWSクライアントでよく発生する例外です。適切にキャッチしてエラー内容をログに記録します。
実行例
上記のコードを実行すると、Parameter Storeに登録されたパラメータの値が出力されます。
注意点
- 認証情報の設定
AWS CLIの設定が済んでいない場合、以下のコマンドで設定を行います。
aws configure
- 暗号化パラメータの権限
暗号化されたパラメータを取得するには、Parameter Storeで使用されているKMSキーに対するkms:Decrypt
権限が必要です。 - セキュリティ
パラメータ名や値をログに直接記録しないようにしてください(特に値が機密情報の場合)。
応用例
この汎用関数を利用して、複数のパラメータをまとめて取得する場合や、環境変数として設定する場合のコード例を示します。
複数パラメータの取得
parameter_names = ["/example/param1", "/example/param2", "/example/param3"]
values = {name: fetch_parameter(name) for name in parameter_names}
for name, value in values.items():
if value:
print(f"{name}: {value}")
else:
print(f"Failed to fetch {name}")
環境変数への設定
import os
parameter_name = "/example/parameter"
value = fetch_parameter(parameter_name)
if value:
os.environ["MY_SECRET"] = value
print("Environment variable set successfully.")
else:
print("Failed to set environment variable.")
まとめ
AWS Systems Manager Parameter Storeは、機密情報を安全に管理するための強力なツールです。Pythonでの利用もBoto3を使えば簡単に実現できます。このコードスニペットを活用して、セキュアで柔軟なアプリケーション構築を目指してください。