我可以将 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

提供的域名分步指南
  1. 在 namecheap 上购买域名。com/use 现有
  2. 在 cloudflare 上注册新站点。com/use 现有
  3. cloudflare 会给你(很可能)两个域名服务器
  4. https://ap.www.namecheap.com/domains/domaincontrolpanel/xkcd-excuse.com/domain DNS 下输入 - 选择 "Custom DNS" 在 cloudflare
  5. 上给出的名称服务器
  6. 转到 AWS ACM 并申请新证书(证书必须在 us-east-1 区域创建)
  7. 如有必要,输入多个子域(foo.example.com & foo-dev.example.com
  8. 记下 AWS 管理控制台提供的 ACM ARN
  9. zappa_settings.json 下输入 certificate_arn 您的 ARN
  10. zappa_settings.jsonroute53_enabledfalse - 这是必须的
  11. zappa_settings.jsondomain 为每个阶段输入域,即。 foo.example.comfoo-dev.example.com
  12. 运行 zappa certify <stage_name>
  13. 它应该说:“使用提供的证书创建了一个新域名。请注意,创建此域并通过 AWS 传播它最多可能需要 40 分钟,但这不需要您做任何进一步的工作。 证书已更新!"
  14. 进入CloudFlare DNS界面,输入
    • CNAME: foo - i3jtsjkdeu4wxo.cloudfront.net
    • CNAME: foo-dev - d2jtsjkdeu4wxo.cloudfront.net
  15. 等待 40 分钟并检查您的域,它们应该可以为您的 Lambda 函数提供服务