Variabel Lingkungan untuk Agen
os.environ, os.getenv(), dan alasan Anda tidak boleh menanamkan rahasia secara langsung dalam kode sumber.
Variabel Lingkungan untuk Agen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Mengapa Kunci API Tidak Boleh Ditulis Langsung?
Menulis kunci API secara langsung di dalam kode sumber adalah salah satu kesalahan keamanan yang paling umum dan paling mahal. Kunci yang dikomit ke pengendalian versi dapat dilihat oleh semua orang yang memiliki akses ke repository—termasuk kontributor di masa mendatang, sistem CI, dan siapa pun yang menemukan repositori tersebut secara daring.
Masalah Riwayat Git
Meski Anda kemudian menghapus kunci yang ditulis langsung dari kode, kunci tersebut tetap ada dalam riwayat git. Siapa pun yang menggandakan repository lalu menjalankan git log atau git show dapat menemukannya. Kunci tidak boleh pernah masuk ke pengendalian versi.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123def456' # simulate deployment env
OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
print('Key loaded from environment — never hard-coded')os.environ[] vs os.getenv()
Ada dua cara untuk membaca variabel lingkungan. os.environ['KEY'] menimbulkan KeyError jika variabel tidak ada—berguna untuk kunci yang wajib tersedia. os.getenv('KEY', default) mengembalikan nilai bawaan jika variabel tidak ada—berguna untuk pengaturan opsional.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-demo-key'
try:
openai_key = os.environ['OPENAI_API_KEY']
except KeyError:
print('ERROR: OPENAI_API_KEY environment variable is not set!')
raise
model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
timeout = float(os.getenv('AGENT_TIMEOUT', '30'))
log_level = os.getenv('LOG_LEVEL', 'INFO')
max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
print(f'Model: {model}, Timeout: {timeout}s, Log: {log_level}')Memvalidasi Variabel Lingkungan yang Diperlukan Saat Mulai
Praktik terbaiknya adalah memeriksa semua variabel lingkungan yang diperlukan saat mulai, lalu segera gagal dengan pesan kesalahan yang jelas. Dengan demikian, kegagalan saat berjalan yang sulit diawakutu jauh di dalam perulangan agen akibat kunci yang hilang dapat dicegah.
import os
import sys
REQUIRED_VARS = [
'OPENAI_API_KEY',
'SEARCH_API_KEY',
'DATABASE_URL'
]
def check_required_env_vars():
missing = [var for var in REQUIRED_VARS if not os.getenv(var)]
if missing:
print('FATAL: Missing required environment variables:')
for var in missing:
print(f' - {var}')
print('\nSet these in your .env file or shell environment.')
sys.exit(1)
print(f'All {len(REQUIRED_VARS)} required environment variables are set.')
# Call this at the very start of your agent:
# check_required_env_vars()
if __name__ == '__main__':
for var in REQUIRED_VARS:
os.environ.setdefault(var, 'demo-value')
check_required_env_vars()
Prinsip Aplikasi 12-Factor
Metodologi Aplikasi 12-Factor menetapkan praktik terbaik untuk perangkat lunak modern. Faktor III: Simpan konfigurasi di lingkungan. Semua hal yang berubah di antara penerapan (pengembangan, praproduksi, dan produksi)—kunci API, URL, serta penanda fitur—seharusnya berasal dari variabel lingkungan, bukan dari kode.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-demo'
os.environ['SEARCH_API_KEY'] = 'tvly-demo'
os.environ['DATABASE_URL'] = 'postgresql://user:pass@localhost/agentdb'
config = {
'openai_key': os.environ['OPENAI_API_KEY'],
'search_key': os.environ['SEARCH_API_KEY'],
'database_url': os.environ['DATABASE_URL'],
'redis_url': os.getenv('REDIS_URL', 'redis://localhost:6379'),
'enable_caching': os.getenv('ENABLE_CACHING', 'true') == 'true',
'max_results': int(os.getenv('MAX_RESULTS', '10')),
'log_level': os.getenv('LOG_LEVEL', 'INFO'),
'env': os.getenv('ENV', 'development')
}
print('Config loaded from environment:', config['env'])Menetapkan Variabel Lingkungan di Terminal
Tetapkan variabel lingkungan dalam sesi terminal Anda dengan export (Mac/Linux) atau set (Windows). Variabel tersebut tersedia bagi program apa pun yang dijalankan dalam sesi itu.
# Mac/Linux (bash/zsh):
# export OPENAI_API_KEY='sk-proj-your-key-here'
# export AGENT_MODEL='gpt-4o-mini'
# python agent.py
# Windows (Command Prompt):
# set OPENAI_API_KEY=sk-proj-your-key-here
# python agent.py
# Windows (PowerShell):
# $env:OPENAI_API_KEY = 'sk-proj-your-key-here'
# python agent.py
# One-liner (temporary, only for this command):
# OPENAI_API_KEY='sk-proj-...' python agent.py
print('Shell exports set env vars for the current session only')Mencantumkan Variabel yang Diperlukan dalam Komentar Kode
Dokumentasikan variabel lingkungan yang diperlukan agen Anda langsung di dalam kode sumber. Pengembang baru seharusnya dapat membaca bagian awal berkas agen Anda dan mengetahui dengan tepat hal-hal yang perlu dikonfigurasi.
# agent.py
#
# REQUIRED ENVIRONMENT VARIABLES:
# OPENAI_API_KEY OpenAI API key (get from platform.openai.com)
# SEARCH_API_KEY Tavily search API key (get from tavily.com)
#
# OPTIONAL ENVIRONMENT VARIABLES:
# AGENT_MODEL LLM model (default: gpt-4o-mini)
# AGENT_MAX_STEPS Max loop iterations (default: 20)
# LOG_LEVEL Logging verbosity: DEBUG|INFO|WARNING (default: INFO)
# DATABASE_URL PostgreSQL URL (default: none, disables memory storage)
#
# EXAMPLE SETUP:
# cp .env.example .env
# Edit .env with your keys
# python agent.py --query 'Your question'
print('Document required variables at the top of each agent file')Mengakses Konfigurasi Bersarang dengan Aman
Untuk agen dengan banyak opsi konfigurasi, buat kelas konfigurasi yang membaca dan memvalidasi semua variabel lingkungan di satu tempat. Dengan demikian, validasi terpusat dan bagian kode lainnya menjadi lebih rapi.
import os
class AgentConfig:
def __init__(self):
self.openai_key = self._require('OPENAI_API_KEY')
self.search_key = self._require('SEARCH_API_KEY')
self.model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
self.max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
self.log_level = os.getenv('LOG_LEVEL', 'INFO')
self.env = os.getenv('ENV', 'development')
def _require(self, key: str) -> str:
value = os.getenv(key)
if not value:
raise EnvironmentError(
f'Required environment variable {key} is not set. '
f'See .env.example for setup instructions.'
)
return value
# config = AgentConfig() # raises clear error if any key is missing
# client = openai.OpenAI(api_key=config.openai_key)
if __name__ == '__main__':
os.environ.setdefault('OPENAI_API_KEY', 'sk-demo-1234')
os.environ.setdefault('SEARCH_API_KEY', 'demo-search-key')
config = AgentConfig()
print(f'Model: {config.model}, max_steps: {config.max_steps}, env: {config.env}')
Menyamarkan Kunci dalam Catatan Log
Jangan pernah mencatat kunci API mentah. Jika Anda perlu mencatat konfigurasi untuk pengawakutuan, samarkan semua karakter kecuali 4 karakter terakhir. Dengan demikian, Anda dapat memastikan kunci telah dimuat tanpa membocorkannya.
import os
def mask_key(key: str) -> str:
if not key or len(key) < 8:
return '****'
return '*' * (len(key) - 4) + key[-4:]
def log_config_summary(config: dict):
print('Agent configuration:')
for name, value in config.items():
if 'key' in name.lower() or 'secret' in name.lower() or 'token' in name.lower():
print(f' {name}: {mask_key(value)}')
else:
print(f' {name}: {value}')
config = {
'openai_key': os.getenv('OPENAI_API_KEY', ''),
'model': 'gpt-4o-mini',
'max_steps': '20'
}
log_config_summary(config)
# openai_key: ****abcd
# model: gpt-4o-miniVariabel Lingkungan di Docker dan CI
Di Docker, teruskan variabel lingkungan dengan opsi -e atau --env-file. Di GitHub Actions, simpan variabel tersebut sebagai Secrets dan rujuk di dalam YAML alur kerja. Jangan pernah menanamkannya ke dalam citra Docker.
# Docker run with env vars:
# docker run -e OPENAI_API_KEY='sk-...' -e AGENT_MODEL='gpt-4o-mini' myagent:latest
# Docker with an env file:
# docker run --env-file .env myagent:latest
# GitHub Actions workflow (secrets stored in repo settings):
# env:
# OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
# SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }}
# docker-compose.yml:
# services:
# agent:
# image: myagent:latest
# env_file:
# - .env
print('Never bake secrets into Docker images — always inject at runtime')Yang Harus Dilakukan Saat Kunci Terungkap
Jika Anda tidak sengaja mengomit kunci API ke repository publik atau bersama, segera ambil tindakan. Anggap kunci tersebut telah disusupi sejak meninggalkan kendali Anda—bot memindai GitHub untuk mencari kunci dalam hitungan detik setelah sebuah komit.
# Immediate response if a key is exposed:
# 1. REVOKE the key immediately (provider dashboard)
# OpenAI: platform.openai.com/api-keys -> Delete key
# Anthropic: console.anthropic.com -> API Keys
# 2. Generate a new key
# 3. Update your .env file with the new key
# 4. Rotate in all environments (staging, prod)
# Remove from git history (does NOT guarantee removal from forks/clones):
# git filter-branch or git-filter-repo to rewrite history
# Force push to all branches
# Note: Rewriting git history cannot undo exposure
# if others have already cloned or forked the repo
print('Revoke immediately. Do not just remove from code — rotate the key.')Uji Pemahaman: Variabel Lingkungan
Uji pemahaman Anda tentang variabel lingkungan untuk pengelolaan rahasia agen.
Ringkasan: Variabel Lingkungan untuk Agen
Sekarang Anda memahami pendekatan yang benar untuk pengelolaan rahasia agen:
- Jangan pernah menulis kunci API langsung di dalam kode—kunci tersebut akan selamanya masuk ke riwayat git
- Gunakan
os.environ['KEY']untuk variabel yang wajib tersedia danos.getenv('KEY', default)untuk variabel opsional - Validasi semua variabel yang diperlukan saat mulai dengan pesan kesalahan yang jelas
- Dokumentasikan variabel yang diperlukan dalam komentar kode dan
.env.example - Samarkan kunci dalam catatan log—tampilkan hanya 4 karakter terakhir
- Suntikkan rahasia saat berjalan di Docker; gunakan GitHub Secrets dalam CI
- Jika kunci terungkap: cabut terlebih dahulu, lalu ganti di semua tempat
Belajar AI Agents dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Variabel Lingkungan untuk Agen” gratis?
Ya — teks lengkap “Variabel Lingkungan untuk Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Variabel Lingkungan untuk Agen”?
os.environ, os.getenv(), dan alasan Anda tidak boleh menanamkan rahasia secara langsung dalam kode sumber. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Variabel Lingkungan untuk Agen” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Variabel Lingkungan untuk Agen
- File .env dan python-dotenv
- Rotasi Rahasia dan Keamanan
- Profil Konfigurasi untuk Pengembangan dan Produksi