AWS SDK for JavaScript V3 APIリファレンスガイドでは、バージョン 3 (V3) のすべてのAPIオペレーションについて詳しく説明しています AWS SDK for JavaScript 。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
API Gateway での Lambda の呼び出し
Lambda 関数を呼び出すには、Amazon API Gateway を使用します。これは、REST、、および WebSocket APIs を大規模に作成、公開、維持、モニタリングHTTP、保護するための AWS サービスです。API デベロッパーは、APIsそのアクセス AWS または他のウェブサービス、および AWS クラウドに保存されているデータを作成できます。API Gateway デベロッパーは、独自のクライアントアプリケーションでAPIs使用するために を作成できます。詳細については、「Amazon API Gateway とは」を参照してください。
AWS Lambda は、サーバーのプロビジョニングや管理を行わずにコードを実行できるようにするコンピューティングサービスです。Lambda 関数は、さまざまなプログラミング言語で作成できます。の詳細については AWS Lambda、「 とは AWS Lambda」を参照してください。
この例では、Lambda JavaScript ランタイム を使用して Lambda 関数を作成しますAPI。この例では、さまざまな AWS サービスを呼び出して、特定のユースケースを実行します。例えば、次の図に示すように、組織が 1 周年記念日に従業員を祝福するモバイルテキストメッセージを送信するとします。

この例は完了までに約 20 分かかります。
この例では、 JavaScript ロジックを使用して、このユースケースを実行するソリューションを作成する方法を示しています。例えば、データベースを読み取り、1 年記念日に達した従業員を特定する方法、データを処理する方法、Lambda 関数を使用してテキストメッセージを送信する方法について説明します。次に、APIGateway を使用して Rest エンドポイントを使用してこの AWS Lambda 関数を呼び出す方法について説明します。例えば、この curl コマンドを使用して Lambda 関数を呼び出すことができます。:
curl -XGET "https://xxxxqjko1o3.execute-api.us-east-1.amazonaws.com/cronstage/employee"
この AWS チュートリアルでは、これらのフィールドを含む Employee という名前の Amazon DynamoDB テーブルを使用します。
id - 表のプライマリキー。
firstName - 従業員の名。
電話 - 従業員の電話番号。
startDate - 従業員の開始日。

