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

时间:2017-12-02 03:21:11

标签: flask lambda zappa

我正在使用Zappa部署Flask应用。它有效(site)。显然,我不希望它被困在aws域后面,并把它放在我的个人域名上。

我正在搜索的所有内容都在讨论使用 S3和API网关托管Lambda网站。有没有办法只将我的小应用程序部署到自定义域?

修改

根据@ mislav的回答,我能够让我的谷歌域名与AWS合作。但是当我尝试通过运行zappa certify来完成时,我收到有关现有域的错误:

  

raise error_class(parsed_response,operation_name)   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与之交谈。

2 个答案:

答案 0 :(得分:1)

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

如果您的网站需要后端功能,那么您几乎没有选择。
1)构建lambda函数,然后使用API​​网关(REST API)与这些函数进行交互。
yourhostname.com - > S3 - > API网关(aws主机名) - >拉姆达

2)使用AWS JS SDK直接与lambda函数进行交互。    
yourhostname.com - > S3 - > AWS开发工具包 - >拉姆达

3)使用API​​网关,然后使用EC2实例转发到Lambda或自托管Web服务器(flask节点)
yourhostname.com - > API网关(aws主机名) - >拉姆达
yourhostname.com - >自托管的Web服务器

这张图片可能会让它更清晰一些。 enter image description here

如果我错了,请纠正我使用flask进行后端开发以构建微服务。要托管它,您可以使用构建lambda函数或在您自己的实例上托管它。 https://andrich.blog/2017/02/12/first-steps-with-aws-lambda-zappa-flask-and-python/

如果有帮助,请告诉我。

答案 1 :(得分:1)

实际上是在zappa’s readme中解释的。

  

使用AWS Certificate Manager部署到域

     

亚马逊提供他们自己的免费替代方案,即Let的加密称为AWS Certificate Manager(ACM)。要在Zappa中使用此服务:

     

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

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

不要让它欺骗你,该部分的标题使它听起来只是关于证书,但有关于使用你自己的域的详细说明。

编辑: 我包括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. 上购买域名
  3. 在cloudflare.com/use现有
  4. 上注册新网站
  5. cloudflare会给你(最有可能)两个名字服务器
  6. https://ap.www.namecheap.com/domains/domaincontrolpanel/xkcd-excuse.com/domain DNS下输入 - 选择"自定义DNS"在cloudflare上给出的名字服务器
  7. 转到AWS ACM并申请新证书(证书必须在 us-east-1 区域中创建)
  8. 如有必要,请输入多个子域名(foo.example.com& foo-dev.example.com
  9. 记下AWS管理控制台提供的ACM ARN
  10. zappa_settings.json下输入certificate_arn您的ARN
  11. <{1}} zappa_settings.json下的route53_enabled false - 这是必须的zappa_settings.json domain下的
  12. 为每个阶段输入域名,即。 foo.example.comfoo-dev.example.com
  13. 运行zappa certify <stage_name>
  14. 应该说:&#34;使用提供的证书创建了一个新的域名。请注意,通过AWS创建和传播此域最多可能需要40分钟,但您无需进一步的工作。 证书已更新!&#34;
  15. 转到CloudFlare DNS界面并输入
    • CNAME:foo - i3jtsjkdeu4wxo.cloudfront.net
    • CNAME:foo-dev - d2jtsjkdeu4wxo.cloudfront.net
  16. 等待40分钟并检查您的域名,他们应该为您的Lambda函数提供服务