0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python×AWS Lambda】os.getenv の使い方

0
Posted at

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コンソールでの環境変数設定

AWS コンソールでは以下の手順で簡単に設定できます。
image.png

設定はKey・Valueで設定する。
例)

Key Value
BASE_URL https://xxxx.atlassian.net
EMAIL 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 に退避する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?