如何在AWS Lambda上的serverless应用程序中存储和使用HTML模板(使用AWS SAM)?

2024-04-19 20:04:31 发布

您现在位置:Python中文网/ 问答频道 /正文

而不是

  • (A)按照更传统的方式在AWS上运行web应用程序(例如,在AWS EC2或Beanstalk上使用Ruby/Sinatra或Python/Flask),或者

  • (C)在S3中创建静态HTML和JavaScript文件,在AWS Lambda中创建动态API端点(将JSON数据发送到通过JavaScript使用/解释这些数据的静态网页),

我想达成一个中间立场:

  • (B) 在awslambda(例如,在Python中)中创建HTTP端点,这些端点读取并使用HTML模板来生成对客户端的完整HTML响应。在

这种设置将产生一个无服务器的web应用程序,其中AWS Lambda函数提供服务器端生成的HTML输出(讽刺的是,我没有忘记)。在

在AWS Lambda函数的Python代码中,可以包含HTML代码片段,在函数中修改(填充数据),并将HTML作为text/html输出返回给客户机。这种方法的缺点是HTML模板随后“嵌入”在Python代码中,而不是外部的单独文件中。在

问题1:如何引用代码包中某个地方的HTML模板文件-模板应该是包的一部分-让Python函数读取该文件,并通过模板中的变量替换生成HMTL页面?在

问题2:如何使用AWS无服务器应用程序模型(AWS-SAM)在我的项目中指定/包含/链接到一组HTML模板文件?在


Tags: 文件数据lambda函数代码aws模板web
1条回答
网友
1楼 · 发布于 2024-04-19 20:04:31

我不知道你从这里开始,所以我从头开始。在

  1. 创建引用处理程序和事件资源的YAML配置文件,并将其放入deployment文件夹中。

  2. 对于模板,使用“mustasheforpython”pystashe

  3. 在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>
    
  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。。。:)

相关问题 更多 >