全般

Q: AWS Lambda はどのようなサービスですか?

AWS Lambda を使用することで、サーバーのプロビジョニングや管理をすることなく、コードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。コードさえアップロードすれば、高可用性を実現しながらコードを実行およびスケーリングするために必要なことは、すべて Lambda により行われます。コードは、他の AWS のサービスから自動的にトリガーするよう設定することも、ウェブやモバイルアプリケーションから直接呼び出すよう設定することもできます。

Q: サーバーレスコンピューティングとは何ですか?

サーバーレスコンピューティングを使うことで、サーバーを考慮することなく、アプリケーションやサービスを構築、実行できます。サーバーレスコンピューティングを使用すると、アプリケーションは引き続きサーバーで実行されますが、サーバーの管理はすべて AWS によって行われます。サーバーレスコンピューティングの中核となるのは AWS Lambda です。これにより、コードを実行する際のサーバーのプロビジョニングや管理は必要なくなります。

Q: AWS Lambda 関数をトリガーできるのはどのようなイベントですか?

イベントソースの一覧については、AWS のドキュメントをご覧ください。

Q: AWS Lambda と Amazon EC2 はどのように使い分ければよいですか?

アマゾン ウェブ サービスは広範囲のニーズに応えるために複数のコンピューティングサービスを提供しています。

Amazon EC2 は、幅広いインスタンスタイプ、オペレーティングシステムをカスタマイズするオプション、ネットワークとセキュリティの設定、完全なソフトウェアスタックにより既存のアプリケーションを簡単にクラウドに移行できる柔軟性が特徴です。Amazon EC2 を使用する場合、容量のプロビジョニング、全体の健全性およびパフォーマンスのモニタリング、耐障害性およびスケーラビリティの設計はお客様が担当します。AWS Elastic Beanstalk はウェブアプリケーションのデプロイおよびスケーリング用の使いやすいサービスで、お客様が基盤となる EC2 インスタンスを所有して全面的に管理します。Amazon EC2 Container Service は、スケーラブルな管理サービスとして、Docker コンテナをサポートし、Amazon EC2 インスタンスのマネージド型クラスターでの分散型アプリケーションの実行を容易にします。

AWS Lambda は Amazon S3 バケットに対する変更、Amazon DynamoDB テーブルの更新、アプリケーションやデバイスにより生成されたカスタムイベントなどのイベントの発生時にコードを簡単に実行できるサービスです。Lambda では、お客様はインスタンスをプロビジョニングする必要がありません。容量のプロビジョニング、全体の健全性のモニタリング、基盤となるコンピューティングリソースに対するセキュリティパッチの適用、コードのデプロイ、ウェブサービスのフロントエンドの実行、コードのモニタリングおよびロギングなどの運用および管理上の処理は、お客様に代わって Lambda が実行します。AWS Lambda は、お客様による追加作業なしで、コードの容易なスケーリングと高可用性を実現します。

Q: AWS Lambda ではどんなコードが実行できますか?

AWS Lambda には、クラウドでのさまざまなアクティビティを容易に実行するための方法が用意されています。たとえば、Amazon DynamoDB からデータを取得して変換するモバイルバックエンド、Amazon S3 へのアップロード時にオブジェクトを圧縮または変換するハンドラー、任意のアマゾン ウェブ サービスに対する API 呼び出しの監査とレポート生成、Amazon Kinesis を使用したストリーミングデータのサーバーレス処理の構築に AWS Lambda を使用できます。

Q: AWS Lambda がサポートする言語は何ですか?

AWS Lambda は、ネイティブでは、Java、Go、PowerShell、Node.js、C#、Python、Ruby のコードをサポートしています。また、関数の作成にその他のプログラミング言語を使用できるようにするための Runtime API を提供しています。Node.jsPythonJavaRubyC#GoPowerShell の使用に関するドキュメントをご覧ください。

Q: AWS Lambda を実行するインフラストラクチャにアクセスできますか?

いいえ。AWS Lambda はお客様に代わってコンピューティングインフラストラクチャを運用し、健全性チェックの実行、セキュリティパッチの適用、その他の定期的なメンテナンスを担当します。

Q: AWS Lambda はどのようにコードを隔離しますか?

それぞれの AWS Lambda 関数は隔離された環境で実行されており、独自のリソースおよびファイルシステムビューを使用しています。AWS Lambda は Amazon EC2 と同じ技術を使用しており、インフラストラクチャレベルと実行レベルでのセキュリティと分離を実現しています。

Q: AWS Lambda はどのようにコードを保護しますか?

AWS Lambda は Amazon S3 にコードを保存し、実行時以外は暗号化します。また、AWS Lambda はコードを使用している間に追加の整合性チェックを実行します。

Q: AWS Lambda ではどの AWS リージョンを利用できますか?

AWS グローバルインフラストラクチャのリージョン表をご覧ください。

AWS Lambda 関数

Q: AWS Lambda 関数とは何ですか?

AWS Lambda で実行するコードは「Lambda 関数」としてアップロードされます。それぞれの関数は名前、説明、エントリポイント、リソース要件などの設定情報と関連付けられています。基盤となるコンピューティングインフラストラクチャに依存しないように、コードは必ず「ステートレス」なスタイルで書く必要があります。ローカルファイルシステムのアクセス、子プロセス、その他類似のアーティファクトはリクエストの有効期限を越えて延長されず、永続的な状態はすべて Amazon S3、Amazon DynamoDB、Amazon EFS、その他のインターネットが利用可能なストレージサービスに保存されます。ネイティブライブラリも含めて、Lambda 関数にはライブラリを利用できます。

Q: AWS Lambda は関数インスタンスを再利用しますか?

パフォーマンス向上のため、AWS Lambda は新しく関数のインスタンスを作成するのではなく、関数のインスタンスを保持してその後のリクエストに対応することがあります。Lambda で関数インスタンスを再利用する方法の詳細については、AWS のドキュメントを参照してください。ただし、常にインスタンスを再利用するわけではありません。

Q: AWS Lambda 関数のためにディスクにスクラッチスペースが必要な場合はどうすればよいですか?

各 Lambda 関数では /tmp ディレクトリに 500 MB の容量 (非永続型) を割り当てることができます。

Q: なぜ AWS Lambda 関数はステートレスでなければならないのですか?

関数をステートレスにすることにより、AWS Lambda はイベントの受信回数に合わせスケールするのに必要な数の関数のコピーを迅速に実行できます。AWS Lambda のプログラムモデルはステートレスですが、コードは Amazon S3 または Amazon DynamoDB など他のウェブサービスを呼び出すことで、ステートフルなデータにアクセスできます。

Q: AWS Lambda 関数コードでスレッドやプロセスを使用できますか?

はい。AWS Lambda では追加スレッドおよびプロセスの作成など、通常の言語およびオペレーティングシステムの機能が使用できます。メモリ、実行時間、ディスク、ネットワーク利用など、Lambda 関数に割り当てられたリソースは、必ず使用するすべてのスレッドまたはプロセスで共有されます。プロセスは、Amazon Linux によってサポートされている任意の言語を使用して起動できます。

Q: AWS Lambda 関数コードにはどのような制限が適用されますか?

Lambda では、通常の言語およびオペレーティングシステムの処理にできるだけ制限を課さないようにしています。ただし、AWS Lambda によりインバウンドネットワーク接続がブロックされること、アウトバウンド接続では TCP/IP および UDP/IP ソケットのみに対応していること、ptrace (デバッグ) システム呼び出しがブロックされることなど、無効化される処理がいくつかあります。TCP ポート 25 のトラフィックも、スパム対策のため、ブロックされます。

Q: Lambda コンソールを使用して AWS Lambda 関数を作成するにはどうすればよいですか?

Node.js または Python を使用している場合は、関数の作成およびテストが可能な AWS Lambda コンソールのコードエディタを使用して関数のコードを作成し、堅牢で IDE に似た環境で関数実行結果を表示できます。コンソールの使用を開始

お使いのローカル環境から AWS Lambda コンソールを使用して、ZIP 形式でコード (および任意の依存ライブラリ) をパッケージングしてアップロードするか、ZIP ファイルのある Amazon S3 のロケーションを指定できます。アップロードするデータは 50 MB(圧縮後)より小さくしてください。AWS Eclipse プラグインを使用すると、Java で Lambda 関数を作成およびデプロイできます。Visual Studio プラグインを使用すると、C# および Node.js で Lambda 関数を作成およびデプロイできます。

Q: Lambda CLI を使用して AWS Lambda 関数を作成するにはどうすればよいですか?

お使いのローカル環境から AWS CLI を使用して、ZIP 形式でコード (および任意の依存ライブラリ) をパッケージングしてアップロードするか、ZIP ファイルのある Amazon S3 のロケーションを指定できます。アップロードするデータは 50 MB(圧縮後)より小さくしてください。「Lambda 開始方法ガイド」で使用を開始する。

Q: AWS Lambda は環境変数をサポートしていますか?

はい。AWS Lambda Console、CLI、または SDK から簡単に環境変数を作成および変更できます。環境変数の詳細については、ドキュメントを参照してください。

Q: 機密情報を環境変数に格納できますか?

データベースのパスワードなどの機密情報については、AWS Key Management Service を使用してクライアント側で暗号化し、この暗号化した値を環境変数に暗号文として格納することをお勧めします。これらの値を復号するために、AWS Lambda 関数コードにロジックを含める必要があります。

Q: AWS Lambda 関数はどのように管理すればよいですか?

AWS Lambda コンソールのダッシュボードを使用して簡単に Lambda 関数をリスト化、削除、更新、モニタリングできます。AWS CLI および AWS SDK を使用して Lambda 関数を管理することもできます。詳細については、Lambda デベロッパーガイドをご覧ください。

Q: 関数の間でコードを共有できますか?

はい。コード (フレームワーク、SDK、ライブラリ、その他) は Lambda Layer としてパッケージ化し、これを管理して複数の関数で共有できます。

Q: どうすれば AWS Lambda 関数をモニタリングできますか?

