Как хранить и использовать шаблоны HTML в бессерверном приложении на AWS Lambda (используя AWS SAM)? - PullRequest
0 голосов
/ 22 октября 2018

Вместо

  • (A) по более традиционному маршруту для запуска веб-приложения в AWS (например, с использованием Ruby / Sinatra или Python / Flask в AWS EC2 или Beanstalk),или

  • (C) создание статических файлов HTML и JavaScript в S3 и конечных точек динамического API в AWS Lambda (отправка данных JSON на те статические веб-страницы, которые используют / интерпретируют эти данные через JavaScript),

Я хочу достичь среднего уровня:

  • (B) создать конечные точки HTTP в лямбда-AWS AWS (например, в Python), которые читают и используют шаблоны HTMLдля генерации полных HTML-ответов клиенту.

Эта установка приведет к созданию безсерверного веб-приложения, в котором функции AWS Lambda доставляют серверную часть (ирония не теряется на меня), генерируя вывод HTML.

В коде Python для лямбда-функций AWS можно включать фрагменты кода HTML, изменять их (заполнять данными) в функции и возвращать HTML как text/html вывод клиенту.Недостаток этого подхода заключается в том, что шаблон HTML затем «внедряется» в код Python, а не внешний в отдельный файл.

Q1: Как я могу сослаться на файл шаблона HTML где-то в пакете кода- шаблон должен быть частью пакета - иметь его для чтения функцией Python и генерировать страницу HMTL путем подстановки переменных в шаблоне?

Q2: Как я могу указать / включить / связать с наборомФайлы шаблонов HTML в моем проекте с использованием модели сервера приложений AWS (AWS SAM)?

1 Ответ

0 голосов
/ 25 октября 2018

Я не уверен, откуда вы начинаете, поэтому начну с начала.

  1. Создайте файл конфигурации YAML, ссылающийся на обработчики и ресурсы событий, и поместитев папке deployment.

  2. Для шаблонов используйте «Mustashe for Python» pystashe .

  3. Создайте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>
    
  4. Создайте объект data для заполнения параметризованного шаблона:

    {
      "name": "Tom Thumb",
      "phone": "0123456789"
    }
    
  5. Загрузка template из местоположения в проекте

    template = file('%s/mypath/template.html'%py_root).read()
    
  6. Визуализация страницы из объекта данных:

    myhtml = pystache.render(template, data)
    
  7. Верните обработанный HTML-код клиенту:

    response = {
        "statusCode": 200,
        "body": myhtml,
        "headers": {
            'Content-Type': 'text/html',
        }
    }
    
  8. Сжатие кода Python, пакетов сайтов и HTML-файлов и поместите их в папку deployment.

  9. Из папки deployment упакуйте проект SAM, который готовит и загружает в S3:

    aws cloudformation package --template-file myservice.yml --output-template-file deploy-myservice.yml --s3-bucket myserverless-deploy
    
  10. Из папки deployment, depПосмотрите проект SAM на AWS:

    aws cloudformation deploy --template-file deploy-myservice.yml --stack-name mycontext-myservice-dev --capabilities CAPABILITY_IAM
    

Для записи я предпочитаю вариант C с NodeJS ...:)

...