如何为您的 Lambda URL 创建免费的自定义域名 - 分步教程
简介: 2022 年 4 月 6 日,AWS 宣布了 Lambda Function URLs with a built-in HTTPS Endpoints for Single-Function Microservices。新功能允许用户为 Lambda 函数配置 HTTPS 端点,而无需使用任何其他资源,例如 AWS API Gateway 或 Application Load Balanc
简介:
2022 年 4 月 6 日,AWS 宣布了 Lambda Function URLs with a built-in HTTPS Endpoints for Single-Function Microservices。新功能允许用户为 Lambda 函数配置 HTTPS 端点,而无需使用任何其他资源,例如 AWS API Gateway 或 Application Load Balancer。 AWS 将其描述为一种高度可用、可扩展且安全的 HTTPS 服务。新添加的功能受到社区的好评。我称之为,“FaaS 的一小步,Serverless 的一大步”。
发布了几篇文章来讨论和介绍新发布的功能。 Aj Stuyvenberg,AWS 社区构建者,发布了一篇关于 Lambda 函数 URL 的文章,标题为Introducing Lambda Function URLs。另一篇值得一读的文章是Serverless Framework写的。此外,AWS 文档触手可及,让您深入挖掘。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--x8lskGSq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/6ogr4xcr4hslxw8uzozq.png)
话虽如此,众所周知 Lambda 函数 URL 功能不支持开箱即用的自定义域名;因此,我决定编写这个分步教程来指导您如何为您的 Lambda URL 创建一个免费的自定义域名。该解决方案利用 AWS Route 53 托管区域、AWS CloudFront 分配、AWS Certificate Manager 和 Freenom 进行免费的自定义域名注册。此外,Lambda 函数是为了演示目的而托管一个静态页面。重申一下,本教程的目标是提供有关如何为 Lambda 函数 URL 创建自定义域名的分步教程。好了,废话不多说,让我们开始吧。
NOTE:AWS Route 53 托管区域的费用为 0.50 美元/月。
解决方案架构图:
[](https://res.cloudinary.com/practicaldev/image/fetch/s---S7dTOj9---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/ysi562uvswj3fi9iv8lw.png)
教程步骤:
1.从Freenom获取免费域名
- 创建一个 Lambda 函数来托管一个静态页面
3.在AWS Route 53](https://aws.amazon.com/route53/)[创建一个托管区
-
向AWS Certificate Manager申请公共 SSL 证书
-
为 Lambda URL 创建AWS CloudFront分配
-
为 CloudFront 分配创建 Route 53 A 记录并确认自定义域正常运行
-
跳出胜利之舞😉
NOTE: 在整个教程中,除非另有说明,否则保留默认选项。
第一步:从Freenom获取免费域名
1- 导航到Freenom并创建一个免费帐户。
2- 选择注册新域,如下所示。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--gaFLuF76--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/ps47hsgg22gd1pet22lq.png)
3- 检查您选择的域名的可用性。就我而言,它是 lambda.cf,因为它可用且免费 😉。现在,我们已准备好结帐。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--DGodoana--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/d50371v0fhmihbbtpwke.png)
4- 为您选择的域选择期间。它的范围从 1 到 12 个月。然后,单击继续。
5-阅读条款和条件并在完成后选择它。最后点击完成订单注册免费域名。
恭喜。您已成功注册免费域名。
NOTE: 域名注册可能需要一个小时左右才能生效。
2 创建 Lambda 函数来托管静态网页
1- 在 AWS Lambda 控制台中,单击创建函数。
2- 为您的函数命名并为 Runtime 选择 Python 3.9。在 Advanced settings 下,选中 Enable function URL 并为 Auth type 选择 None。然后,单击创建函数。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--_nB7-kgg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/qzbgc5fyorl6uxagv399.png)
3- 如下所示,将以下 Python 代码复制并粘贴到 lambda\function 的主体中,然后单击 Deploy。
#******************************************************************************************
# Author - Omar A Omar
# This lambda function will act as a static web page
#******************************************************************************************
def lambda_handler(event, context):
response = {
"statusCode": 200,
"statusDescription": "200 OK",
"isBase64Encoded": False,
"headers": {
"Content-Type": "text/html; charset=utf-8"
}
}
response['body'] = """
<html>
<head>
<title>Lambda URL</title>
<style>
html, body {
background-color:rgb(22, 30, 43);
margin: 10; padding: 10;
font-family: arial; font-weight: 10; font-size: 1em;
text-align: center;
}
html, h1 {
color: white;
font-family: verdana;
font-size: 150%;
}
html, p {
color: white;
ont-size: 50%;
}
</style>
</head>
<body>
<h1>Hello Friend!</h1>
<p style="color:White;">I'm a static web page running on a Lambda function</p>
<img src="https://acegif.com/wp-content/gifs/banana-82.gif" width="450" />
</body>
</html>
"""
return response
进入全屏模式 退出全屏模式
[](https://res.cloudinary.com/practicaldev/image/fetch/s--voeDaHIU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/0og4ux061f0d75ir55y1.png)
4- 点击 Function URL 打开 lambda 静态页面。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--nrr90_TC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/ot4fvggn6ayjc3mu0kj4.png)
恭喜。现在,您有一个托管静态页面的 Lambda 函数。
注意: 如果您计划实施权重流量转移和安全部署,AWS 建议将别名与您的 Lambda 函数相关联。请参阅宣布 AWS Lambda 函数 URL:用于单功能微服务的内置 HTTPS 终端节点了解更多信息。
3 在 AWS Route 53 中创建托管区域
1- 在 AWS Route 53 控制台中,单击托管区域。然后,单击创建托管区域。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--e75pznRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/l2yk9c5fgrp42rghwczx.png)
2- 添加我们之前从 Freenom 获得的域名。就我而言,它是 lambda.cf。然后,单击创建托管区域。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--MCQaVYIz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/p9aluadu5pb31i3sbw8y.png)
3- 现在,我们需要将名称服务器(类型 NS)复制到 Freenom,以便我们的域名指向这个托管区域。让我们将如下所示的四个名称服务器复制到 Freenom。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--dO4uvHN9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/59cwxgol5gz2l8nqmya9.png)
4- 在 Freenom 上,点击 Manage Domain,然后点击 nameservers。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--nvQufus_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/cty7shzbpbn4g53scsdd.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--V2d6OAhi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/d3d8txz3k2n18j2kqz1u.png)
5- 选择使用自定义名称服务器(在下方输入),然后一次粘贴一个来自 Route 53 托管区域的四个名称服务器。最后,单击 Change Nameservers。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--XvEyX6sC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/o6b25v9ns0n9gehe23r6.png)
NOTE: 不要从我们的 Route 53 托管区域复制名称服务器末尾的 句点。此时,我们完成了 Freenom,您可以注销并关闭选项卡。
4 从 AWS Certificate Manager 请求公共 SSL 证书
1- 在 AWS Certificate Manager 控制台中,单击 Request。保持默认,Request a public certificate 选中,然后单击 Next。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--yXIQNXx1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/lt7eacome91u8bb8lzuw.png)
2- 在完全限定域名下,输入您的域名。然后,单击 Add another name to this certificate 并将星号和句点*.
作为通配符添加到您的域名。
NOTE: 将通配符添加到第二个限定域名允许我们将相同的证书用于其他 CNAME 和 A 记录。如果您不知道 CNAME 是什么并且无法区分 DNS 记录的类型,那么现在是填补知识空白的好时机。我强烈建议您查看AWS 文档了解更多信息。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--98SdKQtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/hvp37v5817hm9clfhspa.png)
无需进行其他更改。点击 Request 提交证书申请。请注意,如下所示,状态为 Pending validation。我们还需要再完成一个步骤,即验证。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--U9GrFQMi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/gk2najqm7gwf2dd3qbwc.png)
3-让我们验证证书。在 Certificate ID 下,单击新创建的证书 ID。我们将被引导至证书状态页面并在 Domains 部分下,单击 Create records in Route 53。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--gl1cW4od--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/xvcrpgd9kfdfctfo572q.png)
4- 我相信我们必须手动添加验证,但 AWS 添加了这个易于使用的功能。现在,我们通过单击创建记录自动将 DNS 记录添加到 Route 53 中的托管区域。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--_SBgPDqi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/r4x5qw5w1xbfo8c3q3c6.png)
NOTE: 如果您在自动添加验证时遇到任何问题,请从 Domains 部分下复制 CNAME 名称和 CNAME 值,并使用它们在我们的托管区域中手动创建验证 CNAME 记录。
5- 要确认验证 CNAME 记录已正确添加,请返回我们的托管区域,我们应该会看到一条 CNAME 记录添加到我们托管区域的 DNS 记录列表中,如下所示。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--wQuu3X_q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/pbv9s00k9yafziekj5fa.png)
NOTE: 如果新添加的验证 CNAME 记录没有出现,请不要忘记刷新托管区域中的记录。此外,AWS 证书管理器中证书的状态 可能需要几分钟才能变为已颁发。因此,休息一下,喝杯咖啡,甚至翻转一下😄
[](https://res.cloudinary.com/practicaldev/image/fetch/s--G7rhY6di--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/v3g598h4rx2rvkdww7sg.png)
5 为 Lambda URL 创建 AWS CloudFront 分配
1- 在 CloudFront 控制台中,单击创建分配。
2- Origin domain 是您的 Lambda 函数 URL。
3- 协议:仅 HTTPS
4- 将原始路径留空。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--a2FzvppD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/80bzal7euxysrsyxmq85.png)
5- 对于 Name,您可以将其更改为您选择的名称,而不是 CloudFront 创建的默认名称。
6- 对于查看器,选择将 HTTP 重定向到 HTTPS。
7- 在设置下,单击添加项目并添加您的域名。就我而言,它是 lambda.cf。
8- 从自定义 SSL 证书 - 可选,让我们从下拉菜单中选择我们的证书。然后,单击创建分发。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Hgyh_Aqn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/0x56kjjyt0jxrv2wtbew.png)
NOTE: 注意,如下图所示,CloudFront 分发可能需要几分钟才能将部署传播到全球;因此,休息一下,喝杯咖啡,甚至翻个身,何乐而不为😄
[](https://res.cloudinary.com/practicaldev/image/fetch/s--b4_1Bc7S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/pmgmodnf6nsgi3g9bdua.png)
9- 部署完成后,单击您的分发 ID。将分发域名复制并粘贴到您的浏览器中。我们应该看到我们的静态页面。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--EXkyRAii--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/yj4kqvunggram91s9uqj.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--uCGGdGFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/3c8nnmi9y8mwccpqy9qi.png)
恭喜。现在,我们使用世界上性能最高、安全且方便的内容交付网络将 Lambda URL 分发到所有 AWS 边缘站点。是的,它是 CloudFront。
6 为 CloudFront 分配创建 Route 53 A 记录
1- 让我们再次前往 Route 53 控制台并添加别名记录。在我们的托管区域中,单击创建记录。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--kcfX16OP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/ut35pm2902ge2ny9h7o0.png)
2- 将记录类型保留为 A 记录。但是,我们需要将 Value 切换为 Alias。然后从下拉菜单中,选择 CloudFront 分配的别名。在这里,我们将从 CloudFront 控制台粘贴我们的分发域名,如下所示。请记住,分发域名应显示为可选选项。这是我们为 CloudFront 中的 Lambda URL 创建的分配。最后,单击创建记录。
注意: 如果您要复制和粘贴 CloudFront 分配域名,请从 URL 中删除协议,如下所示(删除
https://
)。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--UqiJvtkP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/4yfd1ep4a0r6qwd49suk.png)
让我们检查一下 Lambda URL 的自定义域名是否有效。现在是关键时刻🙊 让我们将自定义域名粘贴到浏览器中。等等......等等......我希望你现在正在跳胜利舞🥳
[](https://res.cloudinary.com/practicaldev/image/fetch/s--8NpI6P4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/yv8yeyuj70cci0h4tn65.png)
结论:
我可能在教程中多次祝贺你,但再说一遍也无妨,恭喜💥。
我们已经成功实施了一个解决方案,该解决方案使用 AWS Route 53 托管区域、AWS CloudFront 分配、AWS Certificate Manager 和 Freenom 进行免费的自定义域名注册。利用此解决方案,我们为 Lambda 函数 URL 提供了一个自定义域名。
我希望本教程为您的学习曲线增加价值,我迫不及待地想看看 Lambda 函数 URL 的未来解包。确实很棒。
更多推荐
所有评论(0)