AWS Lambda はお客様に代わって Lambda 関数を自動でモニタリングし、Amazon CloudWatch を使用して合計リクエスト数、アカウントレベルおよび関数レベルの同時実行使用率、レイテンシー、エラー率、リクエストのスロットリングなどのリアルタイムメトリクスを報告します。お客様は、Amazon CloudWatch コンソールまたは AWS Lambda コンソールを介して自作の各 Lambda 関数の統計情報を確認できます。Lambda 関数内でサードパーティのモニタリング API を呼び出すこともできます。

詳しくは CloudWatch メトリクスのトラブルシューティングをご覧ください。Lambda の組み込みメトリックを使用する場合は、AWS Lambda の標準料金が課されます。

Q: AWS Lambda 関数の障害をどのように解決できますか?

AWS Lambda は自動的に Amazon CloudWatch Logsと統合されます。これにより、各 Lambda 関数ごとにロググループが作成され、基本的なアプリケーションライフサイクルイベントのログエントリ(Lambda 関数の使用ごとに消費されるリソースのログなど)が生成されます。お客様は、自分のコードに、追加のログ出力文を簡単に挿入できます。Lambda 関数内でサードパーティのロギング API を呼び出すこともできます。詳しくは Lambda Function のトラブルシューティングをご覧ください。Amazon CloudWatch logs の料金が適用されます。

Q: どうすれば AWS Lambda 関数をスケールできますか?

Lambda 関数をスケールする必要はありません。AWS Lambda がお客様に代わってスケールします。関数に対してイベントが通知されるたびに、AWS Lambda は迅速にコンピューティングシステム全体から空いている容量を見つけてコードを実行します。コードがステートレスなため、AWS Lambda は時間のかかるデプロイや設定によって遅れを出すことなく必要な数だけインスタンスを実行できます。関数のスケーリングに基本的な上限はありません。AWS Lambda はイベントの受信回数に合わせて容量を動的に割り当てます。

Q: コンピューティングリソースはどのように AWS Lambda 関数に割り当てられるのですか?

AWS Lambda のリソースモデルでは、お客様が関数に必要なメモリ量を指定すると、それに比例した CPU パワーとその他のリソースが割り当てられます。例えば、256 MB のメモリを指定した場合に Lambda 関数に割り当てられる CPU パワーは、128 MB のメモリを指定した場合の約 2 倍となり、512 MB のメモリを指定した場合の約半分となります。詳細については、関数の設定に関するドキュメントをご覧ください。

メモリは 128 MB から 10,240 MB まで設定できます。

Q: 3008 MB を超えるメモリで AWS Lambda 関数を使用する必要があるのはどのような場合ですか?

メモリまたはコンピューティング負荷の高いワークロードを実行しているお客様は、より多くのメモリを使用して関数を実行できるようになりました。より大きなメモリの関数は、マルチスレッドアプリケーションの実行速度を向上させ、機械学習、バッチおよび ETL ジョブ、財務モデリング、ゲノミクス、HPC、メディア処理などのデータを大量に消費し、コンピューティング負荷の高いアプリケーションに最適です。

Q: AWS Lambda 関数はどれくらいの時間実行できますか?

AWS Lambda 関数は、1 回あたりの実行時間を最長 15 分に設定することができます。タイムアウトは 1 秒から 15 分までの間で任意に設定できます。

Q: AWS Lambda 関数の料金はどのように請求されますか?

AWS Lambda は使用した分のみ料金が発生します。詳細については、AWS Lambda の料金ページをご覧ください。

Q: Compute Savings Plan では、AWS Lambda の利用料を節約することができますか?

はい。Compute Savings Plans では、Amazon EC2 と AWS Fargate での割引に加え、AWS Lambda の利用料も節約できるようになりました。Compute Savings Plans により、Duration、Provisioned Concurrency、および Duration (Provisioned Concurrency) おいて、最大 17% の割引がご利用いただけます。Compute Savings Plans の割引は、Lambda の請求にある Requests の分は対象としていません。ただし、Compute Savings Plans へのコミットメントは、標準料金の Requests に適用されます。

Q: AWS Lambda はバージョニングをサポートしていますか?

はい。デフォルトでは、各 AWS Lambda 関数には、最新バージョンのコードが 1 つ存在します。Lambda 関数のクライアントでは、特定のバージョンを呼び出したり、最新の実装を取得したりできます。Lambda 関数のバージョニングに関するドキュメントをお読みください。

Q: コードのアップロード後、AWS Lambda 関数を呼び出せるようになるまでにどのくらい時間がかかりますか?

コードのサイズに応じてデプロイ時間は異なりますが、通常 AWS Lambda はアップロードから数秒で呼び出せるようになります。

Q: サポートされているライブラリを独自のバージョンで使用できますか?

はい。自分用にコピーしたライブラリ(AWS SDK を含む)をインクルードすることで、AWS Lambda によって提供されているデフォルトのライブラリとは異なるバージョンを使用できます。

AWS Lambda を使用した AWS イベントの処理

Q: イベントソースとは何ですか?

イベントソースは AWS のサービスまたはデベロッパーが構築したアプリケーションで、AWS Lambda 関数の実行をトリガーするイベントの発生元です。サービスによっては、直接クラウド機能(Amazon S3 など)を起動することで Lambda にイベントを送信します。Lambda はイベントを送信していない他のサービスのリソースをポーリングすることもできます。たとえば、Lambda では Amazon Kinesis ストリームまたは Amazon SQS キューからレコードを取得し、取得した各メッセージに対して Lambda 関数を実行できます。

Amazon S3 にロギングし、S3 バケットの通知を使用して AWS Lambda 関数をトリガーすることで、AWS CloudTrail などの他の多くのサービスがイベントソースとして機能します。

Q: どのイベントソースを AWS Lambda で使用できますか?

イベントソースの一覧については、AWS のドキュメントをご覧ください。

Q: AWS Lambda でイベントはどのように表示されますか?

イベントはインプットパラメータとして Lambda 関数に送信されます。Amazon SQS、Amazon Kinesis および Amazon DynamoDB Streams などイベントがバッチで送られるイベントソースでは、お客様がリクエストするバッチサイズに応じて、1 回の呼び出しで複数のイベントがイベントパラメータに含まれます。Amazon S3 イベント通知の詳細については、Configuring Notifications for Amazon S3 Events をご覧ください。Amazon DynamoDB Streams の詳細については、DynamoDB Stream デベロッパーガイドをご覧ください。Amazon SNS を使用して Lambda 関数を呼び出す方法の詳細については、Amazon SNS デベロッパーガイドをご覧ください。Amazon Cognito イベントの詳細については、Amazon Cognito をご覧ください。AWS の各種サービスにおける AWS CloudTrail のログおよび監査 API コールの詳細については、AWS CloudTrail を参照してください。

Q: Amazon S3 バケットの変更に対応する AWS Lambda 関数を作成するにはどうすればよいですか?

AWS Lambda コンソールから関数を選択し、Amazon S3 バケットからの通知に関連付けます。または、Amazon S3 コンソールを使用してバケットの通知を AWS Lambda 関数に送信するように設定します。AWS SDK および CLI からも同じ機能が使用できます。

Q: Amazon DynamoDB テーブルの更新に対応する AWS Lambda 関数を作成するにはどうすればよいですか?

DynamoDB テーブルの更新に対して Lambda 関数をトリガーするには、Lambda 関数を、当該テーブルに関連付けられた DynamoDB Stream でサブスクライブします。DynamoDB Stream を Lambda 関数に関連付けるには、Amazon DynamoDB コンソール、AWS Lambda コンソールまたは Lambda の registerEventSource API を使用します。

Q: Amazon Kinesis ストリームのレコードを AWS Lambda 関数で処理するにはどうすればよいですか?

AWS Lambda コンソールで Lambda 関数を選択して、同じアカウントによって所有されている Amazon Kinesis ストリームに関連付けます。AWS SDK および CLI からも同じ機能が使用できます。

Q: AWS Lambda は Amazon Kinesis ストリームおよび Amazon DynamoDB ストリームからのデータをどのように処理しますか?

AWS Lambda 関数に送られる Amazon Kinesis ストリームおよび DynamoDB ストリームのレコードは、シャードごとに厳密にシリアル化されます。つまり、Lambda で同じシャードに 2 つのレコードが置かれた場合、最初のレコードに対する Lambda 関数の呼び出しは、2 つ目のレコードに対する呼び出しより前に実行されることが保証されます。あるレコードに対する呼び出しがタイムアウトになったり制限されたりした場合、またはその他のエラーが発生した場合、Lambda は成功するまで (またはレコードが 24 時間の有効期限切れになるまで) 次のレコードに移動しません。異なるシャードにあるレコード間の順序は保証されず、各シャードの処理は並行して行われます。

Q: 分析のニーズに合わせて、AWS Lambda と Amazon Kinesis Data Analytics のどちらを選択すればよいですか?

AWS Lambda により、Amazon Kinesis または Amazon DynamoDB Streams のデータに対して、最大 15 分の短いウィンドウで時間ベースの集計 (カウント、最大、合計、平均など) を、シャードなど、1 つの論理パーティションで実行できます。これにより、ビジネスと分析ロジックを同じ関数に配置できるため、アーキテクチャを複雑化することなく、イベントベースのアプリケーション用にシンプルな分析を簡単に設定できます。Lambda では、イベントのタイムスタンプに基づいて、最大 15 分のタンブリングウィンドウで集計できます。Amazon Kinesis Data Analytics では、柔軟な処理の選択と、重複のない 1 回限りの処理による堅牢なフォールトトレランス、および複数の論理パーティションにまたがるデータストリーム全体に対して実行できる分析をサポートするより複雑な分析アプリケーションを構築できます。KDA では、イベント時間または処理時間のいずれかを使用して、複数のタイプの集計ウィンドウ (タンブリングウィンドウ、スタガーウィンドウ、スライディングウィンドウ、セッションウィンドウ) のデータを分析できます。

  AWS Lambda Amazon KDA
タンブリングウィンドウ
スタガーウィンドウ
スライディングウィンドウ
セッションウィンドウ
エンリッチメント
共同入力テーブルと参照テーブル
入力ストリームの分割
正確に 1 回の処理
最大時間枠 15 分 制限なし
集計範囲 パーティション/シャード ストリーム
時間セマンティクス イベント時間 イベント時間、処理時間

