📝
AWS Secrets Manager のキャッシュコンポーネント aws-secretsmanager-caching を使ってみた
Python とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する - AWS Secrets Manager
シークレットを取得するときに、Secrets Manager の Python ベースのキャッシュコンポーネントを使用して、将来使用するためにキャッシュすることができます。
Python 用のキャッシュコンポーネントを使ってみました。
1. シークレットの作成
以下の設定で作成しました。
- シークレット名: mysecret
- シークレットタイプ: その他のシークレットのタイプ
- シークレットの値
- シークレットキー: username
- シークレットの値: testuser
上記以外はデフォルト設定です。

2. EC2 インスタンスの作成
以下の設定で作成しました。
- AMI: Amazon Linux 2023
- ネットワーク
- デフォルト VPC
- デフォルトサブネット
- セキュリティグループ: インバウンド、アウトバウンドすべて開放
- キーペア: なし
- インスタンスコネクトで接続します
- IAM インスタンスプロファイル: AdministratorAccess 権限を付与した IAM ロール
3. EC2 インスタンス内での設定
インスタンスコネクトで SSH 接続してコマンドを実行します。
$ sudo yum update -y
$ sudo yum install -y python3 python3-pip
$ pip3 install boto3 aws-secretsmanager-caching
$ cat > test_secrets_cache.py << 'EOF'
import botocore.session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig
import time
client = botocore.session.get_session().create_client('secretsmanager', region_name='ap-northeast-1')
cache_config = SecretCacheConfig()
cache = SecretCache(config=cache_config, client=client)
def get_secret_with_cache(secret_name, run_number):
start_time = time.time()
try:
secret = cache.get_secret_string(secret_name)
end_time = time.time()
execution_time = (end_time - start_time) * 1000
print(f"実行 {run_number}: 成功 | 実行時間: {execution_time:.2f}ms")
return execution_time
except Exception as e:
print(f"実行 {run_number}: エラー | {str(e)}")
return None
if __name__ == "__main__":
secret_name = 'mysecret'
print("=" * 50)
print("Secrets Manager キャッシュ動作確認")
print("=" * 50)
print(f"シークレット名: {secret_name}\n")
for i in range(1, 6):
get_secret_with_cache(secret_name, i)
time.sleep(0.5) # 0.5 秒待機
print("\n" + "=" * 50)
print("※ 1 回目は遅く、2 回目以降は速いはずです")
print("=" * 50)
EOF
4. 動作確認
$ python3 test_secrets_cache.py
==================================================
Secrets Manager キャッシュ動作確認
==================================================
シークレット名: mysecret
実行 1: 成功 | 実行時間: 99.39ms
実行 2: 成功 | 実行時間: 0.22ms
実行 3: 成功 | 実行時間: 0.22ms
実行 4: 成功 | 実行時間: 0.22ms
実行 5: 成功 | 実行時間: 0.23ms
==================================================
※ 1 回目は遅く、2 回目以降は速いはずです
==================================================
2 回目以降は実行時間が短くなっていることを確認できました。
また、CloudTrail には 1 回のみ GetSecretValue が記録されていたため、2 回目以降はキャッシュが利用されていることも確認できました。
まとめ
今回は AWS Secrets Manager のキャッシュコンポーネント aws-secretsmanager-caching を使ってみました。
どなたかの参考になれば幸いです。
Discussion