Flask 我可以将AWS Lambda站点移动到私有域吗?

Flask 我可以将AWS Lambda站点移动到私有域吗?,flask,lambda,zappa,Flask,Lambda,Zappa,我正在使用Zappa部署一个Flask应用程序。它可以工作()。很明显,我不想让它停留在aws域名后面,而把它放在我的个人域名上 我搜索的所有东西都在谈论用S3和API网关托管一个Lambda站点。难道没有办法将我的小应用部署到自定义域吗 编辑 按照@mislav的回答,我能够让我的谷歌域名与AWS一起工作。但是当我试图通过运行zappa certifite来完成时,我得到了一个关于现有域的错误: 引发错误\u类(解析的\u响应、操作\u名称) botocore.errorfactory.Bad

我正在使用Zappa部署一个Flask应用程序。它可以工作()。很明显,我不想让它停留在aws域名后面,而把它放在我的个人域名上

我搜索的所有东西都在谈论用S3和API网关托管一个Lambda站点。难道没有办法将我的小应用部署到自定义域吗

编辑

按照@mislav的回答,我能够让我的谷歌域名与AWS一起工作。但是当我试图通过运行
zappa certifite
来完成时,我得到了一个关于现有域的错误:

引发错误\u类(解析的\u响应、操作\u名称) botocore.errorfactory.BadRequestException:发生错误 (BadRequestException)调用CreateDomainName操作时: 您提供的域名已存在

我的
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"
}
}

我开始觉得我在做一些令人费解的事情。我使用的是谷歌域名(因为我的电子邮件有一个自定义域名,只是使用它),但如果想让AWS与之对话,这似乎会让人头疼。

您可能不需要API网关。这将取决于站点功能。您可以使用S3和自定义域托管静态网站。您可以包括客户端javascript(angular/react等)。API网关实际上是用于处理http请求并将其传递给定义的资源(Lambda或其他资源)

如果您的站点需要后端功能,那么您几乎没有选择。
1)构建lambda函数,然后使用API网关(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->自托管web服务器

这是一张可能会让它更清楚一点的图片。

如果我错了,请更正flask用于后端开发以构建微服务。要托管它,您可以使用构建lambda函数或在您自己的实例上托管它。


如果这有帮助,请告诉我。

中实际解释了这一点

使用AWS证书管理器部署到域

Amazon提供了他们自己的免费替代方案,名为AWS证书管理器(ACM)。要将此服务与Zappa一起使用,请执行以下操作:

在AWS证书管理器控制台中验证您的域。 在控制台中,选择N.Virginia(us-east-1)地区并为您的域或子域(sub.yourdomain.tld)请求证书,或请求通配符域(*.yourdomain.tld)。 复制该证书的整个ARN,并将其放入Zappa设置证书中。 在域设置中设置所需的域。 调用$zappa certificate以使用该证书创建和关联API网关分发

还有使用现有证书等的说明

不要让它愚弄你,这一节的标题听起来好像只是关于证书的,但是有关于使用你自己的域的详细说明

编辑: 我把它包括在内以供参考

{
    "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"
        }
    }

在namescape.com上购买并通过cloudflare.com提供服务的域名的分步指南

  • 在namescape.com上购买域名/使用现有域名
  • 在cloudflare.com/use existing上注册新站点
  • cloudflare将(很可能)为您提供两个名称服务器
  • 在DNS下输入-选择cloudflare上给定的“自定义DNS”名称服务器
  • 转到AWS ACM并申请新证书(证书必须在us-east-1地区创建)
  • 如有必要,输入多个子域(
    foo.example.com
    &
    foo-dev.example.com
  • 记下AWS管理控制台提供的ACM ARN
  • zappa\u settings.json中
    certificate\u arn
    您的arn下输入
  • zappa\u settings.json
    下的
    route53\u enabled
    put
    false
    -这是必须的
  • zappa_settings.json
    下的
    domain
    输入每个阶段的域,即
    foo.example.com
    foo-dev.example.com
  • 运行
    zappa认证
  • 它应该说:“用提供的证书创建了一个新域名。请注意,创建和通过AWS传播这个域名可能需要40分钟,但您不需要做进一步的工作。 证书已更新!“
  • 转到CloudFlare DNS界面并输入
    • CNAME:foo-i3jtsjkdeu4wxo.cloudfront.net
    • CNAME:foo-dev-d2jtsjkdeu4wxo.cloudfront.net
  • 等待40分钟并检查您的域,它们应该为您的Lambda功能服务

  • 如果它只有静态内容和客户端javasript,那么您可以将其托管在S3上,并使用Route 53设置域。如果您有一些后端逻辑,那么您将需要使用api网关,我想我不明白为什么需要api网关。我不是已经找到url了吗?Lambda函数不能直接响应HTTP请求。这就是为什么您需要API网关来正确处理HTTP流量。正确答案是什么?我一直在尝试复制它。当我运行
    zappa certifite
    时,我得到一个关于域存在的错误:“botocore.errorfactory.BadRequestException:调用CreateDomainName操作时发生错误(BadRequestException):您提供的域名已经存在。”当然存在?你能分享你的
    zappa\u设置.json
    文件吗?问题更新。我肯定觉得我越来越接近了。我已经用一个循序渐进的指南更新了我的答案。在我的指南中,我使用了namescape和cloudflare,但您应该能够使它与使用googledomai管理的域一起工作