Q: AWS Lambda 関数を使用して、Amazon Simple Notification Service (SNS) によって送信された通知に応答するにはどうすればよいですか?

AWS Lambda コンソールで Lambda 関数を選択し、Amazon SNS トピックに関連付けます。AWS SDK および CLI からも同じ機能が使用できます。

Q: AWS Lambda 関数を使用して、Amazon Simple Email Service (SES) によって送信された E メールに応答するには、どうすればよいですか?

Amazon SES コンソールで、Amazon SES が AWS Lambda 関数にお客様のメッセージを配信するように、受信ルールを設定できます。AWS SDK および CLI でも同じ機能を利用できます。

Q: AWS Lambda 関数を使用して Amazon CloudWatch アラームに応答するにはどうすればよいですか?

まず、Amazon SNS 通知を送信するようにアラームを設定します。次に、AWS Lambda コンソールで Lambda 関数を選択し、Amazon SNS トピックに関連付けます。Amazon CloudWatch アラームの設定の詳細についてはAmazon CloudWatch デベロッパーガイドをご覧ください。

Q: AWS Lambda 関数を使用して、Amazon Cognito によって管理されているユーザーデータ、またはデバイスデータの変更に応答するにはどうすればよいですか?

AWS Lambda コンソールで、Amazon Cognito ID プールに関連付けられたデータセットが同期されたときにトリガーされる関数を選択します。AWS SDK および CLI からも同じ機能が使用できます。Amazon Cognito を使用して同一ユーザーのデバイス間でデータを共有および同期する方法の詳細については、Amazon Cognito をご覧ください。

Q: アプリケーションで AWS Lambda 関数を直接トリガーするにはどうすればよいですか?

AWS Lambda の invoke API でカスタムイベントを使用して、Lambda 関数を呼び出すことができます。関数の所有者または所有者が許可を与えた他の AWS アカウントのみ関数を呼び出すことができます。詳しくは、Lambda デベロッパーガイドをご覧ください。

Q: イベントへの応答として AWS Lambda 関数を呼び出す場合のレイテンシーはどの程度ですか?

AWS Lambda は、数ミリ秒以内にイベントを処理するように設計されています。Lambda 関数の作成および更新の直後、または関数が最近使用されていなかった場合はレイテンシーが高くなります。

Q: AWS Lambda を使用してモバイルバックエンドを作成するにはどうすればよいですか?

AWS Lambda で実行するコードをアップロードして、そのコードを AWS Mobile SDK に含まれている AWS Lambda SDK を使用して、モバイルアプリケーションから呼び出します。直接(同期)呼び出しによってリアルタイムでデータの取得またはチェックを行うか、非同期呼び出しを使用できます。また、Amazon API Gateway を使用してカスタム API を定義し、任意の REST で互換性のあるクライアントを使用して Lambda 関数を呼び出すこともできます。AWS Mobile SDK の詳細は、AWS Mobile SDK ページを参照してください。Amazon API Gateway の詳細は、Amazon API Gateway ページを参照してください。

Q: HTTPS を通して AWS Lambda 関数を呼び出すにはどうすればよいですか?

HTTPS を通して Lambda 関数を呼び出すには、Amazon API Gateway を使用してカスタムの RESTful API を定義します。これにより関数のためのエンドポイントが設定され、GET、PUT、POST などの REST の呼び出しに応答できます。Amazon API Gateway と AWS Lambda を合わせて使用する方法の詳細をご覧ください。

Q: 自作の AWS Lambda 関数で、リクエストを出す側のデバイスおよびアプリケーションに対する動作をカスタマイズするにはどうすればよいですか?

AWS Mobile SDK 経由で呼び出された AWS Lambda 関数は、呼び出し側のデバイスおよびアプリケーションに関するインサイトを「context」オブジェクトを介して自動的に取得します。

Q: 自作の AWS Lambda 関数で、アプリケーションのエンドユーザー ID に基づいて動作をカスタマイズするにはどうすればよいですか?

アプリケーションが Amazon Cognito ID を使用している場合、エンドユーザーは、各種の共通ログインプロバイダー (Amazon、Facebook、Google、およびその他の OpenID Connect 互換サービスなど) を使用して認証を受けることができます。その後、ユーザー ID が Amazon Cognito ID の形で自動的かつ安全に Lambda 関数に渡され、Lambda 関数は Amazon Cognito からユーザーデータにアクセスできるようになります。ユーザー ID は、Amazon DynamoDB またはその他のウェブサービスに対してデータの保存または取得を行うためのキーとして Lambda 関数に渡される場合もあります。

Q: AWS Lambda を使用して Alexa スキルを作成するにはどうすればよいですか?

AWS Lambda は、Alexa Skills Kit (Alexa の音声駆動型機能 ("スキル") の作成を容易にするためのセルフサービス API、ツール、ドキュメント、コードサンプルのコレクション) に組み込まれています。作成する新しい Alexa スキルの Lambda 関数コードをアップロードすれば、残りの作業 (Alexa の音声対話に応えてコードを実行し、お客様に代わって自動的にコンピューティングリソースを管理する) は AWS Lambda で実行されます。詳細については、Alexa Skills Kit のドキュメントをご覧ください。

Q: 関数がイベントの処理に失敗した場合はどうなりますか?

Amazon S3 バケット通知とカスタムイベントに関しては、コードにエラーがある場合や、サービスまたはリソースの上限を超えた場合、AWS Lambda は関数の実行を 3 回試行します。

Amazon DynamoDB ストリームおよび Amazon Kinesis Streams などお客様に代わって AWS Lambda がポーリングする指定イベントソースに関しては、デベロッパーのコードにエラーがある場合、Lambda はデータの有効期限が切れるまで実行を試行します。Amazon Kinesis および Amazon DynamoDB コンソール、AWS Lambda が関数に向けて生成した Amazon CloudWatch メトリクスを使用して進行状況をモニタリングできます。エラーまたは実行スロットリング率に基づいて、Amazon CloudWatch アラームを設定することもできます。

AWS Lambda を使用したアプリケーションの構築

Q: サーバーレスアプリケーションとは何ですか?

Lambda ベースのアプリケーション (サーバーレスアプリケーションとも言います) はイベントによってトリガーされる関数で構成されています。一般的なサーバーレスアプリケーションは、Amazon S3 へのオブジェクトアップロード、Amazon SNS 通知、API アクションなどのイベントによってトリガーされる 1 つまたは複数の関数からなります。これらの関数はスタンドアローンでもよく、DynamoDB テーブルや Amazon S3 バケットなどの他のリソースを利用することも可能です。最も基本的なサーバーレスアプリケーションは単なる関数です。

Q: サーバーレスアプリケーションはどのようにデプロイして管理するのですか?

サーバーレスアプリケーションは AWS Serverless Application Model (AWS SAM) を使用してデプロイし、管理できます。AWS SAM は、AWS でサーバーレスアプリケーションを表現するためのルールを規定する仕様です。この仕様は、今日 AWS CloudFormation によって使用されている構文と合致し、一連のリソースタイプ (「サーバーレスリソース」と呼ばれます) として AWS CloudFormation 内でネイティブにサポートされています。これらのリソースによって、AWS のお客様は CloudFormation を使用し、既存の CloudFormation API を使用して簡単にサーバーレスアプリケーションを構成し、デプロイできます。

Q: AWS コミュニティによって開発された既存のサーバーレスアプリケーションをどのように発見できますか?

AWS Serverless Application Repository を使用して、AWS コミュニティ内のデベロッパー、企業、パートナーが公開するサーバーレスアプリケーションのコレクションから選択できます。アプリケーションを見つけたら、Lambda コンソールから直接アプリケーションを設定してデプロイできます。

Q: サーバーレスアプリケーションのデプロイはどのように自動化するのですか?

AWS CodePipeline と AWS CodeDeploy を使用して、サーバーレスアプリケーションのリリースプロセスを自動化できます。CodePipeline は、サーバーレスアプリケーションのリリースに必要なステップをモデル化、視覚化、自動化できる継続的デリバリーサービスです。CodeDeploy は、Lambda ベースのアプリケーション用のデプロイ自動化エンジンを提供します。CodeDeploy を使用すると、カナリアや線形デプロイなどの確立されたベストプラクティスの方法論に従ってデプロイメントを調整でき、また新しくデプロイしたコードが安全で安定しており、本番環境に完全にリリースされる準備ができていることを確認するのに必要なガードレールを構築できます。

サーバーレス CI/CD の詳細については、こちらのドキュメントを参照してください。

Q: サーバーレスアプリケーションの構築はどのように始めるのですか?

まずは AWS Lambda コンソールにアクセスし、いずれかの設計図をダウンロードしてください。ダウンロードしたファイルには、AWS SAM ファイル (アプリケーションの AWS リソースを定義する)、および .ZIP ファイル (関数のコードを含む) が含まれます。次に AWS CloudFormation コマンドを使用して、ダウンロードしたサーバーレスアプリケーションをパッケージ化してデプロイできます。詳細については、ドキュメントを参照してください。

Q: AWS Lambda の複数の関数間で呼び出しをどのように調整するのですか?

AWS Step Functions を使用すると、一連の AWS Lambda 関数を特定の順序で調整できます。複数の Lambda 関数を連続して呼び出して出力を代わる代わる渡したり、同時に渡したりできます。Step Functions では実行中は状態が維持されます。

Q: サーバーレスアプリケーションのトラブルシューティングはどうすればよいですか?

X-Ray 権限を Lambda 関数の実行ロールに追加し、関数の "トレースモード" を "有効" に変更すると、AWS X-Ray による追跡用に Lambda 関数を有効化できます。 Lambda 関数で X-Ray が有効になると、AWS Lambda は、関数の呼び出し時に発生した Lambda サービスのオーバーヘッドについて、X-Ray にトレース情報を提供します。これにより、Lambda サービスのオーバーヘッド、関数の初期化時間、および関数の実行時間などの情報が提供されます。さらに、Lambda デプロイパッケージに X-Ray SDK を含めて、独自のトレースセグメントの作成、トレースへの注釈付け、または Lambda 関数から行われたダウンストリーム呼び出しのトレースセグメントの表示を行うことができます。X-Ray SDK は現在、Node.js および Java で利用可能です。詳しくは Lambda ベースのアプリケーションのトラブルシューティングをご覧ください。AWS X-Ray の料金が適用されます。

