我可以将 AWS Lambda 站点移动到私有域吗?
Can I move an AWS Lambda site to a private domain?
我正在使用 Zappa 部署 Flask 应用程序。它有效(site)。显然,我不想让它留在 aws 域后面,而是将其放在我的个人域中。
我正在搜索的所有内容都在谈论使用 S3 和 API 网关托管 Lambda 站点 。有没有办法只将我的小应用程序部署到自定义域?
编辑
根据@mislav 的回答,我能够让我的 google 域与 AWS 一起使用。但是当我尝试按 运行 zappa certify
完成时,我收到有关现有域的错误消息:
raise error_class(parsed_response, operation_name)
botocore.errorfactory.BadRequestException: An error occurred
(BadRequestException) when calling the CreateDomainName operation: The
domain name you provided already exists.
我的zappa_settings.json
是
{
"dev": {
"app_function": "ping_app.app",
"aws_region": "us-west-1",
"profile_name": "Breuds",
"project_name": "breuds",
"runtime": "python3.6",
"s3_bucket": "zappa-ping-redshift",
"slim_handler": true,
"certificate_arn": "arn:aws:acm:us-east-1:010174774769:certificate/3a92c204-5788-42fc-bc65-74aaae8c1b3f",
"domain": "breuds.com"
}
}
我开始认为我在我的域方面做一些令人费解的事情。我正在使用 Google 域(因为我有一个自定义域用于我的电子邮件,只是使用它),但这似乎让 AWS 与之对话令人头疼。
您可能不需要 API 网关。这将取决于站点功能。您可以使用带有自定义域的 S3 来托管静态网站。您可以包括客户端 javascript(angular/react 等..) API 网关实际上是用于处理 http 请求并将其传递给定义的资源(Lambda 或其他)。
如果您的站点需要后端功能,那么您的选择很少。
1) 构建 lambda 函数,然后使用 API Gateway(REST API) 与这些函数进行交互。
yourhostname.com -> S3 -> API 网关(aws 主机名) -> lambda
2) 使用 AWS JS SDK 直接与您的 lambda 函数交互。
yourhostname.com -> S3 -> AWS SDK -> lambda
3) 使用 API 网关,然后使用 EC2 实例转发到 Lambda 或自托管 Web 服务器(flask 节点)
yourhostname.com -> API 网关(aws 主机名) -> lambda
yourhostname.com -> 自托管网络服务器
这是一张图片,可能会更清楚一些。
如果我错了请纠正我 flask 用于后端开发以构建微服务。要托管它,您可以使用构建 lambda 函数或将其托管在您自己的实例上。
https://andrich.blog/2017/02/12/first-steps-with-aws-lambda-zappa-flask-and-python/
如果有帮助请告诉我。
实际上在zappa’s readme中有解释。
Deploying to a Domain With AWS Certificate Manager
Amazon provides their own free alternative to Let's Encrypt called AWS Certificate Manager (ACM). To use this service with Zappa:
Verify your domain in the AWS Certificate Manager console.
In the console, select the N. Virginia (us-east-1) region and request a certificate for your domain or subdomain (sub.yourdomain.tld), or request a wildcard domain (*.yourdomain.tld).
Copy the entire ARN of that certificate and place it in the Zappa setting certificate_arn.
Set your desired domain in the domain setting.
Call $ zappa certify to create and associate the API Gateway distribution using that certificate.
还有使用现有证书等的说明。
别被它骗了,这部分的标题听起来好像只是关于证书的,但是有关于使用您自己的域的详细说明。
编辑:
我包括 my own zappa settings 以供参考。
{
"common": {
"app_function": "app.__hug_wsgi__",
"aws_region": "eu-central-1",
"s3_bucket": "excuse-generator",
"profile_name": "mislavcimpersak",
"remote_env": "s3://excuse-generator/secrets.json",
"certificate_arn": "arn:aws:acm:us-east-1:500819636056:certificate/3edb9c1c-12c5-4601-89a9-dc42df840fa6"
},
"prod": {
"extends": "common",
"domain": "function.xkcd-excuse.com"
},
"dev": {
"extends": "common",
"debug": true,
"keep_warm": false,
"domain": "function-dev.xkcd-excuse.com"
}
}
在 namecheap.com 购买并通过 cloudflare.com
提供的域名分步指南
- 在 namecheap 上购买域名。com/use 现有
- 在 cloudflare 上注册新站点。com/use 现有
- cloudflare 会给你(很可能)两个域名服务器
- 在 https://ap.www.namecheap.com/domains/domaincontrolpanel/xkcd-excuse.com/domain DNS 下输入 - 选择 "Custom DNS" 在 cloudflare
上给出的名称服务器
- 转到 AWS ACM 并申请新证书(证书必须在 us-east-1 区域创建)
- 如有必要,输入多个子域(
foo.example.com
& foo-dev.example.com
)
- 记下 AWS 管理控制台提供的 ACM ARN
- 在
zappa_settings.json
下输入 certificate_arn
您的 ARN
- 在
zappa_settings.json
下route53_enabled
放false
- 这是必须的
- 在
zappa_settings.json
下 domain
为每个阶段输入域,即。 foo.example.com
和 foo-dev.example.com
- 运行
zappa certify <stage_name>
- 它应该说:“使用提供的证书创建了一个新域名。请注意,创建此域并通过 AWS 传播它最多可能需要 40 分钟,但这不需要您做任何进一步的工作。
证书已更新!"
- 进入CloudFlare DNS界面,输入
- CNAME: foo - i3jtsjkdeu4wxo.cloudfront.net
- CNAME: foo-dev - d2jtsjkdeu4wxo.cloudfront.net
- 等待 40 分钟并检查您的域,它们应该可以为您的 Lambda 函数提供服务
我正在使用 Zappa 部署 Flask 应用程序。它有效(site)。显然,我不想让它留在 aws 域后面,而是将其放在我的个人域中。
我正在搜索的所有内容都在谈论使用 S3 和 API 网关托管 Lambda 站点 。有没有办法只将我的小应用程序部署到自定义域?
编辑
根据@mislav 的回答,我能够让我的 google 域与 AWS 一起使用。但是当我尝试按 运行 zappa certify
完成时,我收到有关现有域的错误消息:
raise error_class(parsed_response, operation_name) botocore.errorfactory.BadRequestException: An error occurred (BadRequestException) when calling the CreateDomainName operation: The domain name you provided already exists.
我的zappa_settings.json
是
{
"dev": {
"app_function": "ping_app.app",
"aws_region": "us-west-1",
"profile_name": "Breuds",
"project_name": "breuds",
"runtime": "python3.6",
"s3_bucket": "zappa-ping-redshift",
"slim_handler": true,
"certificate_arn": "arn:aws:acm:us-east-1:010174774769:certificate/3a92c204-5788-42fc-bc65-74aaae8c1b3f",
"domain": "breuds.com"
}
}
我开始认为我在我的域方面做一些令人费解的事情。我正在使用 Google 域(因为我有一个自定义域用于我的电子邮件,只是使用它),但这似乎让 AWS 与之对话令人头疼。
您可能不需要 API 网关。这将取决于站点功能。您可以使用带有自定义域的 S3 来托管静态网站。您可以包括客户端 javascript(angular/react 等..) API 网关实际上是用于处理 http 请求并将其传递给定义的资源(Lambda 或其他)。
如果您的站点需要后端功能,那么您的选择很少。
1) 构建 lambda 函数,然后使用 API Gateway(REST API) 与这些函数进行交互。
yourhostname.com -> S3 -> API 网关(aws 主机名) -> lambda
2) 使用 AWS JS SDK 直接与您的 lambda 函数交互。
yourhostname.com -> S3 -> AWS SDK -> lambda
3) 使用 API 网关,然后使用 EC2 实例转发到 Lambda 或自托管 Web 服务器(flask 节点)
yourhostname.com -> API 网关(aws 主机名) -> lambda
yourhostname.com -> 自托管网络服务器
这是一张图片,可能会更清楚一些。
如果我错了请纠正我 flask 用于后端开发以构建微服务。要托管它,您可以使用构建 lambda 函数或将其托管在您自己的实例上。 https://andrich.blog/2017/02/12/first-steps-with-aws-lambda-zappa-flask-and-python/
如果有帮助请告诉我。
实际上在zappa’s readme中有解释。
Deploying to a Domain With AWS Certificate Manager
Amazon provides their own free alternative to Let's Encrypt called AWS Certificate Manager (ACM). To use this service with Zappa:
Verify your domain in the AWS Certificate Manager console. In the console, select the N. Virginia (us-east-1) region and request a certificate for your domain or subdomain (sub.yourdomain.tld), or request a wildcard domain (*.yourdomain.tld). Copy the entire ARN of that certificate and place it in the Zappa setting certificate_arn. Set your desired domain in the domain setting. Call $ zappa certify to create and associate the API Gateway distribution using that certificate.
还有使用现有证书等的说明。
别被它骗了,这部分的标题听起来好像只是关于证书的,但是有关于使用您自己的域的详细说明。
编辑: 我包括 my own zappa settings 以供参考。
{
"common": {
"app_function": "app.__hug_wsgi__",
"aws_region": "eu-central-1",
"s3_bucket": "excuse-generator",
"profile_name": "mislavcimpersak",
"remote_env": "s3://excuse-generator/secrets.json",
"certificate_arn": "arn:aws:acm:us-east-1:500819636056:certificate/3edb9c1c-12c5-4601-89a9-dc42df840fa6"
},
"prod": {
"extends": "common",
"domain": "function.xkcd-excuse.com"
},
"dev": {
"extends": "common",
"debug": true,
"keep_warm": false,
"domain": "function-dev.xkcd-excuse.com"
}
}
在 namecheap.com 购买并通过 cloudflare.com
提供的域名分步指南- 在 namecheap 上购买域名。com/use 现有
- 在 cloudflare 上注册新站点。com/use 现有
- cloudflare 会给你(很可能)两个域名服务器
- 在 https://ap.www.namecheap.com/domains/domaincontrolpanel/xkcd-excuse.com/domain DNS 下输入 - 选择 "Custom DNS" 在 cloudflare 上给出的名称服务器
- 转到 AWS ACM 并申请新证书(证书必须在 us-east-1 区域创建)
- 如有必要,输入多个子域(
foo.example.com
&foo-dev.example.com
) - 记下 AWS 管理控制台提供的 ACM ARN
- 在
zappa_settings.json
下输入certificate_arn
您的 ARN - 在
zappa_settings.json
下route53_enabled
放false
- 这是必须的 - 在
zappa_settings.json
下domain
为每个阶段输入域,即。foo.example.com
和foo-dev.example.com
- 运行
zappa certify <stage_name>
- 它应该说:“使用提供的证书创建了一个新域名。请注意,创建此域并通过 AWS 传播它最多可能需要 40 分钟,但这不需要您做任何进一步的工作。 证书已更新!"
- 进入CloudFlare DNS界面,输入
- CNAME: foo - i3jtsjkdeu4wxo.cloudfront.net
- CNAME: foo-dev - d2jtsjkdeu4wxo.cloudfront.net
- 等待 40 分钟并检查您的域,它们应该可以为您的 Lambda 函数提供服务