最初の Lambda 関数を作成する - AWS Lambda

最初の Lambda 関数を作成する

Lambda の使用を開始するには、Lambda コンソールを使用して関数を作成します。数分で関数を作成およびデプロイして、それをコンソールでテストできます。

チュートリアルを進めていくうちに、Lambda のイベントオブジェクトを使用して関数に引数を渡す方法など、Lambda の基本的な概念を学んでいきす。また、関数からログ出力を返す方法と、Amazon CloudWatch Logs で関数の呼び出しログを表示する方法についても説明します。

簡単のために、関数の作成には Python または Node.js ランタイムのいずれかを使用します。これらはインタープリター言語なので、コンソールの組み込みコードエディタで関数のコードを直接編集できます。Java や C# などのコンパイル型言語では、ローカルのビルドマシン上でデプロイパッケージを作成し、それを Lambda にアップロードする必要があります。他のランタイムを使用して Lambda に関数をデプロイする方法については、「その他のリソースと次のステップ」セクションにあるリンクを参照してください。

ヒント

サーバーレスソリューションを構築する方法については、「サーバーレスデベロッパーガイド」を参照してください。

前提条件

AWS アカウント がない場合は、以下のステップを実行して作成します。

AWS アカウントにサインアップするには
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。

    AWS アカウント にサインアップすると、AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービスとリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

サインアップ処理が完了すると、AWS からユーザーに確認メールが送信されます。https://aws.amazon.com/[マイアカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

AWS アカウント にサインアップしたら、AWS アカウントのルートユーザー をセキュリティで保護し、AWS IAM Identity Center を有効にして、管理ユーザーを作成します。これにより、日常的なタスクにルートユーザーを使用しないようにします。

AWS アカウントのルートユーザーをセキュリティで保護する
  1. [ルートユーザー] を選択し、AWS アカウント のメールアドレスを入力して、アカウント所有者として AWS Management Console にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、「IAM ユーザーガイド」で AWS アカウントのルートユーザーの仮想 MFA デバイスを有効にする方法 (コンソール) を確認してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Center の有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    IAM アイデンティティセンターディレクトリ をアイデンティティソースとして使用するチュートリアルについては、「AWS IAM Identity Center ユーザーガイド」の「 Configure user access with the default IAM アイデンティティセンターディレクトリ」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM アイデンティティセンターユーザーを使用してサインインする方法については、「AWS サインイン User Guide」の「Signing in to the AWS access portal」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成するを参照してください

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの結合」を参照してください。

コンソールで Lambda の関数の作成

この例の関数は、"length" および "width" のラベルが付けられた 2 つの整数値を含む JSON オブジェクトを取り込みます。関数はこれらの値を乗算して面積を計算し、これを JSON 文字列として返します。

またこの関数は、計算された面積に加え CloudWatch ロググループの名前の表示も行います。チュートリアルの後半では、関数の呼び出しの記録を表示するための、CloudWatch Logs の使用方法を学習します。

コンソールでLambda 関数 Hello world を作成するには
  1. Lambda コンソールの [関数ページ] を開きます。

  2. [Create function (関数の作成)] を選択します。

  3. [ゼロから作る] を選択します。

  4. [基本情報] ペインで、[関数名] に「myLambdaFunction」を入力します。

  5. [ランタイム] では、[Node.js 22.x] または [Python 3.13] のいずれかを選択します。

  6. [アーキテクチャ] の設定は [x86_64] のままにし、[関数を作成] を選択します。

メッセージ Hello from Lambda! を返すシンプルな関数に加えて、Lambda は、ユーザーの関数用の実行ロールも作成します。実行ロールとは、AWS のサービスおよびリソースへのアクセス許可を Lambda 関数に付与する AWS Identity and Access Management (IAM) のロールです。Lambda が作成するこのロールは、CloudWatch Logs に書き込むための基本的なアクセス許可を、ユーザーの関数に付与します。

コンソールの組み込みコードエディタを使用して、Lambda が作成した Hello world コードを独自の関数コードに置き換えます。

