全般

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 では、Node.js (JavaScript)、Python、Java (Java 8 互換)、C# (.NET Core) で記述されたコードがサポートされています。ネイティブライブラリも含め、コードには既存のライブラリを含めることができます。詳しくは、Node.jsPythonJava、および C# に関するドキュメントをご覧ください。

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

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

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

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

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

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

AWS Lambda 関数

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

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

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 Developers Guide をご覧ください。

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

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

詳しくは「Troubleshooting CloudWatch Metrics」をご覧ください。Lambda の組み込みメトリックを使用する場合は、AWS Lambda の標準料金が課されます。

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

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

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

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

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

AWS Lambda のリソースモデルでは、お客様が関数に必要なメモリ量を指定するとそれに比例した CPU パワーとその他のリソースが割り当てられます。たとえば、256 MB のメモリを指定すると約 2 倍の CPU パワーが Lambda 関数に割り当てられます。128 MB のメモリを指定した場合と比較すると CPU パワーは倍となり、512 MB のメモリを指定した場合と比較すると半分になります。メモリは 128 MB から 3 GB まで、64 MB ごとに増加できます。

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

AWS Lambda に対するすべての呼び出しは、300 秒以内に完了する必要があります。デフォルトのタイムアウトは 3 秒ですが、1~300 秒の任意のタイムアウト時間を設定できます。

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

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

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 は Kinesis ストリームから記録を取得し、ストリームの各メッセージに対して Lambda 関数を実行できます。

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

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

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

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

イベントはインプットパラメータとして Lambda 関数に送信されます。Amazon Kinesis や Amazon DynamoDB ストリームなど、イベントがバッチで到着するイベントソースの場合、イベントパラメータには、要求バッチサイズに応じて、1 回の呼び出しに複数のイベントが含まれることがあります。Amazon S3 イベント通知の詳細については、「Amazon S3 イベント通知の設定」をご覧ください。Amazon DynamoDB ストリームの詳細については、DynamoDB Stream 開発者ガイドをご覧ください。Amazon SNS を使用して Lambda 関数を呼び出す方法の詳細については、Amazon Simple Notification Service 開発者ガイドをご覧ください。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 ストリームを 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 ストリームのレコードは、シャードごとに厳密にシリアル化されます。つまり、Lanbda で同じシャードに 2 つのレコードが置かれた場合、最初のレコードに対する Lambda 関数の呼び出しは、2 つ目のレコードに対する呼び出しより前に実行されることが保証されます。あるレコードに対する呼び出しがタイムアウトになった場合、またはその他のエラーが発生した場合、Lambda は成功するまで(またはレコードが 24 時間の有効期限切れになるまで)次のレコードに移動しません。シャードの異なるレコード間の順序は保証されず、各シャードの処理は並行して行われます。

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 Developers Guide をご覧ください。

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 を使用してカスタムの REST な 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 関数は、その ID を使用して 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 ストリームなどお客様に代わって 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 で利用可能です。 詳しくは「Troubleshooting Lambda-based applications」をご覧ください。AWS X-Ray の料金が適用されます。

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

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

Lambda@Edge

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

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

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

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

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

Lambda@Edge は、レイテンシーが問題となるようなユースケースに最適化されています。エンドビューワーが世界中に分布している場合などが当てはまります。CloudFront エッジの関数内やリクエスト内では、判断を下すのに必要なすべての情報が使用できる状態にあるのが理想的です。ユーザー特性 (ロケーションやクライアントデバイスなど) に基づいたコンテンツ配信の判断が必要なユースケースでは、Node.js-6.10 内のエッジから直接実行と配信ができるようになりました。一元管理されたサーバーにルーティングし直す必要はありません。

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

既存の Node.js-6.10 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 リソースを完全かつ安全に管理できます。役割についての詳細は、Setting up AWS Lambda をご覧ください。

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

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

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

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

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 を作成して該当のトラフィックを転送し、セキュリティグループでアウトバウンドトラフィックの許可を設定する必要があります。

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# ソースコードの ZIP とすべての NuGet 依存関係、および発行済みの独自の DLL アセンブリが作成され、ランタイムパラメータ「dotnetcore1.0」を使用して AWS Lambda に自動的にアップロードされます。

その他のトピック

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

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

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

いいえ。AWS Lambda は、サービスのユーザー全員に、単一バージョンのオペレーティングシステムと、言語ランタイムを提供しています。

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

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

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

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

AWS Lambda の料金の詳細について

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