You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AWS SAM模板自动读取.env文件中的环境变量?

从环境变量自动读取参数部署AWS SAM模板的方法

方法1:结合环境变量与SAM CLI的--parameter-overrides参数

先加载本地.env文件中的环境变量,再在部署命令中直接引用这些变量,无需手动输入参数。

假设你的.env文件中定义了GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET两个变量,执行以下步骤:

  1. 加载环境变量:
source .env
  1. 执行SAM部署命令,直接引用环境变量:
sam deploy --parameter-overrides "GoogleClientId=$GOOGLE_CLIENT_ID GoogleClientSecret=$GOOGLE_CLIENT_SECRET"

嫌每次敲命令麻烦的话,可以把上述命令写到shell脚本里,比如创建deploy.sh:

#!/bin/bash
source .env
sam deploy --parameter-overrides "GoogleClientId=$GOOGLE_CLIENT_ID GoogleClientSecret=$GOOGLE_CLIENT_SECRET"

给脚本添加执行权限后,直接运行脚本即可完成部署。

方法2:使用SAM配置文件(samconfig.toml)

SAM支持通过配置文件保存部署参数,你可以在配置文件中直接引用环境变量,部署时自动读取。

  1. 生成默认配置文件(若未创建过):
sam deploy --save-config

执行后会自动生成samconfig.toml文件。

  1. 编辑samconfig.toml,在[default.deploy.parameters]节点下添加参数配置:
[default.deploy.parameters]
parameter_overrides = "GoogleClientId=${GOOGLE_CLIENT_ID} GoogleClientSecret=${GOOGLE_CLIENT_SECRET}"
  1. 加载.env后执行部署命令,SAM会自动读取配置文件并替换环境变量:
source .env && sam deploy

方法3:使用AWS Secrets Manager(生产环境推荐)

如果不想依赖本地.env文件,可将密钥存储到AWS Secrets Manager,让SAM模板直接从云端拉取值,无需定义模板参数。

  1. 将Google客户端ID和密钥上传到Secrets Manager:
aws secretsmanager create-secret --name GoogleAuthSecrets --secret-string '{"client_id":"你的Google客户端ID","client_secret":"你的Google客户端密钥"}'
  1. 修改SAM模板,移除原有的Parameters部分,直接用!GetSecretValue获取密钥:
Resources:
  GoogleProvider:
    Type: AWS::Cognito::UserPoolIdentityProvider
    Properties:
      AttributeMapping: {
        "name": "name",
        "family_name": "family_name",
        "email": "email",
        "username": "sub",
      }
      ProviderDetails: {
         "client_id" : !GetAtt GoogleAuthSecrets.SecretString.client_id,
         "client_secret": !GetAtt GoogleAuthSecrets.SecretString.client_secret,
         "authorize_scopes": "openid profile email",
      }
      ProviderName: Google
      ProviderType: Google
      UserPoolId: !Ref ScreenshotUserPool

  GoogleAuthSecrets:
    Type: AWS::SecretsManager::Secret
    Properties:
      SecretId: GoogleAuthSecrets

部署时无需传递任何参数,SAM会直接从Secrets Manager拉取对应值,更适合团队协作和生产环境。


内容的提问来源于stack exchange,提问作者Дмитрий Чумаченко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:33