如何把 django app 发布到 aws lambda

在这篇文章, 我将会指引怎么用 zappa 把一个 django app 发布到 AWS Lamdba

django

django 是一个非常流行的 Python web 框架. 只需用很少的代码, 就能够高效地构建一个非常优秀的网站

AWS Lambada

AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码

AWS IAM

IAM 是什么

如果不了解什么是 AWS IAM, 建议先读 IAM 的介绍

配置本地 IAM

zappa 会帮助你创建 lambda 程序相关的角色, 在这个阶段, 为了不要那么操心, 先给你本地的 IAM 设置成 "Administrators" 组. 生产环境不要这么做

把 IAM 的密钥放置在 ~/.aws 配置文件

###~/.aws/credentials
[default]
aws_access_key_id=[...]
aws_secret_access_key=[...]

构造 Django app

初始目录和 requirement.txt

mkdir mysite
cd mysite
touch requirement.txt

把 django 和 zappa 写入 requirement.txt, 如下

cat requirement.txt
django
zappa

创建虚拟环境, 因为我本地有多个 python 版本, 所以用 pyenvpyenv-virtualenv 管理我的虚拟环境

pyenv virtualenv mysite-env
pyenv activate mysite-env
pip install -r requirement.txt

用以下常用的方法也是可以的

virtualenv --no-site-packages venv
source venv/bin/activate
pip install -r requirement.txt

初始化 django

django-admin startproject mysite .

运行 django server, 看看程序的状态

python manage.py runserver

Zappa

Zappa 是一个构建和发布 python 程序到 AWS Lambda 的工具, 能用于 WSGI web apps, 例如 django, Flask.

初始化 zappa 环境

zappa init

像以下输出, 所有选项可以直接按回车选默认

███████╗ █████╗ ██████╗ ██████╗  █████╗
╚══███╔╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗
  ███╔╝ ███████║██████╔╝██████╔╝███████║
 ███╔╝  ██╔══██║██╔═══╝ ██╔═══╝ ██╔══██║
███████╗██║  ██║██║     ██║     ██║  ██║
╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝     ╚═╝  ╚═╝

Welcome to Zappa!

Zappa is a system for running server-less Python web applications on AWS Lambda and AWS API Gateway.
This `init` command will help you create and configure your new Zappa deployment.
Let's get started!

Your Zappa configuration can support multiple production stages, like 'dev', 'staging', and 'production'.
What do you want to call this environment (default 'dev'):

AWS Lambda and API Gateway are only available in certain regions. Let's check to make sure you have a profile set up in one that will work.
Okay, using profile default!

Your Zappa deployments will need to be uploaded to a private S3 bucket.
If you don't have a bucket yet, we'll create one for you too.
What do you want call your bucket? (default 'zappa-gc39ra9lq'):

It looks like this is a Django application!
What is the module path to your projects's Django settings?
We discovered: mysite.settings
Where are your project's settings? (default 'mysite.settings'):

You can optionally deploy to all available regions in order to provide fast global service.
If you are using Zappa for the first time, you probably don't want to do this!
Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]:

Okay, here's your zappa_settings.json:

{
    "dev": {
        "aws_region": "us-east-1",
        "django_settings": "mysite.settings",
        "profile_name": "default",
        "project_name": "mysite",
        "runtime": "python2.7",
        "s3_bucket": "zappa-gc39ra9lq"
    }
}

Does this look okay? (default 'y') [y/n]:

首次发布的命令

zappa deploy dev

代码后续修改后的发布命令

zappa update dev

如果出现以下错误, 检查一下 pip 版本, 如果是10.x.x, 要降级回 9.0.3

h no! An error occurred! :(
==============
lib/python2.7/site-packages/zappa/core.py", line 751, in get_installed_packages
    pip.get_installed_distributions()
AttributeError: 'module' object has no attribute 'get_installed_distributions'
==============

上传成功

image.png

请求首页

https://gc3sszkyo3.execute-api.us-east-1.amazonaws.com/dev


并没有那么高兴, 对吧, 这只是个 demo

用到的组件

回到 lambda 上可以看到, zappa 自动生成以下的组件

IAM

API Gateway

CloudWatch Event

lambda 函数

image.png

todo

1, 地址的末尾 /dev/ 要去掉的
2, 域名要换成自己的

去掉 /dev/

参考这里, https://edgarroman.github.io/zappa-django-guide/walk_core/#why-is-the-url-path-appended-with-dev

使用自己的域名

https://edgarroman.github.io/zappa-django-guide/walk_domain/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,463评论 6 428
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,978评论 1 3
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,208评论 0 3
  • 光之涟漪:回想一天当中你做的一件或者几件好事,然后再一次的复习,感到很开心。 想象这样的好事好种子,像白色的光...
    谈小妍呀阅读 1,046评论 0 1
  • 导语 漫长的一生和一生,也只是温存的花事。这个冬天,还是寒冷,唯愿柔软几许,愿世界温柔待你。温柔待我。 漫游家,心...
    漫游家阅读 432评论 0 0