Node.js
コンソールでコードを変更するには
  1. [コード] タブを選択します。

    Lambda が関数コードを作成すると、それがコンソールの組み込みコードエディタに表示されます。コードエディターに index.mjs タブが表示されない場合は、次の図に示すように、ファイルエクスプローラーで index.mjs を選択します。

    コンソールのコードエディターとファイルエクスプローラーの index.mjs ファイルを示す図
  2. 次のコードを index.mjs タブに貼り付け、Lambda が作成したコードを置き換えます。

    export const handler = async (event, context) => { const length = event.length; const width = event.width; let area = calculateArea(length, width); console.log(`The area is ${area}`); console.log('CloudWatch log group: ', context.logGroupName); let data = { "area": area, }; return JSON.stringify(data); function calculateArea(length, width) { return length * width; } };
  3. [DEPLOY] セクションで、[デプロイ] を選択して関数のコードを更新します。

    Lambda コンソールコードエディタの [デプロイ] ボタン
関数コードを把握する

次のステップに進む前に、関数コードを読む時間を作り、Lambda の主要な概念を把握しましょう。

  • Lambda ハンドラー:

    ユーザーの Lambda 関数は、handler という名前の Node.js 関数を含んでいます。Node.js の Lambda 関数には複数の Node.js 関数を含めることができますが、コードへのエントリポイントは、常に handler 関数です。関数が呼び出されると、Lambda はこのメソッドを実行します。

    コンソールを使用して Hello world 関数を作成すると、Lambda は自動的に、関数のハンドラーメソッドの名前を handler に設定します。この Node.js 関数の名前は編集しないでください。編集すると、関数を呼び出しても Lambda はコードを実行できなくなります。

    Node.js の Lambda ハンドラーの詳細については、「Node.js の Lambda 関数ハンドラーの定義」を参照してください。

  • Lambda のイベントオブジェクト:

    関数 handler は 2 つの引数 (event および context) を受け取ります。Lambda のイベントとは JSON 形式のドキュメントであり、関数で処理するためのデータが含まれています。

    関数が別の AWS のサービス によって呼び出された場合、イベントオブジェクトには、その呼び出しの原因となったイベントに関する情報が含まれています。例えば、オブジェクトを Amazon Simple Storage Service (Amazon S3) バケットにアップロードするときに関数を呼び出すと、そのイベントにはバケットの名前とオブジェクトキーが含まれています。

    この例では、キーと値のペア 2 つを含む JSON 形式のドキュメントをコンソールに入力することで、イベントを作成しています。

  • Lambda のコンテキストオブジェクト:

    この関数の 2 番目の引数は context です。Lambda は、ユーザーの関数に対し、自動的にコンテキストオブジェクトを渡します。コンテキストオブジェクトは、関数の呼び出しおよび実行環境に関する情報を含んでいます。

    モニタリング目的として、コンテキストオブジェクトを使用して関数の呼び出しに関する情報を出力できます。この例では、関数が logGroupName パラメータを使用して、CloudWatch ロググループの名前を出力しています。

    Node.js の Lambda コンテキストオブジェクトの詳細については、「Lambda コンテキストオブジェクトを使用して Node.js 関数の情報を取得する」を参照してください。

  • Lambda でのログ記録:

    Node.js では、関数のログに情報を送信するために、console.log や console.error などのコンソールメソッドを使用できます。このサンプルコードでは、計算された面積と関数の CloudWatch Logs グループの名前を出力するために、console.log ステートメントを使用します。また、stdout または stderr に書き込みを行う任意のロギングライブラリも使用できます。

    詳細については、「Node.js Lambda 関数のログ記録とモニタリング」を参照してください。他のランタイムでのログ記録については、関連するランタイムの「構築方法」のページを参照してください。

