書くきっかけ
Pythonコードの中に直書きしたHTMLを、クライアントからリクエストがあったときにブラウザで表示するコードを書いてみました。
自分の話で恐縮ですが、ちょっとApi GatewayとLambdaのテストをしてみたいと思ったときに、HTMLレスポンスが返せる簡単なLambda関数を用意したくなります。
そういった際に使えるのではと考えました。
使うもの
AWSで以下のものを使います。
- Api Gateway
- Lambda (Python 3.9)
やってみる
Lambda
以下の設定値でLambda関数を作成しました。ほかはデフォルトの設定値です。
項目 | 設定値 |
---|---|
関数名 | htmlResponseFunc |
ランタイム | Python 3.9 |
ハンドラ | lambda_function.lambda_handler |
アーキテクチャ | x86_64 |
コード
string
型でHTMLを記述し、それをbytes
型に変換するところがポイントだと思います。
import base64
def lambda_handler(event, context):
str_html = '''
<!DOCTYPE html>
<html lang="ja">
<head>
<title>TestTitle</title>
<meta charset="utf-8"/>
</head>
<body>
<h1>This is a test of ApiGateway and Lambda</h1>
</body>
</html>'''
bytes_html = bytes(str_html, 'utf-8')
result = base64.b64encode(bytes_html)
return result
Api Gateway
作成
以下の設定値でApi Gatewayを作成しました。
項目 | 設定値 |
---|---|
プロトコル | REST |
API名 | htmlResponseApiGw |
エンドポイントタイプ | リージョン |
リソース
GETメソッドのリソースを作ります。
統合タイプ
はLambda関数
として、Lambda関数
に先ほど作成したLambda関数の関数名を入力します。
メソッドレスポンス
のコンテンツタイプ
のみtext/html
に変更しました。
統合レスポンス
のコンテンツの処理
をバイナリに変換(必要な場合)
に変更しました。
こちらをdev
というステージを作成してデプロイしました。
URLの呼び出し
に記載されてURLにアクセスしてみます。
結果
あとがき
こちらの簡単な環境を使用して、Api Gatewayのステージ変数の動作確認をやってみたいと思います。
参考サイト