Q:リレーショナルデータベースに接続するサーバーレスアプリケーションを構築できますか?

はい。数千のリレーショナルデータベースへの同時接続を管理する高可用性データベースプロキシである Amazon RDS プロキシを使用して、リレーショナルデータベースに接続する、高度にスケーラブルで安全な Lambda ベースのサーバーレスアプリケーションを構築できます。現在、RDS プロキシは MySQL および Aurora データベースをサポートしています。Amazon RDS コンソールまたは AWS Lambda コンソールから RDS プロキシの使用を開始できます。RDS プロキシから完全マネージド型の接続プールを使用するサーバーレスアプリケーションは、RDS プロキシの料金に従って請求されます。

Q: AWS SAM のライセンスはどのように取得するのですか?

仕様は、Apache 2.0 でオープンソース化されています。これにより、お客様およびその他関係者は、商業利用可能なライセンスを使って AWS SAM を採用し、構築、デプロイメント、モニタリング、および管理ツールに組み込むことができます。GitHub の AWS SAM リポジトリにはこちらからアクセスしてください。

コンテナイメージのサポート

Q: AWS Lambda のコンテナイメージサポートとは何ですか?

AWS Lambda では、関数をコンテナイメージとしてパッケージ化してデプロイできるようになりました。お客様は、コンテナツールの柔軟性と使いやすさ、および AWS Lambda の俊敏性と操作の単純さを活かしてアプリケーションを構築できます。

Q: AWS Lambda のコンテナイメージサポートを利用するにはどうすればよいですか?

AWS が提供する Lambda のベースイメージから始めるか、お好みのコミュニティまたはプライベートエンタープライズイメージの 1 つを使用することから始めることができます。次に、Docker CLI を使用してイメージを作成し、それを Amazon ECR にアップロードしてから、AWS マネジメントコンソール、AWS CLI、AWS SDK、AWS SAM、AWS CloudFormation などの使い慣れたすべての Lambda インターフェイスとツールを使用して関数を作成します。

Q: サポート対象のコンテナイメージタイプはどれですか?

Lambda が提供するイメージに加えて、サードパーティーの Linux ベースイメージ (Alpine や Debian など) を Lambda にデプロイできます。AWS Lambda は、Docker Image Manifest V2 Schema 2 (Docker バージョン 1.10 以降で使用) または Open Container Initiative (OCI) 仕様 (v1.0 以降) のイメージマニフェスト形式に基づいてすべてのイメージをサポートしています。また、最大 10 GB のサイズのイメージをサポートしています。

Q: どのベースイメージを使用できますか?

AWS Lambda は、お客様が拡張できるさまざまなベースイメージを提供します。また、お客様は、最大 10GB のサイズの好みの Linux ベースのイメージを使用することもできます。

Q: 関数をコンテナイメージとしてパッケージ化およびデプロイするために使用できるコンテナツールは何ですか?

Docker Image Manifest V2 Schema 2 (Docker バージョン 1.10 以降で使用) または Open Container Initiative (OCI) 仕様 (v1.0 以降) のコンテナイメージマニフェスト形式のいずれかをサポートしている限り、任意のコンテナツールを使用できます。例えば、ネイティブコンテナツール (docker run、docker compose、Buildah、Packer) を使用して、関数をコンテナイメージとして定義し、Lambda にデプロイできます。

Q: コンテナイメージとしてデプロイされた関数で利用できる AWS Lambda の機能は何ですか?

Lambda レイヤーとコード署名を除くすべての既存の AWS Lambda 機能は、コンテナイメージとしてデプロイされた関数で使用できます。デプロイされると、AWS Lambda はイメージを変更不可能として扱います。お客様は、ビルドプロセス中にコンテナレイヤーを使用して、依存関係を含めることができます。

Q: AWS Lambda はデプロイされたコンテナイメージにパッチを適用して更新しますか?

現時点では行いません。AWS Lambda にデプロイされると、イメージは変更不可能になります。サービスはイメージにパッチを適用したり更新したりしません。ただし、AWS Lambda は、Lambda 管理環境に基づく、サポートされているすべてのランタイムのキュレートされたベースイメージを公開します。このような公開されたイメージは、AWS Lambda マネージドランタイムの更新とともにパッチが適用され、更新されます。DockerHub または Amazon ECR Public から最新のベースイメージをプルして使用し、コンテナイメージを再構築して、Amazon ECR を介して AWS Lambda にデプロイできます。これにより、イメージを本番環境にデプロイする前に、更新されたイメージとランタイムをビルドしてテストできます。

Q: ZIP アーカイブを使用して作成された関数とコンテナイメージを使用して作成された関数の違いは何ですか?

ZIP アーカイブを使用して作成された関数とコンテナイメージを使用して作成された関数には、主に次の 3 つの違いがあります。

  1. ZIP アーカイブを使用して作成された関数の最大コードパッケージサイズは解凍時に 250 MB であり、コンテナイメージを使用して作成された関数の最大イメージサイズは 10 GB です。 
  2. Lambda は、コンテナイメージとして定義された関数の基になるコードストレージとして Amazon ECR を使用するため、基になるイメージが ECR から削除されると、関数を呼び出せない場合があります。 
  3. ZIP 関数には、最新のランタイムセキュリティとバグ修正のために自動的にパッチが適用されます。コンテナイメージとして定義された関数は変更不可能であり、顧客は関数にパッケージ化されたコンポーネントに対して責任を負います。お客様は、利用可能な最新のパッチを使用して、セキュリティとバグ修正のために AWS によって定期的に更新される AWS 提供のベースイメージを活用できます。

Q: zip イメージとして定義された関数とコンテナイメージとして定義された関数の間にパフォーマンスの違いはありますか?

いいえ。AWS Lambda は、コンテナイメージとしてパッケージ化された関数のパフォーマンスプロファイルが、通常 1 秒未満の起動時間を含め、ZIP アーカイブとしてパッケージ化されたものと同じであることを保証します。

Q: Lambda 関数をコンテナイメージとしてデプロイするとどのように課金されますか?

関数をコンテナイメージとしてパッケージ化して AWS Lambda にデプロイするのに追加料金は発生しません。コンテナイメージとしてデプロイされた関数を呼び出すときは、リクエストと実行期間に対して通常価格をお支払いいただきます。詳細については、AWS Lambda の料金をご覧ください。 コンテナイメージを Amazon ECR に保存する場合は、標準の ECR 料金で請求されます。詳細については、Amazon ECR の料金をご覧ください。

Q: Lambda Runtime Interface Emulator (RIE) とは何ですか?

Lambda Runtime Interface Emulator は、Lambda Runtime API のプロキシで、コンテナイメージとしてパッケージ化された Lambda 関数をローカルでテストできます。これは、HTTP リクエストを JSON イベントに変換し、Lambda Runtime API をエミュレートする軽量のウェブサーバーです。これにより、cURL や Docker CLI などの使い慣れたツールを使用して関数をローカルでテストできます (コンテナイメージとしてパッケージ化された関数をテストする場合)。また、追加のコンピューティングサービスでのアプリケーションの実行も簡素化されます。Lambda へのデプロイに必要な JSON イベントの代わりに、コンテナイメージに Lambda Runtime Interface Emulator を含めて、HTTP リクエストをネイティブに受け入れるようにすることができます。このコンポーネントは、Lambda オーケストレーター、またはセキュリティと認証の設定をエミュレートしません。Runtime Interface Emulator は、GitHub でオープンソース化されています。ローカルマシンにダウンロードしてインストールして始めることができます。

Q: ローカルテスト中に Lambda Runtime Interface Emulator (RIE) が必要なのはなぜですか

実行中の Lambda サービスの Lambda Runtime API は、JSON イベントを受け入れ、応答を返します。Lambda Runtime Interface Emulator を使用すると、コンテナイメージとしてパッケージ化された関数が、cURL などのツールを使用したローカルテスト中に HTTP リクエストを受け入れ、同じインターフェイスを介して関数にローカルでそれらを表示できます。docker run コマンドまたは docker-compose up コマンドを使用して、Lambda アプリケーションをローカルでテストできます。

Q: エミュレーターを使用してローカルでテストできる関数の動作は何ですか?

エミュレーターを使用して、関数コードが Lambda 環境と互換性があり、正常に実行され、期待される出力を提供するかどうかをテストできます。例えば、さまざまなイベントソースからのテストイベントを模擬的に実施できます。また、これを使用して、Lambda Extensions API に対してコンテナイメージに組み込まれている拡張機能とエージェントをテストすることもできます。

Q: Runtime Interface Emulator (RIE) は、追加のコンピューティングサービスで Lambda 互換イメージを実行するのにどのように役立ちますか?

お客様は、Runtime Interface Emulator をコンテナイメージへのエントリポイントとして追加するか、サイドカーとしてパッケージ化して、コンテナイメージが JSON イベントではなく HTTP リクエストを受け入れるようにすることができます。これにより、追加のコンピューティングサービスでコンテナイメージを実行するために必要な変更が簡素化されます。お客様は、選択した環境のすべてのセキュリティ、パフォーマンス、および同時実行のベストプラクティスに従うようにする責任があります。RIE は AWS Lambda が提供するイメージに事前にパッケージ化されており、AWS SAM CLI でデフォルトで利用できます。ベースイメージプロバイダーは、ドキュメントを使用して、ベースイメージに同じエクスペリエンスを提供できます。

Q: 既存のコンテナ化されたアプリケーションを AWS Lambda にデプロイするにはどうすればよいですか?

以下の要件を満たしている場合は、コンテナ化されたアプリケーションを AWS Lambda にデプロイできます。

  1. コンテナイメージは Lambda Runtime API を実装していること。Lambda Runtime API を実装する一連のソフトウェアパッケージである Runtime Interface Clients (RIC) をオープンソース化し、Lambda 互換になるように任意のベースイメージをシームレスに拡張できるようにしました。
  2. コンテナイメージは、読み取り専用ファイルシステムで実行できること。関数コードは、512 MB の書き込み可能な /tmp ディレクトリストレージにアクセスできること。書き込み可能なルートディレクトリを必要とするイメージを使用している場合は、/tmp ディレクトリに書き込むようにイメージを設定します。
  3. 関数コードの実行に必要なファイルは、デフォルトの Lambda ユーザーが読み取ることができること。Lambda は、セキュリティのベストプラクティスに従う、最小権限を持つデフォルトの Linux ユーザーを定義していること。アプリケーションコードが、他の Linux ユーザーによって実行が制限されているファイルに依存していないことを確認する必要があります。
  4. コンテナイメージは Linux ベースのコンテナイメージであること。

