AWS Lambda 関数を Application Load Balancer のターゲットとして設定したときに発生する可能性のある問題のトラブルシューティング方法を知る必要があります。
解決方法
Elastic Load Balancing は、アプリケーションロードバランサーからのリクエストを処理するターゲットとしての Lambda 関数の使用をサポートしています。詳細については、「アプリケーションロードバランサーで AWS Lambda を使用する」を参照してください。
ステップ 1: Lambda 関数を作成する
1. Lambda コンソールの関数のページを開きます。
2. [関数を作成] を選択します。
-
作成者を最初から選択してください。
-
関数名を入力します。
-
「ランタイム」 ドロップダウンで、**このシナリオのランタイムとして「**Python 3.9」を選択します。
-
「実行ロール」で、「基本的な Lambda 権限を持つ新しいロールを作成する」を選択します。
**注:**実行ロールの詳細については、「Lambda 実行ロール」を参照してください。
7. [関数を作成] を選択します。
- 関数を作成したら、「コード」タブを選択します。コードソースセクションで、既存の関数コードを次のコードに置き換えます。
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"statusDescription": "200 OK",
"headers": {
"Content-Type": "text/html"
},
"isBase64Encoded": False,
"body": "<h1>Hello from Lambda!</h1>"
}
9. [デプロイ] を選択します。
ステップ 2: Lambda 関数のターゲットグループを作成する
**注:**詳細については、 手順 1 を参照してください。 ターゲットグループを設定します。
1. Amazon EC2 コンソールを開きます。
2. ナビゲーションペインの [ロードバランシング] で、 **[ターゲットグループ]**を選択します。
-
[ターゲットグループの作成] を選択します。
-
[基本設定] の [ターゲットタイプの選択] で、 [Lambda 関数] を選択します。
-
[ターゲットグループ名] で、ターゲットグループの名前を入力します。
-
(オプション) ヘルスチェックをオンにするには、「ヘルスチェック」セクションで「有効にする」を選択します。
-
(オプション) 次のように 1 つまたは複数のタグを追加します。
- 「タグ」セクションを拡張してください。
- [タグを追加] を選択します。
- タグキーとタグ値を入力します。
-
[次へ] を選択します。
-
ターゲットとして Lambda 関数を選択します。
-もしくは-
Lambda 関数を後で指定するには、 [後で関数を追加する] を選択します。
-
[ターゲットグループの作成] を選択します。
**注:**Lambda 関数を呼び出すためのロードバランサーの権限は、ターゲットグループの作成と関数の登録に使用する方法によって異なります。詳細については、「Lambda 関数を呼び出す権限」を参照してください。
ステップ 3: ロードバランサーとリスナーの設定
ロードバランサーとリスナーを設定するには、ステップ 3の手順に従ってください。 ロードバランサーとリスナーを設定します。
ステップ 4: ロードバランサーのテスト
ロードバランサーをテストするには、ステップ 4 の手順に従ってください。 ロードバランサーをテストします。セットアップが機能している場合、ブラウザに「** Lambda からこんにちは!**」と表示されます。
注:Lambda 関数のヘルスチェックをオンにしていない場合、ヘルスステータスは使用できません。ロードバランサーはアプリケーションロードバランサーのターゲットとしての Lambda 関数には影響しないため、ヘルスチェックなしでロードバランサーをテストすることができます。
ターゲットとしての Lambda 関数の限界
ターゲットとしての Lambda 関数の制限の詳細については、「 ターゲットとしての Lambda 関数」 を参照し、「制限」の情報を確認してください。
Lambda ターゲットグループは 1 つの Lambda 関数ターゲットに制限されています。詳細については、「 Lambda 関数の準備」を参照してください。
ターゲットとしての Lambda 関数のよくあるエラー
「接続がタイムアウトしました」
このエラーは、ロードバランサーのセキュリティグループがリスナーポートのトラフィックを許可していないことを示しています。このエラーを解決するには、セキュリティグループを管理し、セキュリティグループのインバウンドルールがリスナーポートでの受信トラフィックを許可しているかを確認してください。](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html)セキュリティグループはステートフル[なので、セキュリティグループにはアウトバウンドルールは必要ありません。許可されたインバウンドトラフィックへのレスポンスは、アウトバウンドルールに関係なくフローアウト可能です。
「ターゲットグループが見つかりませんでした」
このエラーは、ターゲットグループが削除されたことを示します。このエラーを解決するには、削除されたターゲットグループを含むリソースポリシーを削除します。リソースポリシーを削除すると、トリガーも削除されます。
1. Lambda コンソールの関数のページを開きます。
-
ターゲットグループに関連する Lambda 関数を選択します。
-
[設定] タブを選択し、 [権限] を選択します。
-
「リソースベースのポリシーステートメント」セクションまでスクロールし、削除するポリシーを選択します。
-
**[削除] ** を選択し、警告アラートで [削除] を選択して、ポリシーステートメントをリソースポリシーから完全に削除することを確認します。
次の remove-permission AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用して、リソースベースのポリシーを削除することもできます。
**注:**次のコマンドでは、EXAMPLE\ _FUNCTION を Lambda 関数名に、 EXAMPLE_ID をステートメント ID に置き換えてください。
aws lambda remove-permission --function-name EXAMPLE_FUNCTION --statement-id EXAMPLE_ID
**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用しているかどうかを確認してください。
「RegisterTargets オペレーションの呼び出し中にエラーが発生しました(AccessDenied)。エラスティロードバランシングプリンシパルにはターゲットグループから arn を呼び出す <Lambda ARN> 権限はありません <Target Group ARN>」
Lambda 関数へのリクエストが失敗すると、ロードバランサーは理由コードをアクセスログの ** error\ _reason ** フィールドに保存します。ロードバランサーは対応する Amazon CloudWatch メトリックスもインクリメントします。詳細については、「エラー理由コード」を参照してください。
AWS CLI を使用して Lambda 関数をターゲットとして登録します。addpermission AWS CLI コマンドを使用して、Lambda 関数を呼び出すためのアクセス権限をエラスティックロードバランシングに付与します。
ターゲットとしての Lambda 関数の既知のエラー
「この機能に関連する新しいメトリクス (LambdaUserError、LambdaInternalError、LambdaTargetProcessedBytes、StandardProcessedBytes) は ELB コンソールのモニタリングパネルでは使用することができません」
Amazon CloudWatch コンソールから Lambda メトリックスにアクセスします。
「新しい ModifyTargetGroup API では 120 秒のヘルスチェックタイムアウト値を設定可能ですが、ELB コンソールでは 60 秒を超える値を設定することはできません」
60 秒を超えるヘルスチェックのタイムアウトを設定するには、 AWS CLI から ModifyTargetGroup API を呼び出します。値は最大 120 秒に設定できます。
ターゲットグループ変更コマンドの例:
**注:**次のコマンドで、EXAMPLE_TARGET_GROUP_ARN をターゲットグループ ARN に置き換え、 EXAMPLE_REGION を AWS リージョンコードに置き換えます。
aws elbv2 modify-target-group \
--target-group-arn EXAMPLE_TARGET_GROUP_ARN \
--health-check-timeout-seconds 120 \
--region EXAMPLE_REGION
関連情報
Lambda がターゲットとして機能する
Lambda 関数のバージョン管理とエイリアス
エイリアスを使用したトラフィックシフト