記事 Lambda functions as targets for Application Load Balancers | Networking & Content Delivery にあるように ALB のターゲットに Lambda 関数を登録できるようになったので試してみました。
1. Lambda 関数を作成
event をそのまま出力する関数を作成
exports.handler = async (event) => {
var res = {
statusCode: 200,
statusDescription: '200 OK',
isBase64Encoded: false,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
};
res['body'] = JSON.stringify(event);
return res;
};
2. Lambda のリソースポリシーを追加
ALB が Lambda を Invoke できるようにリソースポリシーを設定します
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "😇",
"Effect": "Allow",
"Principal": {
"Service": "elasticloadbalancing.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-1:😇:function:😇",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:elasticloadbalancing:ap-northeast-1:😇:targetgroup/😇/😇"
}
}
}
]
}
3. ターゲットグループを作成
ターゲットグループを作成するときに Lambda を選択できるようになっているので選択し、作成した Lambda 関数をターゲットとして登録します
4. ALB のリスナールールにターゲットグループへの転送ルールを設定
適当なルールを作って Lambda を呼び出せるようにしましょう
5. テスト
ニッコリ
$ curl 'https://....../'
{
"requestContext": {
"elb": {
"targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:😇:targetgroup/😇/😇"
}
},
"httpMethod": "GET",
"path": "/",
"queryStringParameters": {
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br",
"accept-language": "ja,en-US;q=0.9,en;q=0.8",
"cookie": "_ga=GA1.2.1627710522.1535328146",
"host": "......",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"x-amzn-trace-id": "Root=1-5c009d73-777f39f4b5723674feb126ec",
"x-forwarded-for": "😇",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"body": "",
"isBase64Encoded": true
}
感想
ベンリ