Provisioned Concurrency

Q: AWS Lambda Provisioned Concurrency とは?

プロビジョニングされた同時実行により、サーバーレスアプリケーションのパフォーマンスをより詳細に制御できます。有効にすると、プロビジョニングされた同時実行は、2 桁のミリ秒で応答するように機能を初期化し、ハイパー対応状態になります。

Q: Provisioned Concurrency を設定および管理するにはどうすればよいですか?

AWS マネジメントコンソール、Lambda API、AWS CLI、AWS CloudFormation を使用して、関数の同時実行を設定できます。Provisioned Concurrency を最も簡単に活用するには、AWS Auto Scaling を使用します。Application Auto Scaling を使用してスケジュールを構成したり、需要の変化に応じて Auto Scaling で Provisioned Concurrency のレベルをリアルタイムで自動的に調整したりできます。Provisioned Concurrency の詳細については、ドキュメントを参照してください。

Q: Provisioned Concurrency を使用する場合、コードを変更する必要がありますか?

Provisioned Concurrency を使用するためにコードを変更する必要はありません。既存のすべての関数とランタイムでシームレスに動作します。Provisioned Concurrency を使用する場合、Lambda の呼び出しや実行モデルに変更はありません。

Q: Provisioned Concurrency の料金はどう請求されますか?

Provisioned Concurrency では、関数の初期化を維持するために、「Provisioned Concurrency」という料金ディメンションが追加されます。有効にすると、構成した同時実行の量と構成期間に対して料金をお支払いいただきます。Provisioned Concurrency が設定されている状態で関数を実行すると、リクエストと実行時間に対しても料金が発生します。Provisioned Concurrency 料金の詳細については、AWS Lambda 料金を参照してください。

Q: Provisioned Concurrency はどんなときに使用しますか?

Provisioned Concurrency は、ウェブまたはモバイルバックエンド、同期的に呼び出される API、インタラクティブなマイクロサービスなど、レイテンシーの影響を受けやすいアプリケーションの構築に最適です。アプリケーション固有のリクエストに基づいて、適切な量の同時実行を簡単に構成できます。需要が高いときは同時実行の量を増やして、需要が低下したときは下げるか、完全にオフにすることができます。

Q: 関数が Provisioned Concurrency の設定レベルを超える呼び出しを受け取った場合はどうなりますか?

関数の同時実行が構成されたレベルに達すると、その後の関数の呼び出しでは、通常の Lambda 関数のレイテンシーとスケールの特性が生じます。構成されたレベルを超えてスケールアップしないように関数を制限できます。そうすることで、関数が設定された Provisioned Concurrency のレベルを超えないようにします。これは、需要が予想量を超えたときに、アプリケーションの望ましくない変動を防ぐためのメカニズムです。

Graviton2 プロセッサによる AWS Lambda 関数

Q: Graviton2 プロセッサによる AWS Lambda 関数とは何ですか?

AWS Lambda では、x86 ベースまたは Arm ベースのプロセッサで関数を実行することができます。AWS Graviton2 は Amazon Web Services により 64-bit の Arm Neoverse コアを使用してカスタム構成されたプロセッサで、クラウドワークロードに、向上した料金パフォーマンスを提供するものです。お客様は、サーバーのプロビジョニングや管理をすることなくコードを実行し、オートスケーリング、高可用性、消費したリソースの分だけ支払うという、AWS Lambda と同じメリットを得ることができます。

Q: なぜ Graviton2 プロセッサによる AWS Lambda 関数を使うべきなのでしょうか?

AWS が設計した Arm ベースのプロセッサアーキテクチャを採用した Graviton2 による AWS Lambda 関数は、ウェブやモバイルのバックエンド、データ、ストリーム処理など、さまざまなサーバーレスワークロードに対して、x86 プロセッサで動作する関数と比較して最大 34% のより良い料金パフォーマンスを実現します。低レイテンシー、最大 19% のパフォーマンス向上、20% のコスト削減、そして AWS で現在利用可能な中で最高の電力効率を実現した Graviton2 関数は、ミッションクリティカルサーバーレスアプリケーションを強化することができます。お客様は、Graviton2 プロセッサをターゲットとした既存および新規の関数を設定することができます。また、Graviton2 上で動作する関数は、zip ファイルまたはコンテナイメージとしてデプロイすることができます。

Q: Graviton2 プロセッサ上で動作するように関数を設定するにはどうすればよいですか?

AWS マネジメントコンソール、AWS Lambda API、AWS CLI、AWS CloudFormation を使って、関数のアーキテクチャフラグを「arm64」に設定することで、Graviton2 上で関数を動作するように設定できます。

Q: Graviton2 プロセッサによる関数を使って構築したアプリケーションは、どのようにデプロイすればよいですか?

x86 ベースの関数と Arm ベースの関数の間に変更はありません。AWS マネジメントコンソールや zip ファイル、コンテナイメージなどでコードをアップロードするだけで、AWS Lambda はインフラストラクチャのプロビジョニングや管理を必要とせず、トリガーされたときにコードを自動的に実行します。

Q: アプリケーションは、Graviton2 プロセッサと x86 プロセッサの両方による関数を使うことができますか?

アプリケーションは、両方のアーキテクチャで動作する関数を含むことができます。AWS Lambda では、関数の現在のバージョンのアーキテクチャ (「x86_64」または「arm64」) を変更することができます。一度、特定のバージョンの関数を作成すると、アーキテクチャは変更できません。

Q: AWS Lambda はマルチアーキテクチャのコンテナイメージをサポートしていますか?

いいえ、各関数のバージョンは単一のコンテナイメージしか使用できません。

Q: AWS Graviton2 プロセッサによる関数を対象とした AWS Lambda Layers を作成できますか?

はい。レイヤーと拡張機能は、「x86_64」または「arm64」互換のアーキテクチャを対象とすることができます。関数やレイヤーのデフォルトのアーキテクチャは「x86_64」です。

Q: Graviton2 プロセッサ上で動作する Lambda 関数はどのような言語やランタイムをサポートしていますか?

起動時は、お客様は Python、Node.js、Java、Ruby、.Net Core、Custom Runtime (provided.al2)、OCI Base イメージを使用することができます。詳細については、AWS Lambda Runtimesをご覧ください。

Q: AWS Graviton2 プロセッサによる AWS Lambda 関数の料金設定はどうなっていますか? また、AWS Lambda の無料利用枠は Graviton2 による関数にも適用されますか?

AWS Graviton2 プロセッサによる AWS Lambda 関数は、x86 ベースの Lambda 関数と比較して 20% 安くなっています。Lambda の無料利用枠は、x86 および Arm ベースのアーキテクチャによる AWS Lambda 関数に適用されます。

Q: 関数を Graviton2 プロセッサと x86 プロセッサのどちらで実行するかは、どのように選択すればよいですか?

各ワークロードはそれぞれ異なりますので、お客様には関数をテストして、料金パフォーマンスの向上を見て、判断されることをお勧めします。そのためには、AWS Lambda Power Tuning ツールを使用することをお勧めします。料金パフォーマンス向上の可能性があるワークロードをテストする際には、ウェブやモバイルのバックエンド、データ、ストリーム処理から始めることをお勧めします。

Q: Graviton2 プロセッサによる関数をローカルで作成、構築、テストするためには、Arm ベースの開発マシンが必要ですか?

Python、Java、Node などのインタプリタ型言語は、アーキテクチャ固有のコンポーネントを使用するライブラリを参照するコードでない限り、一般的に再コンパイルの必要はありません。その場合は、arm64 用のライブラリを用意する必要があります。詳細は AWS Graviton を開始するのページをご参照ください。非インタプリタ型言語の場合は、arm64 をターゲットにしたコードのコンパイルが必要です。最近のコンパイラは arm64 向けにコンパイルされたコードを生成しますが、テストのためには arm ベースの環境にデプロイする必要があります。Graviton2 での Lambda 関数の使い方については、ドキュメントを参照してください。

Amazon EFS for AWS Lambda

Q: Amazon EFS for AWS Lambda とは

Amazon Elastic File System (Amazon EFS) for AWS Lambda を利用することで、ユーザーはプロビジョニングやキャパシティー管理なしに、オンデマンドで拡張できるフルマネージド型で伸縮自在な NFS ファイルシステムを使用し、さまざまな規模で大容量のデータを安全に読み書きすることができます。従来、デベロッパーは、S3 やデータベースからローカルの一時ストレージにデータをダウンロードするためのコードを関数に追加していましたが、512MB までに制限されていました。EFS for Lambda を使えば、デベロッパーはデータを処理するために一時ストレージにデータをダウンロードするコードを書く必要はありません。

Q: Amazon EFS for Lambda はどのように設定すれば良いですか?

デベロッパーは、コンソール、CLI、または SDK を使用して、既存の EFS ファイルシステムを EFS アクセスポイント経由で Lambda 関数に簡単に接続することができます。関数が最初に起動されると、ファイルシステムは自動的にマウントされ、関数コードで利用できるようになります。詳細については、ドキュメントを参照してください。

Q: Amazon EFS ファイルシステムを使用する前に、VPC 設定で関数を設定する必要がありますか?

はい。Amazon EFS 用のマウントターゲットは、VPC 内のサブネットに関連付けられています。その VPC にアクセスするために AWS Lambda 関数を設定する必要があります。

Q: Amazon EFS はどのようなユーザーに適していますか?

EFS for Lambda は、機械学習アプリケーションの構築や大規模な参照ファイルやモデルのロード、大量のデータの処理やバックアップ、Web コンテンツのホスティング、社内のビルドシステムの開発などに最適です。また、StepFunctions のワークフロー内で、ステートフルマイクロサービスアーキテクチャ内の呼び出し間の状態を保持したり、サーバーレスアプリケーションとインスタンスやコンテナベースのアプリケーション間でファイルを共有したりする際にも、EFS for Lambda を使用することができます。

