Как хранить и использовать шаблоны HTML в бессерверном приложении на AWS Lambda (используя AWS SAM)?
Вместо
(A) следуя более традиционному маршруту для запуска веб-приложения в AWS (например, используя Ruby/Sinatra или Python/Flask в AWS EC2 или Beanstalk), или
(C) создание статических файлов HTML и JavaScript в S3 и конечных точек динамического API в AWS Lambda (отправка данных JSON на те статические веб-страницы, которые используют / интерпретируют эти данные через JavaScript),
Я хочу достичь среднего уровня:
- (B) создать конечные точки HTTP в AWS Lambda (например, в Python), которые читают и используют шаблоны HTML для генерации полных HTML-ответов клиенту.
Эта настройка приведет к тому, что безсерверное веб-приложение, в котором функции AWS Lambda предоставляют серверную часть (ирония не для меня), генерирует вывод HTML.
В коде Python для лямбда-функций AWS можно включить фрагменты кода HTML, изменить их (заполнить данными) в функции и вернуть HTML как text/html
вывод клиенту. Недостаток этого подхода заключается в том, что шаблон HTML затем "внедряется" в код Python, а не является внешним в отдельном файле.
Q1: Как я могу обратиться к файлу шаблона HTML где-нибудь в пакете кода - шаблон должен быть частью пакета - иметь это, прочитанное функцией Python, и генерировать страницу HMTL путем подстановки переменной в шаблоне?
Вопрос 2: Как я могу указать / включить / связать набор файлов шаблонов HTML в моем проекте, используя модель сервера приложений AWS (AWS SAM)?
1 ответ
Я не уверен, откуда вы начинаете, поэтому я начну с самого начала.
Создайте файл конфигурации YAML со ссылкой на обработчики и ресурсы событий и поместите в
deployment
папка.Для создания шаблонов используйте "Mustashe for Python".
Создайте параметризованный шаблон HTML в своем проекте Python /Virtualenv:
<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)
Верните визуализированный 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...:)