MENU

AWS Systems Manager Parameter Storeからパラメータを取得する方法(Python + Boto3)

AWS Systems Manager Parameter Storeは、設定データや機密情報(APIキーやパスワードなど)を安全に管理するためのサービスです。本記事では、Pythonを使ってParameter Storeから値を取得する汎用的な方法を解説します。

目次

必要な準備

  1. Python環境の構築
    PythonとAWS SDK for Python(Boto3)がインストールされている必要があります。以下のコマンドでBoto3をインストールします。
   pip install boto3
  1. AWSの認証情報と権限
    プログラムを実行する環境に、適切なAWS認証情報が設定されている必要があります(~/.aws/credentials または環境変数)。また、以下の権限が必要です。
  • ssm:GetParameter
  • 暗号化された値を取得する場合は、KMSキーの復号化権限(kms:Decrypt
  1. 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に登録されたパラメータの値が出力されます。


注意点

  1. 認証情報の設定
    AWS CLIの設定が済んでいない場合、以下のコマンドで設定を行います。
   aws configure
  1. 暗号化パラメータの権限
    暗号化されたパラメータを取得するには、Parameter Storeで使用されているKMSキーに対するkms:Decrypt権限が必要です。
  2. セキュリティ
    パラメータ名や値をログに直接記録しないようにしてください(特に値が機密情報の場合)。

応用例

この汎用関数を利用して、複数のパラメータをまとめて取得する場合や、環境変数として設定する場合のコード例を示します。

複数パラメータの取得

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を使えば簡単に実現できます。このコードスニペットを活用して、セキュアで柔軟なアプリケーション構築を目指してください。

目次