Joc*_*per 7 python amazon-web-services aws-lambda aws-sam
代替
(A)遵循在AWS上运行Web应用程序的更传统路线(例如,在AWS EC2或Beanstalk上使用Ruby/Sinatra或Python/Flask),或者
(C)在S3中创建静态HTML和JavaScript文件以及在AWS Lambda中创建动态API端点(将JSON数据发送到那些通过JavaScript使用/解释该数据的静态网页),
我想达成一个中间立场:
该设置将产生无服务器的Web应用程序,其中AWS Lambda函数提供服务器端(具有讽刺意味的是,我没有丢失)生成的HTML输出.
在AWS Lambda函数的Python代码中,可以包含HTML代码片段,在函数中修改(填充数据),并将HTML作为text/html输出返回给客户端.这种方法的缺点是HTML模板然后"嵌入"在Python代码中,而不是外部在单独的文件中.
Q1:如何在代码包中的某处引用HTML模板文件 - 模板应该是包的一部分 - 由Python函数读取,并通过模板中的变量替换生成HMTL页面?
Q2:如何使用AWS无服务器应用程序模型(AWS SAM)指定/包含/链接到项目中的一组HTML模板文件?
我不确定你从哪里开始,所以我会从头开始。
创建引用处理程序和事件资源的 YAML 配置文件并将其放入一个deployment文件夹中。
对于模板,请使用“Mustashe for Python” pystashe。
在您的 Python 项目/Virtualenv 中创建参数化的 HTML 模板:
<html>
<head>
<title>Customer: {{name}}</title>
</head>
<body>
<div>
<h2>Customer Name: {{name}}</h2>
<h4>Phone Number: {{phone}}</h4>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)创建data对象以填充参数化模板:
{
"name": "Tom Thumb",
"phone": "0123456789"
}
Run Code Online (Sandbox Code Playgroud)template从项目中的位置加载
template = file('%s/mypath/template.html'%py_root).read()
Run Code Online (Sandbox Code Playgroud)从数据对象渲染页面:
myhtml = pystache.render(template, data)
Run Code Online (Sandbox Code Playgroud)将渲染的 html 返回给客户端:
response = {
"statusCode": 200,
"body": myhtml,
"headers": {
'Content-Type': 'text/html',
}
}
Run Code Online (Sandbox Code Playgroud)将 python 代码、站点包和 html 文件压缩并放入deployment文件夹中。
从deployment文件夹中,打包 SAM 项目,该项目准备并上传到 S3:
aws cloudformation package --template-file myservice.yml --output-template-file deploy-myservice.yml --s3-bucket myserverless-deploy
Run Code Online (Sandbox Code Playgroud)从deployment文件夹中,将 SAM 项目部署到 AWS:
aws cloudformation deploy --template-file deploy-myservice.yml --stack-name mycontext-myservice-dev --capabilities CAPABILITY_IAM
Run Code Online (Sandbox Code Playgroud)为了记录,我更喜欢选项 C,使用 NodeJS ... :)
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |