如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多!
作者:蕾学姐
亚马逊云计算服务(Amazon Web Services,缩写为AWS),由亚马逊公司所创建的云计算平台,提供许多远程Web服务。Amazon EC2与Amazon S3都架构在这个平台上。
相比于IBM的ibmcloud和微软的azure cloud,学姐我认为aws的部署会稍微复杂一些,但是没有关系,只要前期环境配的好,后期应用程序部署到云上完全不是问题。下面就讲讲怎么将你本地的应用程序部署到云上。
一、创建您的第一个 IAM 管理员用户和组
此过程将介绍如何使用 AWS 管理控制台 自行创建 IAM 用户,并将该用户添加到具有已附加托管策略中的管理权限的组。
自行创建管理员用户并将该用户添加到管理员组(控制台)
- 使用 AWS 账户电子邮件地址和密码,以 AWS 账户根用户 身份登录到 IAM 控制台 (https://console.aws.amazon.com/iam/)。
注意:强烈建议您遵守以下使用 Administrator IAM 用户的最佳实践,妥善保存根用户凭证。只在执行少数账户和服务管理任务时才作为根用户登录。
- 在导航窗格中,选择 Users (用户),然后选择Add user (添加用户)。
- 对于 User name,键入 Administrator。
- 选中 AWS 管理控制台 access (AWS 管理控制台访问) 旁边的复选框,选择 Custom password (自定义密码),然后在文本框中键入新密码。默认情况下,AWS 将强制新用户在首次登录时创建新密码。您可以选择清除 User must create a new password at next sign-in (用户必须在下次登录时创建新密码) 旁边的复选框,以允许新用户在登录后重置其密码。
- 选择 Next: Permissions (下一步: 权限)。
- 在设置权限页面上,选择将用户添加到组。
- 选择 Create group。
- 在 Create group (创建组) 对话框中,对于 Group name (组名称),键入 Administrators。
- 选择 Policy Type (策略类型),然后选择 Job function (作业功能) 以筛选表内容。
- 在策略列表中,选中 AdministratorAccess 的复选框。然后选择 Create group。
注意:您必须先激活 IAM 用户和角色对账单的访问权限,然后才能使用 AdministratorAccess 权限访问 AWS Billing and Cost Management 控制台。为此,请按照“向账单控制台委派访问权限”教程:第 1 步中的说明进行操作。
- 返回到组列表中,选中您的新组所对应的复选框。如有必要,选择 Refresh 以在列表中查看该组。
- 选择 Next: Tagging (下一步: 标记)。
- (可选)通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 标记 IAM 实体。
- 选择 Next: Review 以查看要添加到新用户的组成员资格的列表。如果您已准备好继续,请选择 Create user。
- 选择新建的用户,点击下载 .CSV文件,里面有你的用户id和秘钥,后面会用到。
您可使用此相同的流程创建更多的组和用户,并允许您的用户访问 AWS 账户资源。
二、在Python中安装一个叫awsebcli的库:
1、按路径寻找“Pycharm-preferences-project interpreter”然后点击左下角 ‘+’ 添加你要的库:
2、搜索“awsebcli”,右下角点击安装,显示“安装成功”后,返回,点击“OK”退出
三、通过 Flask 设置 Python 虚拟环境
为应用程序创建项目目录和虚拟环境并安装 Flask(如果你已经有代码,可以跳过这一步)
1、设置项目环境
- 创建项目目录。
~$ mkdir eb-flask
~$ cd eb-flask
- 创建和激活名为 virt 的虚拟环境:
~/eb-flask$ virtualenv virt
~$ source virt/bin/activate
(virt) ~/eb-flask$
您将看到您的命令提示符前面带有 (virt),表明您在虚拟环境中。在本教程的其余部分中使用虚拟环境。
- 使用 pip install 安装 Flask:
(virt)~/eb-flask$ pip install flask==1.0.2
- 使用 pip freeze 查看已安装的库:
(virt)~/eb-flask$ pip freeze
click==6.7
Flask==1.0.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
Werkzeug==0.14.1
此命令列出虚拟环境中已安装的所有程序包。由于您在虚拟环境中,因此不会显示全局安装的程序包,例如 EB CLI。
- 将来自 pip freeze 的输出保存到名为 requirements.txt 的文件中。
(virt)~/eb-flask$ pip freeze > requirements.txt
在部署期间,此文件将指示 Elastic Beanstalk 安装库。有关更多信息,请参阅 要求文件。
创建 Flask 应用程序
接下来,创建您将使用 Elastic Beanstalk 部署的应用程序。我们会创建一个“Hello World”RESTful Web 服务。
在此目录中创建名为 application.py 的新文本文件,包含以下内容:
例 ~/eb-flask/application.py,里面的代码如下:
from flask import Flask
# print a nice greeting.
def say_hello(username = "World"):return '<p>Hello %s!</p>n' % username
# some bits of text for the page.
header_text = '''<html>n<head> <title>EB Flask Test</title> </head>n<body>'''
instructions = '''<p><em>Hint</em>: This is a RESTful web service! Append a usernameto the URL (for example: <code>/Thelonious</code>) to say hello tosomeone specific.</p>n'''
home_link = '<p><a href="/">Back</a></p>n'
footer_text = '</body>n</html>'# EB looks for an 'application' callable by default.
application = Flask(__name__)# add a rule for the index page.
application.add_url_rule('/', 'index', (lambda: header_text +say_hello() + instructions + footer_text))# add a rule when the page is accessed with a name appended to the site
# URL.
application.add_url_rule('/<username>', 'hello', (lambda username:header_text + say_hello(username) + home_link + footer_text))# run the app.
if __name__ == "__main__":# Setting debug to True enables debug output. This line should be# removed before deploying a production app.application.debug = Trueapplication.run()
本示例输出根据访问服务所使用的路径而变化的自定义问候语。
四、创建环境和部署 Flask 应用程序(重点!!)
- 使用 eb init 命令,初始化 EB CLI 存储库:
~/eb-flask$ eb init -p python-3.6 flask-tutorial --region us-east-2
Application flask-tutorial has been created.
此命令创建名为 flask-tutorial 的新应用程序,并配置本地存储库,以最新的 Python 3.6 平台版本创建环境。
2、此时会出现让你输入用户名id和密码,把之前那个csv文件里面的id密码输入就可以。
3、使用 eb create 创建环境并将应用程序部署到此环境中:
~/eb-flask$ eb create flask-env
环境创建大约需要 5 分钟,将创建以下资源:
- EC2 实例 – 配置来在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 虚拟机。
各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为 Web 应用程序前的反向代理,向其转发请求、提供静态资产以及生成访问和错误日志。
- 实例安全组 – 配置来允许通过端口 80 访问的 Amazon EC2 安全组。通过此资源,HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下,其他端口不允许流量进入。
- 负载均衡器 – 配置来向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
- 安全组 – 配置来允许通过端口 80 访问的 Amazon EC2 安全组。利用此资源,HTTP 流量可从 Internet 到达负载均衡器。默认情况下,其他端口不允许流量进入。
- Auto Scaling 组 – 配置来在实例终止或不可用时替换实例的 Auto Scaling 组。
- Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他项目的存储位置。
- Amazon CloudWatch 警报 – 用于监控环境实例负载的两个 CloudWatch 警报,在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩进行响应。
- AWS CloudFormation 堆栈 – Elastic Beanstalk 使用 AWS CloudFormation 启动您的环境中的资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台查看的模板中定义。
- 域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:subdomain.region.http://elasticbeanstalk.com。
所有这些资源均由 Elastic Beanstalk 管理。当您终止环境时,Elastic Beanstalk 会终止其包含的所有资源。
注意:Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息,请参阅 将 Elastic Beanstalk 用于 Amazon S3。
当环境创建过程完成时,请使用 eb open 打开网站:
~/eb-flask$ eb open
这将使用为应用程序创建的域名打开一个浏览器窗口。您应该看到在本地创建和测试的相同 Flask 网站。
如果您没有看到应用程序运行,或者出现错误消息,请查看排查部署问题以获取有关如何确定错误原因的帮助。
如果您确实 看到应用程序在运行,那么恭喜,您已使用 Elastic Beanstalk 部署了第一个 Flask 应用程序!
清除
Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 实例、数据库实例、负载均衡器、安全组和警报。
终止 Elastic Beanstalk 环境
- 打开 Elastic Beanstalk 控制台。
- 导航到您的环境的管理页。
- 选择操作,然后选择终止环境。
- 在 Confirm Termination (确认终止) 对话框中,键入环境名称,然后选择 Terminate (终止)。
利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。
或者,使用 EB CLI:
~/eb-flask$ eb terminate flask-env