我正在使用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与之交谈。
答案 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服务器
如果我错了,请纠正我使用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提供的域名的分步指南
foo.example.com
& foo-dev.example.com
)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>