メモリと計算能力が AWS Lambda のコストにどのように影響するかを把握したいと考えています。
簡単な説明
Lambda 開発者はメモリを使用して関数のパフォーマンスを制御できます。Lambda 関数に割り当てられるメモリの量は、128 MB から 10,240 MB の間です。Lambda コンソール では、新しい関数はデフォルトで 128 MB に設定されており、多くの開発者は関数に 128 MB を選択しています。
ただし、シンプルな Lambda 関数の場合にのみ 128 MB を選択するのがベストプラクティスです。たとえば、イベントを変換して他の AWS サービスにルーティングする関数。関数が次のアクションのいずれかを実行すると、その関数はメモリ割り当て量が高くなります。
- ライブラリをインポートします。
- Lambda レイヤーをインポートします。
- Amazon Simple Storage Service (Amazon S3) からロードされたデータを操作します。
- Amazon Elastic File System (Amazon EFS) からロードされたデータを操作します。
解決策
ラムダ関数の価格
Lambda の料金は、関数へのリクエスト数とコードの実行にかかる時間に基づいています。Lambda は、イベント通知に応答して呼び出すたびにリクエストをカウントします。これには Amazon Simple Notification Service (SNS) や Amazon EventBridge などが利用されます。さらに、Lambda は、呼び出しに応答して開始するたびにリクエストをカウントします。これには Amazon API Gateway から、または AWS SDK などが利用されます( Lambda コンソールからのテスト呼び出しを含む)。
所要時間は、コードの実行が開始されてから戻るか停止するまでの時間を、1 ミリ秒未満に切り上げて計算されます。詳細については、「 AWS Lambda 料金表」を参照してください。料金は、関数に割り当てるメモリの量によって異なります。メモリの量によって、関数で使用できる仮想 CPU の量も決まります。メモリを追加すると、それに比例して CPU の量が増え、それによって使用可能な計算能力も増加します。関数が CPU バウンド、ネットワークバウンド、またはメモリバウンドの場合、メモリ設定を変更するとパフォーマンスが向上する可能性があります。メモリサイズが大きくなると、関数で使用できる CPU も同様に増加します。
メモリ容量が Lambda コストに及ぼす影響
Lambda サービスは、関数で消費された合計ギガバイト秒数に対して課金します。合計時間が一定であれば、メモリの増加は全体のコストに影響します。ギガバイト秒は、メモリの合計 (ギガバイト単位) と継続時間 (秒単位) の積です。ただし、使用可能なメモリを増やすと、持続時間は短くなります。その結果、全体的なコストの増加はごくわずかであるか、減少することさえあります。
たとえば、素数を計算する関数を 1000 回呼び出すと、さまざまなメモリレベルでの平均所要時間は以下のようになります。
| | |
---|
メモリー | 所要時間 | コスト |
128 MB | 11.722 秒 | 0.024628 USD |
512 MB | 6.678 秒 | 0.028035 USD |
1024 MB | 3.194 秒 | 0.026830 USD |
1536 MB | 1.465 秒 | 0.02463 USD |
この例では、128 MB の場合、関数が完了するまでに平均で 11.722 秒かかり、1000 回の呼び出しで 0.024628 USD のコストがかかります。メモリを 1536 MB に増やすと、平均所要時間は 1.465 秒に低下するため、コストは 0.024638 USD になります。1000 分の 1 セントのコスト差で、この関数のパフォーマンスは 10 倍向上します。
メモリ消費量が設定された最大値に近づいたら、Amazon CloudWatch で機能を監視し、アラームを設定します。これにより、メモリに制約のある関数を識別できます。CPU バウンド関数と IO バウンド関数の場合は、時間を監視してより詳細な情報を得られるようにします。このような場合、メモリを増やすことで、コンピューティングやネットワークのボトルネックを解決できます。詳しくは、「 モニタリングとオブザーバビリティ」を参照してください。