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

如何在CDK中为CloudFront Function添加环境变量?

解决方案

CloudFront Function 原生不支持设置环境变量,属于AWS官方的产品限制,你可以通过CDK动态处理函数代码的方式实现类似效果,常用方案如下:

方案1:占位符替换

先在你的JS函数代码中用特殊标记作为变量占位符,再在CDK中读取文件替换占位符后生成函数:

  1. 修改lambda/function.js,添加占位符:
function handler(event) {
  // 此处的%%REDIRECT_TARGET%%就是待替换的占位符
  const REDIRECT_TARGET = '%%REDIRECT_TARGET%%';
  const response = {
    statusCode: 302,
    statusDescription: 'Found',
    headers: {
      'location': { value: REDIRECT_TARGET }
    }
  };
  return response;
}
  1. 修改CDK代码,替换占位符后创建函数:
from aws_cdk import aws_cloudfront as cloudfront

# 读取原JS代码
with open("lambda/function.js", "r", encoding="utf-8") as f:
    raw_js = f.read()

# 替换所有占位符为实际值
processed_js = raw_js.replace("%%REDIRECT_TARGET%%", "https://your-target-domain.com/path")

# 创建CloudFront Function
func = cloudfront.Function(
    self,
    "redirect",
    code=cloudfront.FunctionCode.from_inline(processed_js),
)

方案2:动态注入配置对象

如果需要传入的变量较多,可以直接把所有配置拼成JS对象注入到代码开头,无需修改原JS文件的占位符:

import json
from aws_cdk import aws_cloudfront as cloudfront

# 定义所有需要传入的配置
env_config = {
    "REDIRECT_TARGET": "https://your-target-domain.com/path",
    "ALLOWED_DOMAIN": "https://your-origin-domain.com",
    "MAX_AGE": 86400
}

# 生成JS配置代码,拼接到原JS代码最前面
config_snippet = f"const ENV = {json.dumps(env_config)};"
with open("lambda/function.js", "r", encoding="utf-8") as f:
    raw_js = f.read()
full_js = config_snippet + raw_js

# 创建函数
func = cloudfront.Function(
    self,
    "redirect",
    code=cloudfront.FunctionCode.from_inline(full_js),
)

之后你可以在JS代码中直接读取ENV对象的属性使用:

function handler(event) {
  const redirectTarget = ENV.REDIRECT_TARGET;
  // 后续业务逻辑
}

注意事项

CloudFront Function有最大10KB的代码体积限制,注入配置时注意不要超出容量上限。

内容的提问来源于stack exchange,提问作者DenCowboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:39:02