Q: 転送中のデータは暗号化されますか?

はい。AWS Lambda 関数と Amazon EFS ファイルシステム間で送信されるデータの暗号化には、業界標準の Transport Layer Security (TLS) 1.2 を使用しています。

Q: 保存したデータは暗号化されますか?

ユーザーは Amazon EFS をプロビジョニングすることで、保存したデータを暗号化することができます。保管中に暗号化されたデータは書き込み中に透過的に暗号化され、読み取り中は透過的に復号されるため、アプリケーションを変更する必要はありません。また、暗号化キーは AWS Key Management Service (KMS) によって管理されるため、安全なキー管理インフラストラクチャを構築および維持する必要はありません。

Q: AWS Lambda の Amazon EFS の料金はどのように請求されますか?

AWS Lambda の Amazon EFS は追加料金なしで使用できます。AWS Lambda の標準料金をお支払いいただくことで、Amazon EFS を使用することができます。同一のアベイラビリティーゾーンで Lambda と EFS を使用している場合はデータ転送料金はかかりません。しかし、VPC ピアリングを利用してクロスアカウントアクセスを行うと、データ転送料金が発生します。詳細については、料金をご覧ください。

Q: AWS Lambda 関数で複数の Amazon EFS ファイルシステムを関連付けることはできますか?

いいえ。各 Lambda 関数は 1 つの EFS ファイルシステムにのみアクセスすることができます。

Q: 複数の関数、コンテナ、インスタンスで同じ Amazon EFS ファイルシステムを使用することはできますか?

はい。Amazon EFS は Lambda 関数、ECS と Fargate コンテナ、EC2 インスタンスをサポートしています。同じファイルシステムを共有し、IAM ポリシーとアクセスポイントを使用して、各関数、コンテナ、インスタンスがアクセスできるものを制御できます。 

Lambda の拡張機能

Q: AWS Lambda の拡張機能はどのようなものですか?

AWS Lambda の拡張機能では、モニタリング、可観測性、セキュリティ、ガバナンス用のツールと Lambda を統合できます。お客様とツールベンダーは拡張機能を使用して、Lambda のライフサイクルに関与し、Lambda 実行環境とより深く統合できます。

Q: Lambda の拡張機能はどのように動作しますか?

拡張機能は、関数コードが実行される Lambda の実行環境内で実行されるもう一方のプロセスです。また、関数呼び出しの外部でも実行できます。つまり、関数が初期化される前に開始し、関数と並列で実行し、関数実行が完了した後に実行できます。Lambda サービスによって実行環境がシャットダウンされる前に実行することもできます。

Q: Lambda の拡張機能は何に使用できますか?

拡張機能は、AWS とパートナー (AppDynamics、Coralogix、Datadog、Dynatrace、Epsagon、HashiCorp、Honeycomb、Imperva、Lumigo、Check Point CloudGuard、New Relic、Thundra、Splunk、Sentry、Site24x7、Sumo Logic、AWS AppConfig、Amazon CodeGuru Profiler、Amazon CloudWatch Lambda Insights、AWS Distro for OpenTelemetry) から提供されるモニタリング、可観測性、セキュリティ、ガバナンス用のツールに使用できます。拡張機能の詳細については、リリースブログの投稿をご覧ください。

Q: Lambda の拡張機能はどのように設定し、管理するのですか?

拡張機能は、レイヤーを使用して、コンソール、CLI、または CloudFormation、AWS サーバーレスアプリケーションモデル、Terraform などの Infrastructure as Code ツールから 1 つ以上の Lambda 関数にデプロイできます。開始するにはドキュメントをご覧ください

Q: AWS Lambda の拡張機能と一緒に使用できるランタイムはどれですか?

拡張機能をサポートしているランタイムのリストはこちらからご覧いただけます。

Q: 拡張機能は、デプロイパッケージの制限の対象となりますか?

はい。関数とすべての拡張機能を解凍した後の合計サイズは、解凍後のデプロイパッケージのサイズ制限 250 MB を超えることはできません。

Q: 拡張機能を使用することで、パフォーマンスへの影響はありますか?

拡張機能では、CPU、メモリ、ストレージなどのリソースを関数と共有し、拡張機能は関数コードの前に初期化されるため、関数のパフォーマンスに影響する可能性があります。例えば、拡張機能でコンピューティング負荷の高い操作を実行した場合、拡張機能と関数コードで同じ CPU リソースを共有するため、関数の実行時間が長くなる可能性があります。Lambda では選択するメモリ設定に基づいて比例した CPU が割り当てられるため、多くのプロセスが同様の CPU リソースを求めて競合すると、メモリ設定が低い場合は、実行や初期化にかかる時間が長くなる可能性があります。

PostRuntimeExecutionDuration メトリクスを使用して、関数の実行後に拡張機能に必要な追加時間を測定できます。また、MaxMemoryUsed メトリクスを使用して、使用されるメモリの増加を測定できます。特定の関数の影響を理解するために、Duration メトリクスを使用することもできます。現在、関数実行の応答は、関数の実行と拡張機能の実行が完了した後に返されます。詳細については、Lambda のデベロッパー向けドキュメントをご覧ください。

Q: Lambda の拡張機能の料金はどのように請求されますか?

拡張機能では、Lambda 関数と同じ料金モデルを採用しています。拡張機能を備えた Lambda 関数を使用する場合、処理されたリクエストと、コードとすべての拡張機能の実行に使用された合計コンピューティング時間に対して、1 ミリ秒単位で課金されます。Lambda 実行時間の既存の料金に基づいて、コンピューティング時間に対して料金が発生します。詳細については、AWS Lambda の料金をご覧ください。

Lambda ライフサイクルは、"init"、"invoke"、"shut down" という 3 つの個別のフェーズで構成されます。"init" フェーズでは、AWS Lambda で関数、依存関係、拡張機能を初期化します。"invoke" フェーズでは、トリガーに応答して Lambda で関数と拡張機能のコードを実行します。"shut down" フェーズでは、関数実行は完了していますが、拡張機能のコードはまだ実行中で、最大 2 秒かかる場合があります。Lambda ライフサイクルの 3 つのフェーズすべてで、拡張機能のコードを実行するのに使用したコンピューティング時間に対して料金が発生します。Lambda ライフサイクルの詳細については、Lambda 実行環境に関するドキュメントをご覧ください。

拡張機能のインストールに追加料金は発生しません。ただし、パートナーの製品についてはコストが発生する可能性があります。詳細については、関連するパートナーのウェブサイトをご覧ください。

Q: カスタムの Lambda 拡張機能を自分で作成することはできますか?

はい。AWS Lambda Runtime Extensions API を使用して作成できます。詳細については、ドキュメントをご覧ください。

Q: Provisioned Concurrency が有効になっている間、拡張機能はどのように動作しますか?

Provisioned Concurrency では、関数が初期化され、数十ミリ秒台で応答できる状態で維持されます。Provisioned Concurrency を有効にすると、拡張機能も初期化され、関数コードと並んで実行できる状態で維持されます。

Q: 拡張機能にはどのようなアクセス許可がありますか?

Extensions は Lambda 関数と同じ環境下で実行されるため、関数と同じリソースにアクセスでき、アクセス許可は関数と拡張機能の間で共有されます。そのため、認証情報、ロール、環境変数が共有されます。拡張機能には、関数コードへの読み取り専用アクセス権があり、/tmp では読み書きの両方が可能です。

Q: AWS Lambda Runtime Logs API とは何ですか?

AWS Lambda Runtime Logs API を使用すると、拡張機能を使用して、AWS Lambda 関数から任意の送信先に直接ログを送信できます。拡張機能はこの API を使用して、Amazon CloudWatch Logs にストリーミングされるのと同じログをサブスクライブし、それらを処理、フィルタリングして、任意の送信先に送信できます。

Q: Runtime Logs API はどのように機能しますか?

Lambda サービスはログを自動的にキャプチャし、Amazon CloudWatch にストリーミングします。このストリームには、関数コード内で生成されたログのほか、呼び出しの一部として Lambda サービスによって生成されたログも含まれます。

Runtime Logs API を使用すると、拡張機能の作成者は、Lambda 実行環境内から直接同じログストリームをサブスクライブできます。サブスクリプションリクエストを受信した後、Lambda サービスはログを CloudWatch に送信するだけでなく、HTTP または TCP を介して拡張機能にストリーミングします。

Q: Runtime Logs API の使用を開始するにはどうすればよいですか?

Runtime Logs API を使用する拡張機能は、レイヤーを使用して、コンソール、CLI、または CloudFormation、AWS サーバーレスアプリケーションモデル、Terraform などの Infrastructure as Code ツールから 1 つ以上の Lambda 関数にデプロイできます。

AWS や、Coralogix、Datadog、Honeycomb、Lumigo、New Relic、Sumo Logic、および Amazon CloudWatch といったパートナーから提供される、監視、可観測性、セキュリティ、およびガバナンスのためのお気に入りのツールの拡張機能を使用できます。拡張機能の詳細については、リリースブログの投稿をご覧ください。

Q: Runtime Logs API を使用するとパフォーマンスに影響がありますか?

Runtime Logs API は、AWS Lambda Extensions 内からのみ使用できます。拡張機能では、CPU、メモリ、ストレージなどのリソースを関数と共有し、拡張機能は関数コードの前に初期化されるため、関数のパフォーマンスに影響する可能性があります。例えば、拡張機能でコンピューティング負荷の高い操作を実行した場合、拡張機能と関数コードで同じ CPU リソースを共有するため、関数の実行時間が長くなる可能性があります。さらに、Runtime Logs API の各サブスクリプションは、ログを格納するために、それを含む拡張機能が消費するものに加えて、追加のメモリを消費する可能性があります。

Q: Runtime Logs API の使用に対してどのように課金されますか?

AWS Lambda Runtime Logs API の使用に追加料金はかかりません。Runtime Logs API を利用する拡張機能は、他の拡張機能や Lambda 関数と同じ課金モデルを共有します。拡張機能の料金設定の詳細については、よくある質問をご覧ください

