如何在 AWS Lambda 上的无服务器应用程序中存储和使用 HTML 模板(使用 AWS SAM)?
How to store and use HTML templates in serverless application on AWS Lambda (using AWS SAM)?
而不是
(A) 为 AWS 上的 运行 Web 应用程序遵循更传统的路线(例如,在 AWS EC2 或 Beanstalk 上使用 Ruby/Sinatra 或 Python/Flask) , 或
(C) 在 S3 中创建静态 HTML 和 JavaScript 文件,在 AWS Lambda 中创建动态 API 端点(发送 JSON 数据到那些use/interpret 数据来自 JavaScript),
的静态网页
我想达到一个中间立场:
- (B) 在 AWS Lambda 中创建 HTTP 端点(例如,在 Python 中),读取并使用 HTML 模板生成对客户端的完整 HTML 响应。
该设置将生成一个无服务器 Web 应用程序,其中 AWS Lambda 函数提供服务器端(具有讽刺意味的是我并没有忘记)生成 HTML 输出。
在 AWS Lambda 函数的 Python 代码中,可以包含 HTML 代码片段,在函数中修改(填充数据),并且 return HTML 作为 text/html
输出到客户端。这种方法的缺点是 HTML 模板在 Python 代码中是 'embedded',而不是在单独的外部文件中。
Q1:如何在代码包中的某处引用 HTML 模板文件 - 模板应该是包的一部分 - 让 Python 函数读取它,并生成通过模板中的变量替换 HMTL 页面?
问题 2:如何使用 AWS 无服务器应用程序模型 (AWS SAM) 在我的项目中指定/包含/link 一组 HTML 模板文件?
我不确定你从哪里开始,所以我将从头开始。
创建引用处理程序和事件资源的 YAML 配置文件,并将其放入 deployment
文件夹中。
对于模板,使用 "Mustashe for Python" pystashe.
在您的 Python project/Virtualenv:
中创建参数化 HTML 模板
<html>
<head>
<title>Customer: {{name}}</title>
</head>
<body>
<div>
<h2>Customer Name: {{name}}</h2>
<h4>Phone Number: {{phone}}</h4>
</div>
</body>
</html>
创建 data
对象以填充参数化模板:
{
"name": "Tom Thumb",
"phone": "0123456789"
}
从项目中的位置加载 template
template = file('%s/mypath/template.html'%py_root).read()
从数据对象渲染页面:
myhtml = pystache.render(template, data)
Return 呈现给客户端的 html:
response = {
"statusCode": 200,
"body": myhtml,
"headers": {
'Content-Type': 'text/html',
}
}
压缩 python 代码、站点包和 html 文件并放入 deployment
文件夹。
从deployment
文件夹中,打包SAM项目,准备上传到S3:
aws cloudformation package --template-file myservice.yml --output-template-file deploy-myservice.yml --s3-bucket myserverless-deploy
从 deployment
文件夹中,将 SAM 项目部署到 AWS:
aws cloudformation deploy --template-file deploy-myservice.yml --stack-name mycontext-myservice-dev --capabilities CAPABILITY_IAM
郑重声明,我更喜欢选项 C,使用 NodeJS...:)
而不是
(A) 为 AWS 上的 运行 Web 应用程序遵循更传统的路线(例如,在 AWS EC2 或 Beanstalk 上使用 Ruby/Sinatra 或 Python/Flask) , 或
(C) 在 S3 中创建静态 HTML 和 JavaScript 文件,在 AWS Lambda 中创建动态 API 端点(发送 JSON 数据到那些use/interpret 数据来自 JavaScript),
的静态网页
我想达到一个中间立场:
- (B) 在 AWS Lambda 中创建 HTTP 端点(例如,在 Python 中),读取并使用 HTML 模板生成对客户端的完整 HTML 响应。
该设置将生成一个无服务器 Web 应用程序,其中 AWS Lambda 函数提供服务器端(具有讽刺意味的是我并没有忘记)生成 HTML 输出。
在 AWS Lambda 函数的 Python 代码中,可以包含 HTML 代码片段,在函数中修改(填充数据),并且 return HTML 作为 text/html
输出到客户端。这种方法的缺点是 HTML 模板在 Python 代码中是 'embedded',而不是在单独的外部文件中。
Q1:如何在代码包中的某处引用 HTML 模板文件 - 模板应该是包的一部分 - 让 Python 函数读取它,并生成通过模板中的变量替换 HMTL 页面?
问题 2:如何使用 AWS 无服务器应用程序模型 (AWS SAM) 在我的项目中指定/包含/link 一组 HTML 模板文件?
我不确定你从哪里开始,所以我将从头开始。
创建引用处理程序和事件资源的 YAML 配置文件,并将其放入
deployment
文件夹中。对于模板,使用 "Mustashe for Python" pystashe.
在您的 Python project/Virtualenv:
中创建参数化 HTML 模板<html> <head> <title>Customer: {{name}}</title> </head> <body> <div> <h2>Customer Name: {{name}}</h2> <h4>Phone Number: {{phone}}</h4> </div> </body> </html>
创建
data
对象以填充参数化模板:{ "name": "Tom Thumb", "phone": "0123456789" }
从项目中的位置加载
template
template = file('%s/mypath/template.html'%py_root).read()
从数据对象渲染页面:
myhtml = pystache.render(template, data)
Return 呈现给客户端的 html:
response = { "statusCode": 200, "body": myhtml, "headers": { 'Content-Type': 'text/html', } }
压缩 python 代码、站点包和 html 文件并放入
deployment
文件夹。从
deployment
文件夹中,打包SAM项目,准备上传到S3:aws cloudformation package --template-file myservice.yml --output-template-file deploy-myservice.yml --s3-bucket myserverless-deploy
从
deployment
文件夹中,将 SAM 项目部署到 AWS:aws cloudformation deploy --template-file deploy-myservice.yml --stack-name mycontext-myservice-dev --capabilities CAPABILITY_IAM
郑重声明,我更喜欢选项 C,使用 NodeJS...:)