Как хранить и использовать шаблоны 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 ответ

Решение

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

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

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

  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 папку, разверните SAM проект в AWS:

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

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

Другие вопросы по тегам