Q: Runtime Logs APIを使用すると、Amazon CloudWatch Logs へのログの送信が無効になりますか?

いいえ、デフォルトでは、Lambda プラットフォームはすべてのログを CloudWatch Logs に送信し、Runtime Logs API を使用しても CloudWatch Logs への出力が無効になることはありません。

Lambda@Edge

Q: Lambda@Edge とは何ですか?

Lambda@Edge を使用すると、世界中の AWS ロケーションでコードを実行できます。サーバーのプロビジョニングや管理の必要がなく、エンドユーザーへの応答で発生するネットワークレイテンシーを最低限に抑えることができます。Node.js または Python コードを AWS Lambda にアップロードし、Amazon CloudFront リクエスト (ビューワーのリクエストがあったとき、リクエストがオリジンに転送されたときやオリジンから戻ってきたとき、エンドユーザーに返される直前など) に応答してトリガーされるよう関数を設定するだけで、作業が完了します。コンテンツのリクエストを受信すると、世界中の AWS ロケーションでコードが実行できるようになり、CloudFront のリクエストボリュームに応じてグローバルにスケールされます。詳細については、ドキュメントを参照してください。

Q: Lambda@Edge の使用方法について教えてください。

Lambda@Edge を使用するには、AWS Lambda にコードをアップロードし、Amazon CloudFront リクエストに応答してトリガーされるよう関数のバージョンを関連付けます。コードは Lambda@Edge サービスの制限に合致している必要があります。Lambda@Edge で CloudFront イベントによるグローバルな呼び出しに使用できるコードは、現在のところ Node.js および Python のみです。詳細については、ドキュメントを参照してください。

Q: Lambda@Edge はどんな場合に使用できますか?

Lambda@Edge は、レイテンシーが問題となるようなユースケース向けに最適化されています。エンドビューワーが世界中に分布している場合などが当てはまります。処理の決定に必要なすべての情報は、CloudFront エッジの関数内やリクエスト内で使用できるようになります。つまり、ユーザー特性 (ロケーションやクライアントデバイスなど) に基づいてコンテンツの処理方法を決定する必要があるユースケースでは、中央サーバーにルーティングし直さなくても、ユーザーの近くで実行および処理ができるようになります。

Q: 既存の Lambda 関数をグローバルな呼び出し向けにデプロイできますか?

グローバルな呼び出しを行うために、既存の Lambda 関数を CloudFront イベントに関連付けることができます。ただし、関数が Lambda@Edge サービスの要件および制限を満たしている必要があります。関数のプロパティの更新方法については、こちらをご覧ください。

Q: 関数のトリガーに使用できるのはどの Amazon CloudFront イベントですか?

以下のような Amazon CloudFront イベントに応答して関数が自動的にトリガーされます。

  • ビューワーのリクエスト - このイベントは、インターネット上のエンドユーザーまたはデバイスが CloudFront に対して HTTP(S) リクエストを行い、そのユーザーに最も近いエッジロケーションにリクエストが到達したときに発生します。
  • ビューワーの応答 - このイベントは、エッジにある CloudFront サーバーが、リクエストを実行したエンドユーザーまたはデバイスに応答する準備ができたときに発生します。
  • オリジンのリクエスト - このイベントは、リクエストされたオブジェクトを CloudFront エッジサーバーがキャッシュに保持しておらず、ビューワーのリクエストをバックエンドのオリジンウェブサーバー (Amazon EC2、Application Load Balancer、Amazon S3 など) に送信する準備ができたときに発生します。
  • オリジンの応答 - このイベントは、エッジの CloudFront サーバーがバックエンドのオリジンウェブサーバーから応答を受け取ったときに発生します。

Q: AWS Lambda@Edge と、Amazon API Gateway で AWS Lambda を使用した場合の違いは何ですか?

違いは、API Gateway と Lambda がリージョンのサービスであることです。Lambda@EdgeAmazon CloudFront を使用すると、エンドビューアーの所在に基づき多くの AWS ロケーションにわたってロジックを実行できます。

スケーラビリティと可用性

Q: AWS Lambda 関数の可用性はどの程度ですか?

AWS Lambda はレプリケーションと冗長性を使用して、サービス本体およびサービスによって実行される Lambda 関数の両方で高い可用性を実現するように設計されています。メンテナンス時間や定期的なダウンタイムはありません。

Q: 自作の AWS Lambda 関数は、コードや設定を変更してもそのまま使用できますか?

はい。Lambda 関数を更新すると、短い間 (通常は 1 分未満)、リクエストは古いバージョンと新しいバージョンのいずれかによって処理されます。

Q: 一度に実行可能な AWS Lambda 関数の数に制限はありますか?

いいえ。AWS Lambda は、関数のインスタンスを多数並行して実行できるよう設計されています。ただし、AWS Lambda には各リージョンのアカウントごとに同時実行数に関するデフォルトの安全上限値が設定されています (デフォルトの安全上限値に関する情報についてはこちらを参照)。また、個々の AWS Lambda 関数の最大同時実行数を制御して重要な関数に関するアカウントの同時実行上限サブセットを予約したり、ダウンストリームリソースへのトラフィックレートを制限したりできます。

上限値を引き上げるリクエストを送信する必要がある場合は、サポートセンターにアクセスし、[Open a new case] をクリックして、サービス制限引き上げリクエストを送信します。

Q: 自分のアカウントで、同時実行数のデフォルトの上限値を超えるとどうなりますか?

上限値を超えると、同期的に呼び出されている AWS Lambda 関数はスロットリングエラー (エラーコード 429) を返します。非同期に呼び出された Lambda 関数は、15~30 分程度は、トラフィックの急激な上昇によるものとして許容されますが、それ以降の着信イベントはスロットリングの対象となり拒否されます。Lambda 関数が、Amazon S3 イベントに対する応答として呼び出された場合、AWS Lambda によって拒否されたイベントは、S3 によって保持され、24 時間再試行されます。Amazon Kinesis ストリームおよび Amazon DynamoDB ストリームからのイベントは、Lambda 関数が正常に実行されるか、データが期限切れになるまで再試行されます。Amazon Kinesis および Amazon DynamoDB ストリームでは、24 時間データが保持されます。

Q:デフォルトの制限値は関数単位で適用されるのですか?

いいえ。デフォルトの制限値はアカウント単位でのみ適用されます。

Q: Lambda 関数がイベントの処理に失敗した場合はどうなりますか?

同期呼び出しの Lambda 関数が失敗すると、例外が返されます。非同期的に呼び出される Lambda 関数は、少なくとも 3 回再試行されます。Amazon Kinesis ストリームおよび Amazon DynamoDB ストリームからのイベントは、Lambda 関数が正常に実行されるか、データが期限切れになるまで再試行されます。Kinesis および DynamoDB ストリームでは、少なくとも 24 時間データが保持されます。

Q: Lambda 関数呼び出しで使用可能なポリシーが使い果たされるとどうなりますか?

非同期呼び出しに対する再試行ポリシーを超えた場合は、イベントが配置される「配信不能キュー」(DLQ) を設定できます。設定済みの DLQ がない場合は、イベントが拒否されることがあります。ストリームベースの呼び出しに対する再試行ポリシーを超えた場合は、データはすでに期限切れになっているため拒否されます。

Q: Lambda 関数の配信不能キューとして設定できるのはどのリソースですか?

配信不能キューとして設定できるのは、Amazon SQS キューまたは Amazon SNS トピックです。

セキュリティとアクセスコントロール

Q: AWS Lambda 関数が他の AWS リソースにアクセスするのを許可するにはどうすればよいですか?

Lambda 関数に他のリソースにアクセスするための権限を与えるには、IAM ロールを使用します。AWS Lambda は、この IAM ロールの権限で Lambda 関数を実行します。これにより、Lambda 関数が使用できる AWS リソースを完全かつ安全に管理できます。役割についての詳細は、AWS Lambda のセットアップをご覧ください。

Q: どの Amazon S3 バケットがどの AWS Lambda 関数を呼び出すか、どのようにすれば設定できますか?

AWS Lambda 関数にメッセージを送信するよう Amazon S3 バケットを設定すると、アクセスを許可するリソースポリシールールが作成されます。Lambda 関数のリソースポリシーとアクセス制御の詳細については、Lambda デベロッパーガイドをご覧ください。

Q: AWS Lambda 関数が、どの Amazon DynamoDB テーブルまたは Amazon Kinesis ストリームをポーリングするか、どのようにすれば設定できますか?

アクセスコントロールは、Lambda 関数のロールによって管理されます。Lambda 関数に割り当てるロールによって、AWS Lambda が代わりにポーリングできるリソースが決まります。詳細については、Lambda デベロッパーガイドをご覧ください。

Q: AWS Lambda 関数が、どの Amazon SQS キューをポーリングするか、どうすれば設定できますか?

アクセスコントロールは、Lambda 関数のロールまたはキュー自体に設定するリソースポリシーによって管理できます。 両方のポリシーがある場合は、2 つのうちより厳しいアクセス許可が適用されます。

Q: 自分の AWS Lambda 関数を使用して、Amazon VPC の内側にあるリソースにアクセスできますか?

はい。Amazon VPC の内側のリソースにアクセスできます。

Q: Lambda 関数の VPC サポートをどのように有効化または無効化しますか?

VPC のサポートを有効化するには、単一の VPC とセキュリティグループで 1 つ以上のサブネットを関数の設定情報の一部として指定する必要があります。VPC のサポートを無効化するには、関数の設定情報を更新して、サブネットおよびセキュリティグループに空のリストを指定する必要があります。AWS API、CLI、AWS Lambda マネジメントコンソールを使用してこれらの設定を変更できます。

Q: 単一の Lambda 関数を複数の VPC にアクセスさせることはできますか?

いいえ。Lambda 関数では、単一の VPC にのみアクセスできます。複数のサブネットを指定する場合、それらは同一の VPC に存在している必要があります。VPC をピアリングすることで他の VPC に接続できます。

Q: VPC の Lambda 関数を、インターネットおよび AWS のサービスのエンドポイントにアクセスさせることはできますか?

