全般

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 はコードを使用している間に追加の整合性チェックを実行します。

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 開始方法ガイド」で使用を開始する。

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

はい。AWS Lambda コンソール、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 のログと統合されます。これにより、各 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 から 3 GB まで、64 MB ずつ増加できます。

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

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

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 では 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 ストリームなど、イベントがバッチで到着するイベントソースの場合、イベントパラメータには、要求バッチサイズに応じて、1 回の呼び出しに複数のイベントが含まれることがあります。Amazon S3 イベント通知の詳細については、Amazon S3 イベント通知の設定をご覧ください。Amazon DynamoDB ストリームの詳細については、DynamoDB ストリーム開発者ガイドをご覧ください。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 ストリームを 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 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: 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 エッジの関数内やリクエスト内で使用できるようになります。つまり、ユーザー特性 (ロケーションやクライアントデバイスなど) に基づいてコンテンツの処理方法を決定する必要があるユースケースでは、中央サーバーにルーティングし直さなくても、ユーザーの近くで実行および処理ができるようになります。

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 stream をポーリングするか、どのようにすれば設定できますか?

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

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 関数を順次呼び出して出力を代わる代わる渡すことも、同時に呼び出すこともできます。詳細については、ドキュメントを参照してください。

AWS Lambda 料金の詳細

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