Python
コンソールでコードを変更するには
  1. [コード] タブを選択します。

    Lambda が関数コードを作成すると、それがコンソールの組み込みコードエディタに表示されます。コードエディターに lambda_function.py タブが表示されない場合は、次の図に示すように、ファイルエクスプローラーで lambda_function.py 選択します。

    コンソールのコードエディターとファイルエクスプローラーの lambda_function.py ファイルを示す図
  2. 次のコードを lambda_function.py タブに貼り付け、Lambda が作成したコードを置き換えます。

    import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): # Get the length and width parameters from the event object. The # runtime converts the event object to a Python dictionary length = event['length'] width = event['width'] area = calculate_area(length, width) print(f"The area is {area}") logger.info(f"CloudWatch logs group: {context.log_group_name}") # return the calculated area as a JSON string data = {"area": area} return json.dumps(data) def calculate_area(length, width): return length*width
  3. [DEPLOY] セクションで、[デプロイ] を選択して関数のコードを更新します。

    Lambda コンソールコードエディタの [デプロイ] ボタン
関数コードを把握する

次のステップに進む前に、関数コードを読む時間を作り、Lambda の主要な概念を把握しましょう。

  • Lambda ハンドラー:

    ユーザーの Lambda 関数には、lambda_handler という名前の Python 関数が含まれています。Python の Lambda 関数には複数の Python 関数を含めることができますが、コードへのエントリポイントは、常に handler 関数です。関数が呼び出されると、Lambda はこのメソッドを実行します。

    コンソールを使用して Hello world 関数を作成すると、Lambda は自動的に、関数のハンドラーメソッドの名前を lambda_handler に設定します。この Python 関数の名前は編集しないでください。編集すると、関数を呼び出しても Lambda はコードを実行できなくなります。

    Python の Lambda ハンドラーの詳細については、「Python の Lambda 関数ハンドラーの定義」を参照してください。

  • Lambda のイベントオブジェクト:

    関数 lambda_handler は 2 つの引数 (event および context) を受け取ります。Lambda のイベントとは JSON 形式のドキュメントであり、関数で処理するためのデータが含まれています。

    関数が別の AWS のサービス によって呼び出された場合、イベントオブジェクトには、その呼び出しの原因となったイベントに関する情報が含まれています。例えば、オブジェクトを Amazon Simple Storage Service (Amazon S3) バケットにアップロードするときに関数を呼び出すと、そのイベントにはバケットの名前とオブジェクトキーが含まれています。

    この例では、キーと値のペア 2 つを含む JSON 形式のドキュメントをコンソールに入力することで、イベントを作成しています。

  • Lambda のコンテキストオブジェクト:

    この関数の 2 番目の引数は context です。Lambda は、ユーザーの関数に対し、自動的にコンテキストオブジェクトを渡します。コンテキストオブジェクトは、関数の呼び出しおよび実行環境に関する情報を含んでいます。

    モニタリング目的として、コンテキストオブジェクトを使用して関数の呼び出しに関する情報を出力できます。この例では、関数が log_group_name パラメータを使用して、CloudWatch ロググループの名前を出力しています。

    Python の Lambda コンテキストオブジェクトの詳細については、「Lambda コンテキストオブジェクトを使用して Python 関数の情報を取得する」を参照してください。

  • Lambda でのログ記録:

    Python では、関数のログに情報を送信するために、print ステートメントまたは Python ログ記録ライブラリのいずれかを使用できます。キャプチャされる内容の違いを説明するために、このサンプルコードでは両方の方法を使用しています。本番用のアプリケーションでは、ログ記録ライブラリを使用することをお勧めします。

    詳細については、「Python Lambda 関数のログ記録とモニタリング」を参照してください。他のランタイムでのログ記録については、関連するランタイムの「構築方法」のページを参照してください。

コンソールコードエディタを使用して Lambda 関数を呼び出す

Lambda コンソールコードエディタを使用して自分の関数を呼び出す場合、テストイベントを作成して、関数に送信します。このイベントは、キー "length" および "width" を使用するキーと値のペア 2 つを含む、JSON 形式のドキュメントです。

テストイベントを作成するには
  1. コンソールコードエディタの [TEST EVENTS] セクションで、[テストイベントを作成] を選択します。

    Lambda コンソールコードエディタでテストイベントボタンを作成する
  2. [Event Name] (イベント名) で、「myTestEvent」と入力します。

  3. [Event JSON] セクションで、デフォルトの JSON を次のように置き換えます。

    { "length": 6, "width": 7 }
  4. [Save] を選択します。

