はじめに
ALBのターゲット先にLambdaを指定して、URLパラメーターから足し算ができるページを軽く作ってみました
フレームワークにJinja2を使用しています
目次
流れ
ALBのURLにパラメーターを渡すと足し算した結果が帰ってくるという動きです。
手順の概要
- 関数の作成
- レスポンス設定について
- ALBの作成
- 接続確認
実行環境
Python3.6.5
Jinja2
手順
準備
本来であればpipでインストールしますが事前に用意したLambdalayersを使用してみました。
ディレクトリ構造は以下のような形になります。
関数の作成
以下のようなものを作成してみました
from jinja2 import Environment, FileSystemLoader def lambda_handler(event, context): # jinja env = Environment(loader=FileSystemLoader('./', encoding='utf8')) result = env.get_template('result.html') answer = "" if event['path'] == "/": if event['queryStringParameters'] == "": answer = "何か入力してください" else: i = event['queryStringParameters'] print(i) answer = int(i["calc1"]) + int(i["calc2"]) print(answer) html = result.render({'answer':answer}) response = { "statusCode": 200, "statusDescription": "200 OK", "isBase64Encoded": False, "headers": { "Content-Type": "text/html; charset=utf-8" }, "body": html } return response
上からevent['path']にてパスを取得しevent['queryStringParameters']にてパラメーターを取得した後に計算をし、jinjaのレンダーに渡す形になっています。
eventオブジェクトはこのような内容になっています。
{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxx:targetgroup/lambda-http-test/xxxxxxxxxxxx" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": { "calc1": "12", "calc2": "22" }, "headers": { "accept": "*/*", "host": "lambdahttp-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com", "user-agent": "curl/7.47.0", "x-amzn-trace-id": "Root=x-xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx", "x-forwarded-for": "xxx.xxx.xx.xx", "x-forwarded-port": "80", "x-forwarded-proto": "http" }, "body": "", "isBase64Encoded": false }
レスポンスについてはAPIGatewayの時とは違い必ず設定する必要があります。
テンプレートのHTMLを作成
以下のものを作成しました
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>saba</title> </head> <body> 答えは{{ answer }}です </body> </html>
とくにいじっている部分もなく通常のJinja2の書き方でOKです。
ALBの作成
ALBから実際にLambdaを接続します
こちらのApplication Load Balancerですね。
「4.ルーティング設定」までとくにいじる部分はありません名前をつけ、アベイラビリティーゾーンには任意のものにチェックします。(セキュリティグループなど設定する場合は別です。)
ルーティング設定では以下の場所にチェックを入れ今回作成したLambdaを選択します
5.ターゲットの登録に移動しリストからLambda関数を選択します。
接続確認
URL欄に ALBのDNS+?calc1=12&calc2=12を打って試してみたいと思います。
計算結果でたので成功ですね
まとめ
とりあえず動的ページを作成したかったので随分雑なコードになってしまいましたがしっかり動いたのは嬉しいですね。
今回のアップデートはさらにサーバーレスの幅を広げるようなものであり期待ですがFlaskなどにも対応してくれるといいなぁと思います。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?