はじめに

こんにちは! Uniforceのバックエンド開発課の鈴木響です!

今回はローカル開発環境でAWS Secrets Managerへのアクセス時に処理が進まず、最終的にタイムアウトになる問題に遭遇した時のお話です。

この記事では、問題の詳細な状況と解決までの過程を共有します。

問題の詳細

症状

以下のPythonコードを実行すると、get_secret_valueの呼び出し時に処理が停止し、最終的にタイムアウトが発生しました。

import boto3

session = boto3.session.Session()
client = session.client(service_name="secretsmanager", region_name="ap-northeast-1")
response = client.get_secret_value(SecretId="test_secret")
# ここで処理が進まなくなる

特徴

  • 従来の認証方式(AWS CLI の IAM ユーザー認証情報)では成功
    従来のAWS CLI の IAM ユーザー認証情報を用いた認証ではSecrets Managerへのアクセスが正常に成功していましたが、AWS SSOを利用する場合に最終的にタイムアウトになる問題が発生しました。
  • ローカル開発環境でのみ発生 本番環境や他の開発者の環境では問題が発生しない。
  • エラーメッセージが表示されない 処理が進まなくなるだけで、明確なエラーメッセージは出力されない(最終的にはタイムアウトエラーが表示される)。
  • AWS CLIでの直接アクセスは成功 AWS CLIを使用した場合、ローカルで問題なくSecrets Managerにアクセスできる。
  • 他の開発者環境では問題なし 他のメンバーの環境では同様のコードが正常に動作する。

問題の切り分け

  1. AWS CLIで同じ操作が可能か確認
$ aws secretsmanager get-secret-value \\
--secret-id test_secret \\
--region ap-northeast-1

結果:正常に動作することを確認

  1. AWS認証状態の確認
$ aws sts get-caller-identity

結果:正常に動作することを確認

バージョンの確認

問題解決のため、各ツールのバージョンを以下のコマンドで確認しました。

SAM CLIバージョン

$ sam --version
SAM CLI, version 1.120.0

AWS CLIバージョン

$ aws --version
aws-cli/2.17.0 Python/3.11.8 Windows/10 exe/AMD64

Pythonライブラリのバージョン

$ pip list | grep boto
boto3 1.36.10
botocore 1.36.10

解決手順

他の開発者環境との比較から、SAM CLIの古いバージョンが原因と推測し、以下の手順で更新を実施しました。

  1. SAM CLIのアンインストール(AWS SAM CLI のアンインストール)
    • Windowsの「プログラムの追加と削除」を開く
    • 「AWS SAM Command Line Interface」を選択
    • 「アンインストール」を実行
  2. 最新版のインストール(AWS SAM CLI のインストール)
    • AWS SAM CLI公式ページ から最新版をダウンロード
    • ダウンロードしたインストーラを実行し、画面の指示に従ってインストール
  3. AWS SSOの再認証
    $ aws sso login

更新後のバージョンの確認

$ sam --version
SAM CLI, version 1.132.0

SAM CLIの更新後、問題は解決しました。

まとめ

ローカル開発環境でのAWS Secrets Managerアクセス時のタイムアウト問題は、SAM CLIのバージョンアップにより解決しました。

この経験から、開発ツールの定期的なアップデートとチーム内での開発環境の標準化が重要であることを再認識しました。

また、エラーメッセージが明確でない場合でも、環境差分の確認が問題解決の糸口となる可能性があることを学びました。

参考リンク

コーポレートガバナンスのことならUniforceにご相談ください。