如何创建没有独立 lambda@edge 函数来源的 CloudFront 分配?

dav*_*ann 7 amazon-cloudfront aws-lambda

我在 AWS Lambda 上有一个小型 Node.js 函数,它返回一个非常简单的动态响应,例如:

exports.handler = async (event, context) => {
    const response = {
        statusCode: 200,
        body: "Hello World " + Math.random(),
    };
    return response;
};
Run Code Online (Sandbox Code Playgroud)

我想通过 lambda@edge 将其部署在公共网络上。为此,我需要将其连接到 CloudFront 发行版。但是,CloudFront 要求我选择一个源。该函数不需要原点。

是否可以在没有 CloudFront 源的情况下部署它,或者我是否需要创建一个虚拟页面,例如 S3 上的静态文件?

Fin*_*sse 4

不要创建虚拟页面。您可以设置任意域名作为分发源。

如果您使用函数作为查看器请求处理程序,则可以设置任何域名,例如dev.null.

如果您使用函数作为源请求处理程序,则域名必须是现有的有效名称,例如example.com. 正如 AWS 支持人员所说,CloudFront 对原始域执行 DNS 有效性检查,但不会向该域发送请求(如果该函数返回响应)。

  • 不要使用“dev.null”。“null”可以随时成为注册 TLD。为了避免将来可能出现的错误,请使用保证将来不会有效的域名,例如以“.invalid”结尾的域名 (RFC 2606)。 (3认同)
  • 我没说它会坏掉。我说的是“避免未来潜在的错误”。使用潜在有效的域名意味着,如果您调整或删除查看器请求处理程序,您可能会意外地最终从不受信任的来源提供响应。即使这个问题的最初提问者不会犯错误,这个答案也会被其他人阅读,所以它应该教授良好的工程实践。 (3认同)