このエントリでは、
AWSのSecretsManagerから情報を取得するアプリケーションを、
ローカルPCで開発する際に便利な、
AWS Secrets Manager emulatorの使い方手順をまとめています。

AWS Secrets Manager emulator
https://github.com/skarpdev/hapi-aws-secrets-manager-emulator

AWS Secrets Manager emulatorの起動から、
Pythonのアプリケーションから情報を取得するまでの流れを記載します。

AWS Secrets Manager emulatorの起動

Dockerを使わない版

Node.jsの環境が必要です、
Nodeのversionは16.13.1以上17未満である必要があります。

nodenv使っているなら、次のような感じで準備します。

nodenv install 16.20.1
nodenv local 16.20.1
npm install -g yarn

Nodeの環境が準備できたら、ダウンロードと依存ライブラリのインストールをします。

wget https://github.com/skarpdev/hapi-aws-secrets-manager-emulator/archive/refs/tags/v0.4.1.tar.gz
tar zxf v0.4.1.tar.gz
cd hapi-aws-secrets-manager-emulator-0.4.1
yarn install

秘匿情報を準備します。

mkdir secrets
echo '{"key": "secret"}' > secrets/mysecret

emulatorを起動します。

export SECRETS_MANAGER_PRELOAD_DIRECTORY=$(pwd)/secrets
yarn start

Dockerを使う(docker compose)版

秘匿情報を準備します。

mkdir secrets-manager-secrets
echo '{"key": "secret"}' > secrets-manager-secrets/mysecret

docker-compose.yamlファイルを準備します。

docker-compose.yaml

version: '3'

services:
  secretsmanager:
    image: skarpdev/aws-secrets-manager-emulator:0.1.0
    volumes:
      - ./secrets-manager-secrets:/secrets
    ports:
      - 3000:3000

起動します。

docker compose up

Pythonのアプリケーションからの情報取得

アプリケーションを用意します。

main.py

import boto3
import json

# 秘匿情報を取得
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId="mysecret")
secret_obj = json.loads(response["SecretString"])
print(secret_obj)

アプリケーションを実行して秘匿情報を取得できているか確認します。

export AWS_ENDPOINT_URL_SECRETS_MANAGER=http://localhost:3000
export AWS_ACCESS_KEY_ID=dummy
export AWS_SECRET_ACCESS_KEY=dummy
export AWS_DEFAULT_REGION=dummy
python main.py

環境変数AWS_ENDPOINT_URL_SECRETS_MANAGERで、
接続するSecretsManagerをローカルのemulatorに変更するのが肝ですね。

以上。