関数をテストして呼び出しレコードを表示するには

コンソールコードエディタの [TEST EVENTS] セクションで、テストイベントの横にある実行アイコンを選択します。

Lambda コンソールコードエディタでテストイベントボタンを実行する

関数の実行が終了すると、[出力] タブにレスポンスと関数ログが表示されます。次のような結果が表示されます。

Node.js
Status: Succeeded Test Event Name: myTestEvent Response "{\"area\":42}" Function Logs START RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Version: $LATEST 2024-08-31T23:39:45.313Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2024-08-31T23:39:45.331Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a REPORT RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Duration: 20.67 ms Billed Duration: 21 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 163.87 ms Request ID 5c012b0a-18f7-4805-b2f6-40912935034a
Python
Status: Succeeded Test Event Name: myTestEvent Response "{\"area\": 42}" Function Logs START RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Version: $LATEST The area is 42 [INFO] 2024-08-31T23:43:26.428Z 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b REPORT RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Duration: 1.42 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 39 MB Init Duration: 123.74 ms Request ID 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b

Lambda コンソール以外で関数を呼び出す場合は、CloudWatch Logs を使用して関数の実行結果を表示する必要があります。

CloudWatch Logs で関数の呼び出しレコードを表示するには
  1. Amazon CloudWatch コンソールの [[Log groups (ロググループ)] ページ] を開きます。

  2. 関数のロググループの名前を選択します (/aws/lambda/myLambdaFunction) 。これは関数がコンソールに出力したロググループ名です。

  3. 下にスクロールし、表示したい関数呼び出しのログストリームを選択します。

    Lambda 関数のログストリームの一覧。

    次のような出力が表示されます:

    Node.js
    INIT_START Runtime Version: nodejs:22.v13 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:e3aaabf6b92ef8755eaae2f4bfdcb7eb8c4536a5e044900570a42bdba7b869d9 START RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Version: $LATEST 2024-08-23T22:04:15.809Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2024-08-23T22:04:15.810Z aba6c0fc-cf99-49d7-a77d-26d805dacd20 INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 REPORT RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Duration: 17.77 ms Billed Duration: 18 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 178.85 ms
    Python
    INIT_START Runtime Version: python:3.13.v16 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:ca202755c87b9ec2b58856efb7374b4f7b655a0ea3deb1d5acc9aee9e297b072 START RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Version: $LATEST The area is 42 [INFO] 2024-09-01T00:05:22.464Z 9315ab6b-354a-486e-884a-2fb2972b7d84 CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e REPORT RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Duration: 1.15 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 40 MB

クリーンアップ

作業が完了したサンプル関数は削除しておきます。また、関数のログを保存するロググループと、コンソールが作成した実行ロールも削除できます。

Lambda 関数を削除するには
  1. Lambda コンソールの関数ページを開きます。

  2. 作成した関数を選択します。

  3. [アクション] で、[削除] を選択します。

  4. テキスト入力フィールドに confirm と入力し、[削除] を選択します。

ロググループを削除するには
  1. Amazon CloudWatch コンソールの [Log groups (ロググループ)] ページを開きます。

  2. 関数のロググループ (/aws/lambda/myLambdaFunction) を選択します。

  3. [アクション]、[ロググループの削除] の順にクリックします。

  4. ロググループの削除ダイアログボックスで、[削除] をクリックします。

実行ロールを削除するには
  1. AWS Identity and Access Management (IAM) コンソールの [Roles (ロール)] ページを開きます。

  2. 関数の実行ロールを選択します (myLambdaFunction-role-31exxmpl など)。

  3. [削除] を選択します。

  4. [ロールを削除] ダイアログボックスにロール名を入力し、[削除] を選択します。

その他のリソースと次のステップ

コンソールを使用してシンプルな Lambda 関数を作成してテストを行ったので、次の各ステップを実行します。