AWS Lambdaを書いているとよく出てくるos.getenv("xxx",xxx)。
本記事では、用途や何者かを整理していく。
- そもそも環境変数って何だっけ?
- os.getenvとos.environの違い
- Lambdaでの具体的な設定手順
- Secrets Managerを使うべきケース
1.環境変数とは?
アプリケーションが外部で設定し、アプリ内から参照する設定値
いまいち分かりづらいですがAPIのURLやタイムアウト時間、実行環境などを設定する。
例)
- APIのURL(
API_URL) - タイムアウト時間(
TIMEOUT_SECONDS) - 実行環境(
ENV,STAGE) - プロジェクトキー(
PROJECT_KEY)
Lambdaでは「環境変数」タブから設定し、Pythonからos.getenvで取得する。
2. Pythonの環境変数取得:os.getenv / os.environ
import os
value = os.getenv("KEY") # 未定義 → None
value = os.getenv("KEY", "default") # 未定義 → "default"
value = os.environ["KEY"] # 未定義 → KeyError
違いのまとめ
| 方法 | 未定義時 | 用途 |
|---|---|---|
os.getenv("KEY") |
None | 無くても動く値 |
os.getenv("KEY", "default") |
"default" | デフォルト値で動かしたい |
os.environ["KEY] |
KeyErrorで落ちる | 絶対に必要な設定 |
3. Lambdaコンソールでの環境変数設定
設定はKey・Valueで設定する。
例)
| Key | Value |
|---|---|
| BASE_URL | https://xxxx.atlassian.net |
| user@example.com |
値はすべて 文字列 として扱われる。
数値が必要なら int(os.getenv("TIMEOUT")) のように変換が必要です。
4. Lambda コード側の使い方例
import os
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 必須設定(未設定なら例外)
BASE_URL = os.environ["BASE_URL"]
EMAIL = os.environ["EMAIL"]
# あれば上書き、無ければ既定値
PROJECT_KEY = os.getenv("PROJECT_KEY", "TEST")
def lambda_handler(event, context):
logger.info(f"BASE_URL = {BASE_URL}")
return {"statusCode": 200, "body": json.dumps({"ok": True})}
5.実務っぽいやつ:必須環境変数チェック関数
import os
class ConfigError(Exception):
pass
def require_env(key: str) -> str:
"""必須の環境変数。なければ例外を出す。"""
value = os.getenv(key)
if not value:
raise ConfigError(f"Required env var '{key}' is not set")
return value
BASE_URL = require_env("BASE_URL")
EMAIL = require_env("EMAIL")
こうしておくと、どのキーが必須かが明確になり、起動時にすぐエラー検知できます。
6. Secrets Managerとの比較
環境変数を扱う際にSecrets Managerを利用する場合もある。違いについて整理していく
<比較表>
| 項目 | Lambda環境変数 | Secrets Manager |
|---|---|---|
| 主な用途 | 非機密の設定値 | 機密情報(パスワード/APIキー) |
| セキュリティ | 少し弱い (編集画面で見える) |
◎ 強い(暗号化・アクセス制御) |
| 値の取得 | 速い(常にメモリにある) | 少し遅い(API呼び出し) |
| ローテーション対応 | ✕ 手動で変更 | ◎ 自動ローテーション可能 |
| 値のサイズ制限 | 約 4KB | 約 64KB |
| 料金 | 無料 | 有料 |
| 推奨シーン | URL・フラグなど(非機密) | APIキー・DBパスワードなど |
7. まとめ
-
os.getenvは Lambda の環境変数を読むための標準的な方法 - 必須値は
os.environ["KEY"]かrequire_env()を使う - Lambda コンソールから設定すればすぐ参照可能
- セキュリティの高い値は Secrets Manager に退避する
