AWS でサーバーレス アーキテクチャ、またはその少なくとも一部を構築したい場合、AWS Lambda サービスがその最も重要な部分になります。
これは、バックエンド クラスターやサーバーを起動せずに開発および実行できるサーバーレス コンピューティング関数 (通常は Node.JS または Python プログラミング言語で記述されます) です。複数の AWS Lambda 関数を接続して、より複雑なプロセスを形成できます。
ただし、Lambda 関数の重要な特性は、処理時間の制限です。これは最終的に、いつ AWS Lambda 関数を使用するのが正しい目的であるかを定義します。
タイムアウト間隔とは何ですか?
AWS Lambda 関数のタイムアウト機能は、関数が終了するまでに実行できる最大時間を定義する設定です。
Lambda 関数は有効期間が短く、ステートレスになるように設計されており、そのように使用する必要があります。チームが長時間実行プロセスに Lambda 関数をどのように利用しようとするかは、珍しい例外ではありません。彼らは、AWS Lambda のサーバーレスの性質の利点を活用したいという理由だけでこのようなことを行っています。特定の CPU とメモリ構成でサーバーを起動する必要がなく、コードを実行する方が常にコストが安くなります。なので、意図がわかりやすいです。
ただし、関数の実行時間が長すぎると、リソースの使用率とパフォーマンスの問題が発生する可能性があります。リソースがロックされる危険性があり、長時間実行されるプロセスの利点があるため、プロセス内のステップの最適化についてはあまり気にしない可能性が高くなります。突然ですが、5 分の待ち時間はそれほど問題ではありません。プロセス自体にとっては役に立たない場合でも、存在したままにしておくことができます。
デフォルトでは、Lambda 関数のタイムアウトはわずか 3 秒に設定されています。その場合、Lambda 関数内で実行するコードは 3 秒以内に完了する必要があるという事実を考慮する必要があります。これは、非常に迅速な通信と応答時間、場合によっては非常に短時間に数百万のトランザクションを伴うアーキテクチャを構築したい場合に最適です。ただし、これにより Lambda 関数の使用可能なユースケースが大幅に制限されるため、この制限を最大 900 秒 (15 分) まで増やすことができます。このタイムアウトに達すると、Lambda は関数を終了し、エラーコードを返します。
タイムアウト機能を設定するにはどうすればよいですか?
Lambda 関数のタイムアウトは、AWS マネジメントコンソール、AWS CLI、または AWS SDK を使用して設定できます。
これを実現するための具体的な手順は次のとおりです。
- AWS マネジメントコンソールを開き、Lambda サービスに移動します。
- 変更する Lambda 関数を選択します。
- 「構成」タブで、「一般構成」セクションまで下にスクロールし、「タイムアウト」設定を見つけます。
- その横にある「編集」ボタンをクリックします。
- 新しいタイムアウト値を秒単位 (1 ~ 900) で入力し、「保存」ボタンをクリックします。
- ページ上部の「保存」ボタンをクリックして、Lambda 関数への変更を保存します。
AWS CLI コマンドラインを使用して、Lambda 関数のタイムアウトを更新することもできます。コマンドの例を次に示します。
<code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900
このコマンドは、
[My_Lambda_Function_Name
] のタイムアウトを 15 分に設定します。そこに関数の実際の名前と希望のタイムアウト値を秒単位で入力するだけです。
いくつかの考慮事項
タイムアウト設定は、関数内の個々のコード ブロックや操作だけではなく、関数全体に適用されます。したがって、関数が大きなファイルの処理やネットワーク リクエストの実行など、長時間実行される操作を実行している場合は、最悪のシナリオであっても、タイムアウトが操作を完了するのに十分であることを確認する必要があります。 。
Lambda 関数は有効期間が短く、ステートレスになるように設計されていることに注意してください。これらは、小規模で個別のタスクを実行することを目的としています。 Lambda 関数が完了するまでに長い時間がかかっていることがわかった場合は、それをいくつかの小さな関数に分割することを検討するとよいでしょう。その後、トリガーによってそれらを 1 つずつ呼び出すことができます。たとえば、前の Lambda 関数の出力が特定の S3 バケットに保存されている場合です。
さらに、15 分の制限を超える長時間実行プロセスを実行する必要がある場合は、AWS Step Functions を使用して一連の Lambda 関数または他の AWS サービスを調整し、目的の結果を達成することを検討できます。
ベストプラクティス
タイムアウト自体の作業間隔は、大規模なトークを行うのに十分な長さではないようです。ほとんどの場合、開発者はすべての Lambda 関数に対して直接 15 分を設定することになります。たとえ関数がより早く終了するとしても、それによるマイナスの副作用はありません。
ただし、注意すべきベスト プラクティスがまだいくつかあります。
#1. 適切な値を定義する
関数の予想実行時間に基づいてタイムアウト値を設定する必要があります。これは基本的に、短すぎず、かつ不必要に長すぎない値を設定することを意味します。
たとえば、アプリケーションのアーキテクチャ上または全体的なパフォーマンス上の理由から、単一の Lambda 関数の全体の時間が 3 分を超えないようにしたい場合があります。
同様に、Lambda 関数がたとえば 3 分より早く終了しないようにしたい場合もあります。理由の 1 つは、Lambda コード内に再試行回数を入力する必要があることです。たとえば、コードを完了するために必要なリソースの一部がビジーまたはロックされている場合です。
したがって、タイムアウトを 15 分に設定する前に、最適な実行時間の値について少し考えてください。より正確な値の定義は、開発チーム全体に境界を与えるもう 1 つのツールにすぎません。
#2. 長期にわたる監視
タイムアウト制限を設定したら、Lambda 関数の実行時間を監視するように努めてください。これにより、最初の決定が正しかったのか、それとも調整が必要なのかについて重要な洞察が得られます。
CloudWatch メトリクスとログを使用して、関数の実行時間を追跡できます。次に、予想よりも時間がかかっているものと、予想よりもはるかに早く完了するものを特定します。
#3. 非同期呼び出し
ファイルのアップロードやキューからのメッセージなど、即時応答を必要としないイベントによって Lambda 関数がトリガーされる場合は、タイムアウトのリスクを軽減するために非同期呼び出しを使用します。これにより、応答を待たずに関数がバックグラウンドで実行されます。もちろん、これによりタイムアウトの量が減少する可能性があります。これは単に、関数がそのリソースに必要とする待機時間を Lambda の全体的な実行時間に含める必要がないためです。
#4. 複雑なプロセスにステップ関数を使用する
15 分の制限を超える長時間実行プロセスを実行する必要がある場合は、AWS Step Functions を使用して一連の Lambda 関数または他の AWS サービスを調整し、その結果を達成できます。 Step Function は、タイムアウト制限内で実行できる、より小さくて管理しやすいタスクにプロセスを分割します。
ステップ関数内で複数のラムダ関数を並行して実行することもできます。次に、ステップ関数がすべての並列ラムダ関数を待機してから、次に進みます。これは水平スケーリングの一種で、複数のラムダ関数が 1 つの問題を分割し、部分的に一緒に解決できます。
最終的に必要なのは、部分的な結果を収集して最終的な解決策を構築することだけです。これには、スタンドアロンのラムダ関数に従うもので十分です。
#5. コードを最適化する
Lambda 関数コードを最適化して、実行時間を短縮し、パフォーマンスを向上させることができます。これは、タイムアウト間隔がたまにだけでは不十分な場合に便利です。その場合、そのような失敗例を取り除くためにコードの最適化を検討する価値があるかもしれません。
タイムアウトは請求にどのような影響を与えますか?
AWS Lambda 関数のタイムアウト設定は、関数の請求に直接影響しません。 AWS Lambda は、リクエストの数と関数の実行時間に基づいて料金を請求します。
Lambda 関数のタイムアウト設定を増やすと、実行時間が長くなる可能性があります。ただし、関数が本当に追加の時間を必要とする場合に限ります。これを、実行に時間がかかる高頻度の関数と組み合わせると、コストが高くなることが予想されます。
ただし、関数が頻繁に呼び出されない場合、またはタイムアウト値に達する前にプロセスが完了する場合、請求への影響は最小限になる可能性があります。
このため、すべての Lambda 関数をデフォルトで 15 分のタイムアウトに設定しても、全体の処理コストが増加する主な理由ではない可能性があります。
ただし、間接的に全体的なコストの増加につながることは確かです。開発者は、使用する余地があると感じ、タイムアウトがより制限的ではあるが現実的な場合に考えられるほどコードを最適化しない可能性があります。
もう 1 つは、AWS Lambda には、1 か月あたり 100 万件の無料リクエストと 400,000 GB 秒のコンピューティング時間を含む無料利用枠が提供されていることです。 Lambda 関数の使用量が無料利用枠の制限内にある場合は、タイムアウト設定に関係なく、関数の実行時間に対して料金を支払う必要はありません。
最後の言葉
AWS Lambda 関数は、特に AWS クラウドでのサーバーレス処理にとって強力なツールです。それには、私たちが認識すべき目的と制限があります。設計されていないユースケースには使用しないようにしましょう。
これは、15 分を超える実行時間を必要としない、単純で非同期で理想的にトリガーされるアクションに最適です。さらに複雑な処理が必要な場合は、AWS Step Functions を使用して、複数の Lambda 関数を単一のオーケストレーションされたプロセスに結合します。あるいは、安価なサーバーレス処理を諦め、タスクを達成するために適切な構成とコンピューティング能力を備えたサーバーを使用します。
次に、初心者向けの AWS Lambda の概要を確認してください。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