個別の VPC のリソースに対するアクセスを設定された Lambda 関数では、デフォルトの設定としてインターネットにアクセスできなくなっています。外部のエンドポイントへのアクセスが必要な場合、VPC で NAT を作成して該当のトラフィックを転送し、セキュリティグループでアウトバウンドトラフィックを許可するよう設定する必要があります。

Q: AWS Lambda のコード署名とは何ですか?

AWS Lambda のコード署名により、信頼性と整合性を管理できます。それにより、承認されたデベロッパーからの未変更のコードのみが Lambda 関数にデプロイされていることを確認できます。フルマネージドコード署名サービスである AWS Signer を使用して、コードアーティファクトにデジタル署名を行い、Lambda 関数を設定してデプロイ時に署名を検証できます。AWS Lambda のコード署名は、現在、ZIP アーカイブとしてパッケージ化された関数でのみご利用いただけます。

Q: デジタル署名されたコードアーティファクトを作成するにはどうすればよいですか?

AWS Signer コンソール、Signer API、SAM CLI、または AWS CLI を介して、Signing Profile を使用して、デジタル署名されたコードアーティファクトを作成できます。詳細については、AWS Signer のドキュメントをご覧ください。

Q: コード署名を有効にするように Lambda 関数を設定するにはどうすればよいですか?

AWS マネジメントコンソール、Lambda API、AWS CLI、AWS CloudFormation、および AWS SAM を介してコード署名設定を作成することにより、コード署名を有効にできます。コード署名設定は、承認された署名プロファイルを指定し、署名チェックが失敗した場合にデプロイを警告するか拒否するかを設定するのに役立ちます。コード署名設定を個々の Lambda 関数にアタッチして、コード署名機能を有効にすることができます。このような関数は、デプロイ時に署名の検証を開始します。

Q: AWS Lambda はデプロイ時にどのような署名チェックを実行しますか?

AWS Lambda は、デプロイ時に次の署名チェックを行えます。

• 破損した署名 – これは、署名後にコードアーティファクトが変更された場合に発生します。
• 不一致の署名 – これは、コードアーティファクトが承認されていない署名プロファイルによって署名された場合に発生します。
• 期限切れの署名 – これは、署名が設定された有効期限を過ぎている場合に発生します。
• 取り消された署名 – これは、署名プロファイルの所有者が署名ジョブを取り消した場合に発生します。

詳細については、AWS Lambda ドキュメントをご覧ください。

Q: 既存の関数のコード署名を有効にできますか?

はい。関数にコード署名設定をアタッチすることで、既存の関数のコード署名を有効にできます。これは、AWS Lambda コンソール、Lambda API、AWS CLI、AWS CloudFormation、および AWS SAM を使用して実行できます。

Q: AWS Lambda のコード署名を使用するのに追加費用は発生はかかりますか?

AWS Lambda のコード署名を使用する際、追加費用は発生しません。AWS Lambda の標準料金をお支払いただきます。詳細については、料金をご覧ください。

Java における AWS Lambda 関数

Q: AWS Lambda 関数の Java コードはどのようにしてコンパイルするのですか?

Maven や Gradle といった標準的なツールを使用して Lambda 関数をコンパイルできます。構築プロセスにおいては、AWS SDK に応じた Java コードのコンパイルに使用する構築プロセスと同様のプロセスを行う必要があります。Java コンパイラツールをソースファイルで実行し、クラスパスで推移従属性を使用した AWS SDK 1.9 以降をインクルードします。詳細については、ドキュメントを参照してください。

Q: 関数の実行に Lambda で使用される JVM 環境は何ですか?

Lambda では Amazon Linux build of openjdk 1.8 を利用できます。

Node.js における AWS Lambda 関数

Q: AWS Lambda でパッケージを使用できますか?

はい。NPM パッケージ、およびカスタムパッケージを使用できます。詳細はこちらをご覧ください。

Q: Node.js で記述した AWS Lambda 関数から他のプログラムを実行できますか?

はい。Lambda の組み込みサンドボックスを使用すれば、バッチ (shell) スクリプト、他の言語ランタイム、ユーティリティールーチン、実行可能ファイルを実行できます。詳細はこちらをご覧ください。

Q: Node.js で記述した AWS Lambda 関数を使用してネイティブモジュールを使用することはできますか?

はい。アップロードする ZIP ファイルには、静的リンクのネイティブモジュール、および rpath が Lambda 関数のルートディレクトリを指すように指定してコンパイルした動的リンクモジュールを含めることができます。詳細はこちらをご覧ください。

Q: Node.js で記述した AWS Lambda を使用してバイナリを実行することはできますか?

はい。Node.js の child_process コマンドを使用して、お客様の関数にインクルードされたバイナリ、またはお客様の関数から確認できる Amazon Linux の実行可能ファイルを実行できます。別の方法として、node-ffmpeg などのコマンドラインバイナリをラップする NPM パッケージがいくつか存在しています。詳細はこちらをご覧ください。

Q: Node.js で記述した AWS Lambda 関数コードはどのようにしてデプロイしますか?

Node.js で記述した Lambda 関数は、JavaScript コードと依存ライブラリを ZIP 形式でパッケージ化するだけでデプロイできます。お使いのローカル環境から ZIP ファイルをアップロードするか、ZIP ファイルのある Amazon S3 のロケーションを指定できます。詳細については、ドキュメントを参照してください。

Python における AWS Lambda 関数

Q: AWS Lambda で Python パッケージを使用できますか?

はい。pip を使用して必要な Python パッケージをインストールできます。

C# における AWS Lambda 関数

Q: C# で AWS Lambda 関数をパッケージ化してデプロイするにはどうすればよいですか?

C# Lambda 関数は、ソリューションエクスプローラで [Publish to AWS Lambda] を選択することで、Visual Studio IDE を使用して作成できます。あるいは、[# Lambda CLI tools patch] がインストールされている dotnet CLI から「dotnet lambda publish」コマンドを直接実行することもできます。これにより、C# ソースコードとすべての NuGet 依存関係、および発行済みの独自の DLL アセンブリを含む ZIP が作成され、ランタイムパラメータ「dotnetcore1.0」を使用して AWS Lambda に自動的にアップロードされます。

PowerShell における AWS Lambda 関数

Q: PowerShell で記述した AWS Lambda 関数コードはどのようにしてデプロイしますか?

PowerShell Lambda デプロイパッケージは、PowerShell スクリプト、PowerShell スクリプトで必要な PowerShell モジュール、PowerShell Core をホストするために必要なアセンブリで構成される ZIP ファイルです。PowerShell の AWSLambdaPSCore PowerShell モジュールは PowerShell Gallery からインストールできますので、これを使用して、PowerShell Lambda デプロイパッケージを作成します。

Q: PowerShell で記述した AWS Lambda 関数コードはどのようにしてデプロイしますか?  PowerShell Lambda デプロイパッケージは、PowerShell スクリプト、PowerShell スクリプトで必要な PowerShell モジュール、PowerShell Core をホストするために必要なアセンブリで構成される ZIP ファイルです。PowerShell の AWSLambdaPSCore モジュールは PowerShell Gallery からインストールできますので、これを使用して、PowerShell Lambda デプロイパッケージを作成します。
Q: PowerShell で記述した AWS Lambda 関数コードはどのようにしてデプロイしますか?  PowerShell Lambda デプロイパッケージは、PowerShell スクリプト、PowerShell スクリプトで必要な PowerShell モジュール、PowerShell Core をホストするために必要なアセンブリで構成される ZIP ファイルです。PowerShell の AWSLambdaPSCore モジュールは PowerShell Gallery からインストールできますので、これを使用して、PowerShell Lambda デプロイパッケージを作成します。

Go における AWS Lambda 関数

Q: Go で AWS Lambda 関数をパッケージ化してデプロイするにはどうすればよいですか? 

AWS CLI または Lambda コンソールを介して Go の実行可能なアーティファクトを ZIP ファイルとしてアップロードし、go1.x ランタイムを選択します。Lambda を用いることで、コードのビルドとパッケージ化に Go のネイティブツールを使用できます。詳細については、ドキュメントを参照してください。 

Ruby における AWS Lambda 関数

Q: Ruby で記述した AWS Lambda 関数コードはどのようにしてデプロイしますか? 

Ruby で記述した Lambda 関数をデプロイするには、Ruby コードと gem を ZIP ファイルとしてパッケージ化します。お使いのローカル環境から ZIP ファイルをアップロードするか、ZIP ファイルのある Amazon S3 のロケーションを指定できます。

その他のトピック

Q: AWS Lambda はどのバージョンの Amazon Linux、Node.js、Python、JDK、.NET Core、SDK、追加ライブラリをサポートしていますか?

こちらで、サポートされているバージョンの一覧をご確認いただけます。

Q: Amazon Linux または言語ランタイムのバージョンを変更できますか?

いいえ。AWS Lambda は、サービスのユーザー全員に、単一バージョンのオペレーティングシステムとマネージド型言語ランタイムを提供しています。自分で言語ラインタイムを持ち込んで Lambda で使用することは可能です。

Q: AWS Lambda API に対する呼び出しを記録、および監査するにはどうすればよいですか?

AWS Lambda は AWS CloudTrail と統合されています。AWS CloudTrail では、お客様のアカウントでの API の使用状況を記述したログファイルを記録し Amazon S3 バケットに配信できます。

Q: Lambda の複数の関数間で呼び出しをどのように調整するのですか?

Amazon Step Functions を使用することで、Lambda 関数の複数の呼び出しを調整できます。複数の Lambda 関数を順次呼び出して出力を代わる代わる渡すことも、同時に呼び出すこともできます。詳細については、ドキュメントを参照してください。

Q: AWS Lambda は Advanced Vector Extensions 2 (AVX2) をサポートしていますか?

はい。AWS Lambda は Advanced Vector Extensions 2 (AVX2) 命令セットをサポートしています。パフォーマンスを向上させるためにこの命令セットをターゲットにするようにアプリケーションコードをコンパイルする方法の詳細については、AWS Lambda デベロッパー向けドキュメントをご覧ください。

AWS Lambda 料金の詳細

料金ページを見る
始める準備はできましたか?
サインアップ
ご不明な点がおありですか?
お問い合わせ