11

それ以外の

  • (A) AWS で Web アプリケーションを実行するための従来のルートに従う (AWS EC2 または Beanstalk で Ruby/Sinatra または Python/Flask を使用するなど)、または

  • (C) S3 で静的 HTML および JavaScript ファイルを作成し、AWS Lambda で動的 API エンドポイントを作成する (JavaScript を介してそのデータを使用/解釈する静的 Web ページに JSON データを送信する)、

私は中間点に到達したい:

  • (B) クライアントへの完全な HTML 応答を生成するために HTML テンプレートを読み取って使用する HTTP エンドポイントを AWS Lambda (Python など) で作成します。

その設定により、AWS Lambda 関数がサーバー側で生成された HTML 出力を配信するサーバーレス Web アプリケーションが作成されます (皮肉なことに私は皮肉なことを忘れていません)。

AWS Lambda 関数の Python コードでは、HTML コード スニペットを含め、それを関数に変更 (データを入力) し、HTML をtext/html出力としてクライアントに返すことができます。このアプローチの欠点は、HTML テンプレートが Python コードに「埋め込まれ」、別のファイルの外部にないことです。

Q1: コード パッケージのどこかにある HTML テンプレート ファイル (テンプレートはパッケージの一部である必要があります) を参照するにはどうすればよいですか? Python 関数でそれを読み取り、テンプレート内の変数置換によって HMTL ページを生成しますか?

Q2: AWS Serverless Application Model (AWS SAM) を使用して、自分のプロジェクトで一連の HTML テンプレートファイルを指定/インクルード/リンクするにはどうすればよいですか?

4

1 に答える 1

8

ここからどこから始めているのかわからないので、最初から始めます。

  1. ハンドラーとイベント リソースを参照する YAML 構成ファイルを作成し、deploymentフォルダーに配置します。

  2. テンプレート化には、「Mustashe for Python」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. フォルダーから、deploymentS3 に準備してアップロードする SAM プロジェクトをパッケージ化します。

    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
    

記録のために、私は NodeJS を使用したオプション C を好みます... :)

于 2018-10-25T13:25:42.550 に答える