Secret은 Modal에서 실행하는 이미지(컨테이너) 안에서 사용할 환경변수를 제공합니다. API 토큰의 키 값과 같은 경우 외부에 노출되지 않아야 하는 민감한 정보이기 때문에, Secret을 이용해 안전하게 관리할 수 있습니다.
Secret 등록하기
대시보드를 통해서
Modal 대시보드를 연 뒤 Secrets 탭으로 이동합니다. 처음 상태라면 아래와 같이 화연에 보여집니다.

Get started 또는 Create new secret으로 새로운 Secret을 생성해줍니다. 아래와 같이 몇 가지의 선택지들이 나오는데, 간단하게 Custom을 선택합니다.

Name에 전체 Secret 이름을 입력한 후, Enrionment variables에서 환경 변수들을 등록해주면 됩니다. 여기서는 r2-credentials라는 이름의 Secret을 생성했고, 그 안에 R2-ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_ENDPOINT_URL 세 가지의 환경 변수를 등록했습니다.

로컬의 환경변수를 사용
로컬 환경에서 정의한 환경변수를 Modal에서도 사용하려고 한다면 from_dict( ) 메소드를 사용하면 됩니다.
# 'LOCAL_FOO'라는 로컬 환경변수를 'FOO'라는 Modal Secret 환경변수로 등록했습니다.
if modal.is_local():
local_secret = modal.Secret.from_dict({"FOO": os.environ["LOCAL_FOO"]})
else:
local_secret = modal.Secret.from_dict({})
Secret 사용하기
Secret은 주로 Function의 인자로 넘겨줍니다. Secret의 from_name( ) 메소드를 이용하면 우리가 원하는 이름의 Secret(이 경우에는 r2-credentials라는 이름의 Secret)을 function에서 사용할 수 있습니다.
@app.function(secrets=[modal.Secret.from_name("r2-credentials")])
def main():
# ...
Secret이 가지는 환경변수를 사용할 때는 일반적인 환경변수를 사용할 때와 동일하게 호출하면 됩니다.
r2 = boto3.client(
"s3",
endpoint_url=os.environ["R2_ENDPOINT_URL"],
aws_access_key_id=os.environ["R2_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["R2_SECRET_ACCESS_KEY"]
)
메소드
| 메소드 | 기능 | 반환값 |
| hydrate( ) | 로컬 환경의 객체와 Modal 서버의 객체를 동기화 | |
| name( ) | 이름 반환 | str |
| from_dict( ) | { 이름 : 값 } 형식으로 새로운 Secret 등록 | _Secret |
| from_local_environ( ) | 로컬 환경변수로부터 새로운 Secret 등록 | _Secret |
| from_dotenv( ) | .env 파일로부터 새로운 Secret 등록 | _Secret |
| from_name( ) | Secret이름으로부터 새로운 Secret 등록 | _Secret |
| info( ) | 정보 반환 | SecretInfo |
hydrate( )
def hydrate(self, client: Optional[_Client] = None) -> Self:
name( )
@property
def name(self) -> Optional[str]:
from_dict( )
@staticmethod
def from_dict(
env_dict: dict[
str, Optional[str]
] = {}, # dict of entries to be inserted as environment variables in functions using the secret
) -> "_Secret":
from_local_environ( )
@staticmethod
def from_local_environ(
env_keys: list[str], # list of local env vars to be included for remote execution
) -> "_Secret":
from_dotenv( )
@staticmethod
def from_dotenv(
path=None,
*,
filename=".env",
client: Optional[_Client] = None
) -> "_Secret":
path가 주어지지 않으면, 현재 경로부터 시작해서 .env 파일을 자동으로 탐색합니다.
from_name( )
@staticmethod
def from_name(
name: str,
*,
environment_name: Optional[str] = None,
required_keys: list[
str
] = [], # Optionally, a list of required environment variables (will be asserted server-side)
client: Optional[_Client] = None,
) -> "_Secret":
이름은 반드시 Modal 대시보드에 등록되어 있어야 합니다.
info( )
@live_method
def info(self) -> SecretInfo:'ML' 카테고리의 다른 글
| [Modal] 02. Function (1) | 2025.12.31 |
|---|---|
| [Modal] 01. App (1) | 2025.12.30 |
| [Modal] App, Function, Entrypoint (0) | 2025.12.29 |
| [Modal] Modal에 대하여 (0) | 2025.12.28 |
| [GAN] Style 적대적 생성 신경망 (StyleGAN) (0) | 2023.04.28 |