重要
完了コスト: このドキュメントに含まれる AWS サービスは、 AWS 無料利用枠に含まれています。ただし、この例を完了したら必ずすべてのリソースを終了して料金が発生しないようにしてください。
アプリケーションを構築するには、
前提条件タスク
この例をセットアップして実行するには、まず次のタスクを完了する必要があります。
-
これらのノード TypeScript 例を実行するようにプロジェクト環境を設定し、必要な AWS SDK for JavaScript モジュールとサードパーティーモジュールをインストールします。の指示に従います GitHub
。 -
ユーザーの認証情報を使用して、共有設定ファイルを作成します。共有認証情報ファイルの提供の詳細については、「」およびツールリファレンスガイドの「共有設定ファイルと認証情報ファイル」を参照してください。 AWS SDKs
AWS リソースを作成する
このチュートリアルでは、以下のリソースが必要です。
-
Id
という名前のキーと前の図に示されているフィールドを持つEmployee
という Amazon DynamoDB テーブル。このユースケースでテストする有効な携帯番号を含め、正しいデータを入力してください。詳細については、テーブルの作成を参照してください。 -
Lambda 関数を実行するためのアクセス許可がアタッチされたIAMロール。
-
Lambda 関数をホストするAmazon S3 バケット。
これらのリソースは手動で作成できますが、このチュートリアルで説明されている AWS CloudFormation ように、 を使用してこれらのリソースをプロビジョニングすることをお勧めします。
を使用して AWS リソースを作成する AWS CloudFormation
AWS CloudFormation では、 AWS インフラストラクチャデプロイを予測可能かつ繰り返し作成およびプロビジョニングできます。の詳細については AWS CloudFormation、AWS CloudFormation 「 ユーザーガイド」を参照してください。
を使用して AWS CloudFormation スタックを作成するには AWS CLI:
AWS CLI ユーザーガイド の AWS CLI 以下の手順をインストールして設定します。
プロジェクトフォルダのルートディレクトリ
setup.yaml
に という名前のファイルを作成し、その上に GitHubコンテンツをコピーします。 注記
AWS CloudFormation テンプレートは、 AWS CDK で利用可能な GitHub
を使用して生成されました。の詳細については AWS CDK、AWS Cloud Development Kit (AWS CDK) 「 デベロッパーガイド」を参照してください。 コマンドラインから次のコマンドを実行し、
STACK_NAME
スタックの一意の名前。重要
スタック名は、 AWS リージョンと AWS アカウント内で一意である必要があります。最大 128 文字まで指定でき、数字とハイフンを使用できます。
aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM
create-stack
コマンドパラメータの詳細については、 AWS CLI Command Reference guide (コマンドリファレンスガイド)および「AWS CloudFormation ユーザーガイド」を参照してください。-
次に、表に入力します の手順に従ってテーブルに入力します。
表に入力します
テーブルにデータを入力するには、まず libs
という名前のディレクトリを作成し、そこに dynamoClient.js
という名前のファイルを作成し、それに以下の内容を貼り付けます。
const { DynamoDBClient } = require ( "@aws-sdk/client-dynamodb" ); // Set the AWS Region. const REGION = "REGION"; // e.g. "us-east-1" // Create an Amazon Lambda service client object. const dynamoClient = new DynamoDBClient({region:REGION}); module.exports = { dynamoClient };
このコードは、 で GitHub
次に、プロジェクトフォルダのルートディレクトリpopulate-table.js
に という名前のファイルを作成し、その上に GitHubphone
のプロパティの値をE.164形式の有効な携帯電話番号に置き換え、startDate
の値を今日の日付に置き換えます。
コマンドラインから、以下のコマンドを実行します。
node populate-table.js
const { BatchWriteItemCommand } = require ( "aws-sdk/client-dynamodb" ); const {dynamoClient} = require ( "./libs/dynamoClient" ); // Set the parameters. export const params = { RequestItems: { Employees: [ { PutRequest: { Item: { id: { N: "1" }, firstName: { S: "Bob" }, phone: { N: "155555555555654" }, startDate: { S: "2019-12-20" }, }, }, }, { PutRequest: { Item: { id: { N: "2" }, firstName: { S: "Xing" }, phone: { N: "155555555555653" }, startDate: { S: "2019-12-17" }, }, }, }, { PutRequest: { Item: { id: { N: "55" }, firstName: { S: "Harriette" }, phone: { N: "155555555555652" }, startDate: { S: "2019-12-19" }, }, }, }, ], }, }; export const run = async () => { try { const data = await dbclient.send(new BatchWriteItemCommand(params)); console.log("Success", data); } catch (err) { console.log("Error", err); } }; run();
このコードは、 で GitHub
AWS Lambda 関数の作成
の設定 SDK
libs
のディレクトリで snsClient.js
と lambdaClient.js
という名前のファイルを作成し、これらのファイルに以下の内容をそれぞれ貼り付けます。
const { SNSClient } = require("@aws-sdk/client-sns"); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon SNS service client object. const snsClient = new SNSClient({ region: REGION }); module.exports = { snsClient };
置換 REGION
AWS リージョンを使用します。このコードは、 で GitHub
const { LambdaClient } = require("@aws-sdk/client-lambda"); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon Lambda service client object. const lambdaClient = new LambdaClient({ region: REGION }); module.exports = { lambdaClient };
置換 REGION
AWS リージョンを使用します。このコードは、 で GitHub
まず、必要な AWS SDK for JavaScript (v3) モジュールとコマンドをインポートします。次に、今日の日付を計算し、パラメータに割り当てます。3 番目に、ScanCommand
のパラメータを作成します。置換 TABLE_NAME
この例の AWS リソースを作成する セクションで作成したテーブルの名前。
以下のコードスニペットは、このステップを示しています (詳細な例については、Lambda 関数をバンドルします を参照してください)。
const { ScanCommand } = require("@aws-sdk/client-dynamodb"); const { PublishCommand } = require("@aws-sdk/client-sns"); const { snsClient } = require("./libs/snsClient"); const { dynamoClient } = require("./libs/dynamoClient"); // Get today's date. const today = new Date(); const dd = String(today.getDate()).padStart(2, "0"); const mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0! const yyyy = today.getFullYear(); const date = `${yyyy}-${mm}-${dd}`; // Set the parameters for the ScanCommand method. const params = { // Specify which items in the results are returned. FilterExpression: "startDate = :topic", // Define the expression attribute value, which are substitutes for the values you want to compare. ExpressionAttributeValues: { ":topic": { S: date }, }, // Set the projection expression, which are the attributes that you want. ProjectionExpression: "firstName, phone", TableName: "Employees", };
DynamoDB テーブルをスキャンします
まず、 という非同期/待機関数を作成してsendText
、Amazon SNS を使用してテキストメッセージを発行しますPublishCommand
。次に、今日が勤務記念日である従業員の DynamoDB テーブルをスキャンし、sendText
関数を呼び出してこれらの従業員にテキストメッセージを送信する try
ブロックパターンを追加します。エラーが発生した場合は、catch
ブロックされます。
以下のコードスニペットは、このステップを示しています (詳細な例については、Lambda 関数をバンドルします を参照してください)。
// Helper function to send message using Amazon SNS. exports.handler = async () => { // Helper function to send message using Amazon SNS. async function sendText(textParams) { try { await snsClient.send(new PublishCommand(textParams)); console.log("Message sent"); } catch (err) { console.log("Error, message not sent ", err); } } try { // Scan the table to identify employees with work anniversary today. const data = await dynamoClient.send(new ScanCommand(params)); for (const element of data.Items) { const textParams = { PhoneNumber: element.phone.N, Message: `Hi ${element.firstName.S}; congratulations on your work anniversary!`, }; // Send message using Amazon SNS. sendText(textParams); } } catch (err) { console.log("Error, could not scan table ", err); } };
Lambda 関数をバンドルします
このトピックでは、 mylambdafunction.ts
と、この例に必要な AWS SDK for JavaScript モジュールを というバンドルされたファイルにバンドルする方法について説明しますindex.js
。
まだの場合は、この例の前提条件タスクに従ってwebpackをインストールしてください。
注記
Webpack の詳細については、「Webpack でアプリケーションをバンドルする」を参照してください。
コマンドラインで以下を実行して、この例 JavaScript の を
<index.js>
というファイルにバンドルします。webpack mylambdafunction.ts --mode development --target node --devtool false --output-library-target umd -o index.js
重要
出力の名前が
index.js
であることに注意してください。Lambda関数が機能するにはindex.js
ハンドラーが必要です。バンドルされた出力ファイル
index.js
を という名前のZIPファイルに圧縮しますmylambdafunction.zip
。このチュートリアルのAWS リソースを作成する トピックで作成したAmazonS3バケットに
mylambdafunction.zip
をアップロードします。
Lambda 関数をデプロイします
プロジェクトのルートで、lambda-function-setup.ts
ファイルを作成し、それに以下の内容をペーストします。
置換 BUCKET_NAME
Lambda 関数ZIPのバージョンをアップロードした Amazon S3 バケットの名前。置換 ZIP_FILE_NAME
Lambda 関数ZIPのバージョンの名前。置換 ROLE
このチュートリアルのAWS リソースを作成する トピックで作成したIAMロールの Amazon リソース番号 (ARN) を使用します。置換 LAMBDA_FUNCTION_NAME
Lambda 関数の名前。
// Load the required Lambda client and commands. const { CreateFunctionCommand } = require ( "@aws-sdk/client-lambda" ); const { lambdaClient} = require ( "./libs/lambdaClient.js ); // Set the parameters. const params = { Code: { S3Bucket: "BUCKET_NAME", // BUCKET_NAME S3Key: "ZIP_FILE_NAME", // ZIP_FILE_NAME }, FunctionName: "LAMBDA_FUNCTION_NAME", Handler: "index.handler", Role: "IAM_ROLE_ARN", // IAM_ROLE_ARN; e.g., arn:aws:iam::650138640062:role/v3-lambda-tutorial-lambda-role Runtime: "nodejs12.x", Description: "Scans a DynamoDB table of employee details and using Amazon Simple Notification Services (Amazon SNS) to " + "send employees an email on each anniversary of their start-date.", }; const run = async () => { try { const data = await lambdaClient.send(new CreateFunctionCommand(params)); console.log("Success", data); // successful response } catch (err) { console.log("Error", err); // an error occurred } }; run();
コマンドラインで次を入力して、Lambda 関数をデプロイします。
node lambda-function-setup.ts
このコード例は、 で GitHub
Lambda 関数を呼び出すように API Gateway を設定する
残りを作成する API
API Gateway コンソールを使用して、Lambda 関数の休止エンドポイントを作成できます。完了したら、restful 呼び出しを使用して Lambda 関数を呼び出すことができます。
Amazon API Gateway コンソール
にサインインします。 Rest でAPI、Build を選択します。
[新規]API を選択します。
従業員をAPI名前として指定し、説明を入力します。
Create APIを選択します。
Employeeセクションの[Resources]を選択します。
名前フィールドの employeesを指定します。
[Create Resources] (リソースの作成) を選択します。
[ Actions ] ( アクション )のドロップダウンから [ Create Resource ] ( リソースの作成 )を選択します。
/employees を選択し、アクション からメソッドの作成 を選択し、以下のドロップダウンメニューGETから /employees を選択します。チェックマークアイコンを選択します。
Lambda functionを選択し、Lambda 関数名としてmylambdafunctionと入力します。[Save] を選択します。
API Gateway メソッドをテストする
チュートリアルのこの時点で、mylambdafunction Lambda 関数を呼び出す API Gateway メソッドをテストできます。メソッドをテストするには、次の図に示す[ Test ]を選びます。

Lambda 関数が呼び出されると、ログファイルを表示して成功したメッセージを表示できます。
Gateway APIメソッドをデプロイする
テストが成功したら、Amazon API Gateway コンソール
[ GET ]( 取得する )を選択します。
Actions ドロップダウンから、 をデプロイ APIを選択します。
Deploy API フォームに入力し、Deploy を選択します。
[Save Changes] を選択します。
再度取得 を選択し、 URL が変更されることに気づきます。これは、Lambda 関数の呼び出しURLに使用できる呼び出しです。
リソースを削除します
お疲れ様でした。を使用して Amazon API Gateway を介して Lambda 関数を呼び出しました AWS SDK for JavaScript。このチュートリアルの冒頭で説明したように、このチュートリアルを進めたうえで、作成したすべてのリソースを終了して、料金が発生しないようにしてください。これを行うには、このチュートリアルのAWS リソースを作成する トピックで作成した AWS CloudFormation スタックを次のように削除します。
「スタック」ページを開き、スタックを選択します。
[削除] を選択します。