メニュー
Amazon API Gateway
開発者ガイド

カスタムの Lambda 統合で API Gateway API をビルドする

注記

以前、Lambda 統合と呼ばれていたカスタムの Lambda 統合は、レガシーテクノロジーです。新しい API では、Lambda プロキシ統合 を使用することをお勧めします。詳細については、「 Lambda プロキシ統合で API Gateway API をビルドする 」を参照してください。

このウォークスルーでは、API Gateway コンソールを使用して API をビルドし、クライアントがカスタムの Lambda 統合 で Lambda 関数を呼び出すことができるようにします。AWS Lambda 関数および Lambda 関数の詳細については、「AWS Lambda Developer Guide」を参照してください。

分かりやすくするために、API 設定が最小限のシンプルな Lambda 関数で、カスタムの Lambda 統合を使用して API Gateway API を構築する手順について説明します。必要に応じて、いくつかのロジックについて説明します。カスタムの Lambda 統合の詳細な例については、「AWS Lambda 関数の API GatewayAPI を作成する」を参照してください。

API を作成する前に、次に説明する Lambda 関数を AWS Lambda で作成し、Lambda バックエンドをセットアップします。

カスタムの Lambda 統合で Lambda 関数を作成する

注記

Lambda 関数を作成すると、AWS アカウントに課金される場合があります。

このステップでは、「Hello World!」のような Lambda 関数をカスタムの Lambda 統合で作成します。このウォークスルーでは、この関数 GetStartedLambdaIntegration が呼び出されます。これは、Lambda プロキシ統合で作成した関数、「GetStartedLambdaProxyIntegration」と似ています。

この Lambda の GetStartedLambdaIntegration の関数の Node.js 実装は次のとおりです。

'use strict'; var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; var times = ['morning', 'afternoon', 'evening', 'night', 'day']; console.log('Loading function'); exports.handler = function(event, context, callback) { // Parse the input for the name, city, time and day property values let name = event.name === undefined ? 'you' : event.name; let city = event.city === undefined ? 'World' : event.city; let time = times.indexOf(event.time)<0 ? 'day' : event.time; let day = days.indexOf(event.day)<0 ? null : event.day; // Generate a greeting let greeting = 'Good ' + time + ', ' + name + ' of ' + city + '. '; if (day) greeting += 'Happy ' + day + '!'; // Log the greeting to CloudWatch console.log('Hello: ', greeting); // Return a greeting to the caller callback(null, { "greeting": greeting }); };

カスタムの Lambda 統合の場合、API Gateway は統合リクエストボディとして入力をクライアントから Lambda 関数に渡します。Lambda 関数ハンドラの event オブジェクトが入力です。

Lambda 関数はシンプルです。namecitytime、および day プロパティの入力オブジェクト (event) を解析します。その後、JSON オブジェクト ({"message":greeting}) として、発信者に挨拶を返します。このメッセージは "Good [morning|afternoon|day], [name|you] in [city|World]. Happy day!" パターンです。これは、Lambda 関数への入力が、以下の JSON オブジェクトのいずれかであることを前提としています。

{ "city": "...", "time": "...", "day": "...", "name" : "..." }

詳細については、AWS Lambda Developer Guide を参照してください。

また、この関数では、console.log(...) を呼び出して、Amazon CloudWatch にその実行を記録します。これは、関数のデバッグ時に呼び出しをトレースする場合に役立ちます。GetStartedLambdaIntegration 関数で呼び出しを記録できるようにするには、Lambda 関数の適切なポリシーで IAM ロールを設定して CloudWatch ストリームを作成し、そのストリームにログエントリを追加します。Lambda コンソールに従って、必要な IAM ロールとポリシーを作成します。

Swagger から API をインポートする場合など、API Gateway コンソールを使用せずに API をセットアップする場合には、必要に応じて Lambda 関数を呼び出すための API Gateway の呼び出しロール/ポリシーを明示的に作成し、設定する必要があります。Lambda 呼び出しと API Gateway API の実行ロールの設定の詳細については、「IAM アクセス権限により API へのアクセスを制御する」を参照してください。

Lambda プロキシ統合用に使用する Lambda 関数、GetStartedLambdaProxyIntegation と比較して、カスタムの Lambda 統合の Lambda の GetStartedLambdaIntegration 関数は、API Gateway API 統合のリクエストボディから入力のみ取り込みます。この関数では、JSON オブジェクト、文字列、数値、ブール値、またはバイナリ BLOB の出力を返すことができます。対照的に、Lambda プロキシ統合の Lambda 関数では、リクエストデータから入力を取り込みますが、特定の JSON オブジェクトの出力を返す必要があります。カスタムの Lambda 統合の GetStartedLambdaIntegration 関数では、入力として API リクエストパラメータを指定することができますが、クライアントリクエストをバックエンドに転送する前に、API Gateway で、必要な API リクエストパラメータが統合リクエストボディにマッピングされていることを前提としています。そのためには、API 開発者は、マッピングテンプレートを作成し、API 作成時に API メソッドで設定する必要があります。

ここで、Lambda の GetStartedLambdaIntegration 関数を作成します。

カスタムの Lambda 統合で Lambda の GetStartedLambdaIntegration 関数を作成するには

  1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。

  2. 次のいずれかを行ってください。

    • ウェルカムページが表示されたら、[Get Started]、[Create a function] の順に選択します。

    • [Lambda > Functions] リストのページが表示されたら、[Create a function] を選択します。

  3. [Select blueprint] から、[Author from scratch] を選択します。

  4. [Configure triggers] ペインで、[Next] を選択します。

  5. [Configure function] ペインで、以下の作業を行います。

    1. [Basic information]:

      • [Name] に、Lambda 関数名として GetStartedLambdaIntegration と入力します。

      • [Description] に、「カスタムの Lambda 統合を使用した開始方法チュートリアルのバックエンド」と入力します。これはオプションのため、空白にすることができます。

      • [Runtime] で [Node.js 6.10] を選択します。

    2. [Lambda function code]:

      • [Content entry type] に表示されていない場合は、[Edit code inline] を選択します。

      • このセクションの冒頭に表示された Lambda 関数コードをコピーし、インラインコードエディターに貼り付けます。

      • このセクションのその他のフィールドは、デフォルト設定のままにしておきます。

    3. [Lambda function handler and role]:

      • [Handler] は、デフォルトの index.handler のままにします。

      • [Role] で、「Create new role from template(s)」を選択します。

      • [Role name] に、ロールの名前 (例: GetStartedLambdaIntegrationRole) を入力します。

      • [Policy templates] では、Simple Microservice permissions を選択します。

        ヒント

        既存の IAM ロールを使用するには、[Role] で「Choose an existing role」を選択し、次に既存のロールのドロップダウンリストからいずれかを選択します。カスタムロールを作成する場合は、「Create a Custom Role」を選択し、その手順に従ってください。

    4. [Tags] は空白のままにします。

    5. [Advanced settings] はデフォルト値のままにします。

    6. [次へ] を選択します。

    7. [Create function] を選択します。この関数を作成した AWS リージョンを書き留めます。これは、後で必要になります。

  6. 新しく作成した関数をテストするには、ベストプラクティスとして [Actions]、[Configure test event] の順に選択することをお勧めします。

    1. [Input test event] で、デフォルトのコードステートメントを次のように置き換え、[Save and test] を選択します。

      { "name": "Jonny", "city": "Seattle", "time": "morning", "day": "Wednesday" }
    2. [Test] を選択して関数を呼び出します。[Execution result: succeeded] セクションが表示されます。[Detail] を展開すると、次の出力が表示されます。

      { "greeting": "Good morning, Jonny of Seattle. Happy Wednesday!" }

      この出力は CloudWatch ログにも書き込まれます。

また、他にも、IAM コンソールを使用して、Lambda 関数と共に作成された IAM ロール (GetStartedLambdaIntegrationRole) を表示することができます。この IAM ロールには、2 つのインラインポリシーがアタッチされています。1 つは、Lambda を実行する上で最も基本的なアクセス許可が指定されているポリシーです。これにより、Lambda 関数が作成されているリージョンで、アカウントの CloudWatch リソースの CloudWatch CreateLogGroup を呼び出すことができます。また、このポリシーでは、Lambda の HelloWorldForLambdaIntegration 関数で CloudWatch ストリームやログ記録イベントを作成することもできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:region:account-id:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:/aws/lambda/GetStartedLambdaIntegration:*" ] } ] }

他のポリシードキュメントは、この例で使用されていない他の AWS サービスの呼び出しに適用されます。この手順はスキップできます。

この IAM ロールには、信頼されたエンティティ (lambda.amazonaws.com) が関連付けられています。信頼関係は次のとおりです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

この信頼関係およびインラインポリシーを組み合わせることで、Lambda 関数を使用して、CloudWatch Logs のログイベントに console.log() 関数を呼び出すことができます。

AWS マネジメントコンソール を使用して Lambda 関数を作成していない場合は、これらの例に従って、必要な IAM ロールを作成し、手動で関数にアタッチする必要があります。

カスタムの Lambda 統合で API を作成する

Lambda 関数 (GetStartedLambdaIntegration) を作成してテストしたら、API Gateway API からこの関数を公開できるようになります。例として、汎用的な HTTP メソッドで Lambda 関数を公開します。リクエストボディ、URL パス変数、クエリ文字列、ヘッダーを使用して、クライアントから必要な入力データを受け取ります。API の API Gateway のリクエスト検証元を有効にして、必要なデータがすべて適切に定義され、指定されていることを確認します。API Gateway のマッピングテンプレートを指定して、クライアントで指定されたリクエストデータをバックエンドの Lambda 関数で定められた有効な形式に変換します。

API の名前は GetStartedLambdaIntegrationAPI です。

Lambda 関数を使用してカスタムの Lambda 統合で API を作成するには

  1. API Gateway コンソールを起動します。

  2. [Create new API] を選択します。

    1. [API name] に「GetStartedLambdaIntegrationAPI」と入力します。

    2. [Description] に API の説明を入力するか、空白のままにします。

    3. [Create API] を選択します。

  3. [Resources] のルートリソース (/) を選択します。[Actions] メニューから、[Create Resource] を選択します。

    1. [Resource Name] に「city」を入力します。

    2. [Resource Path] を {city} と置き換えます。これは、クライアントから入力を受け付けるために使用するテンプレートパス関数の例です。後で、マッピングテンプレートを使用してこのパス変数を Lambda 関数の入力にマッピングする方法について説明します。

    3. [Enable API Gateway Cors] オプションを選択します。

    4. [Create Resource] を選択します。

  4. 新しく作成した /{city} リソースが強調表示されたら、[Actions] から [Create Method] を選択します。

    1. [HTTP メソッド] ドロップダウンメニューから ANY を選択します。ANY HTTP 動詞は、実行時にクライアントより送信される有効な HTTP メソッドのクライアントのプレースホルダーです。この例では、ANY メソッドが、カスタムの Lambda 統合と Lambda プロキシ統合に使用できることを示します。

    2. 設定を保存するには、チェックマークアイコンを選択します。

  5. [Method Execution] の [ANY /{city}] メソッドで、以下の操作を行います。

    1. Integration type で [Lambda Function] を選択します。

    2. カスタムの Lambda 統合を使用するには、[Use Lambda Proxy integration] ボックスをオフのままにします。

    3. Lambda 関数を作成したリージョン (例: us-west-2) を選択します。

    4. [Lambda Function] に Lambda 関数の名前 (例: GetStartedLambdaIntegration) を入力します。

    5. [Save] を選択します。

    6. [Add Permission to Lambda Function] の [OK] を選択して、API で統合された Lambda 関数を呼び出すために API Gateway で必要なアクセス許可をセットアップします。

  6. [Method Execution] で、[Method Request] を選択し、次のように設定します。

    • クエリ文字列パラメータ (time)

    • ヘッダーパラメータ (day) を設定するには

    • ペイロードのプロパティ (callerName) を定義するには

    実行時、クライアントは、これらのリクエストパラメータとリクエストボディを使用して、時間や曜日、発信者の名前を指定することができます。/{city} パス変数は既に設定済みです。

    1. [Settings] で鉛筆アイコンを選択し、続いて [Request Validator] ドロップダウンメニューから Validate body, query string parameters, and headers を選択します。これにより、API Gateway は、リクエストを Lambda 関数に転送する前に基本的なリクエスト検証を行うことができます。

    2. [URL Query String Parameters] セクションを展開します。[Add query string] を選択します。[Name] に「time」を入力します。[Required] オプションを選択し、続いて、チェックマークアイコンを選択して設定を保存します。不要な課金が行われないように、[Caching] はオフのままにしておきます。

    3. [HTTP Request Headers] セクションを展開します。[Add header] を選択します。[Name] に「day」を入力します。[Required] オプションを選択し、続いて、チェックマークアイコンを選択して設定を保存します。不要な課金が行われないように、[Caching] はオフのままにしておきます。

    4. メソッドリクエストのペイロードを定義するには、次の作業を行います。

      1. モデルを定義するには、API Gateway プライマリナビゲーションペインから API の [Models] を選択し、続いて [Create] を選択します。

      2. [Model name] に「GetStartedLambdaIntegrationUserInput」と入力します。

      3. [Content type] に「application/json」と入力します。

      4. [Model description] に説明を入力するか、空白のままにします。

      5. 次のスキーマ定義を [Model schema] エディターにコピーします。

        { "$schema": "http://json-schema.org/draft-04/schema#", "title": "GetStartedLambdaIntegrationInputModel", "type": "object", "properties": { "callerName": { "type": "string" } } }
      6. [Save] を選択して、入力モデルの定義を終了します。

      7. [Method Request] に戻り、[Request body] を展開します。[Add model] を選択します。[Content type] に「application/json」と入力します。[Model name] で、「GetStartedLambdaIntegrationInput」を選択します。チェックマークアイコンを選択して、設定を保存します。

  7. ANY /{city} メソッドの [Method Execution] で、[Integration Request] を選択して本文マッピングテンプレートをセットアップします。これにより、以前に設定したメソッドのリクエストパラメータ (nameQuery または nameHeader) は、バックエンドの Lambda 関数で定められている通りに、JSON ペイロードにマッピングされます。

    1. [本文マッピングテンプレート] セクションを展開します。[Add mapping template] を選択します。[Content-Type] に [application/json] と入力します。チェックマークアイコンを選択して、設定を保存します。

    2. VTL スクリプトエディターに以下のマッピングテンプレートを入力します。[Save] を選択してセットアップを終了します。

  8. [Integration Request] を選択してマッピングテンプレートをセットアップし、クライアントが指定したリクエストデータを、統合された Lambda 関数の入力形式に変換します。

    1. [Body mapping templates] セクションを展開します。

    2. [Request body passthrough] で推奨されている When there are no templates defined を確認します。

    3. [Add mapping template] を選択します。

    4. [Content-type] に「application/json」と入力します。

    5. チェックマークアイコンを選択して、設定を保存します。

    6. [Generate template] から GetStartedLambaIntegrationUserInput を選択し、初回のマッピングテンプレートを生成します。モデルスキーマを定義したため、このオプションを利用することができます。一からマッピングテンプレートを記述する必要はありません。

    7. マッピングテンプレートエディターでマッピングスクリプトを以下のように変更する

      #set($inputRoot = $input.path('$')) { "city": "$input.params('city')", "time": "$input.params('time')", "day": "$input.params('day')", "name": "$inputRoot.callerName" }

API メソッドの呼び出しをテストする

デプロイ前に API の呼び出しをテストするテスト機関が API Gateway コンソールに表示されます。コンソールのテスト機能を使用して API をテストするには、以下のリクエストを送信します。

POST /Seattle?time=morning day:Wednesday { "callerName": "John" }

このテストリクエストで、ANYPOST{city}Seattle に設定し、Wednesdayday ヘッダー値、"John"callerName 値として割り当てます。

ANY /{city} メソッドの呼び出しをテストするには

  1. [Method Execution] で、[Test] を選択します。

  2. [Method] ドロップダウンリストから POST を選択します。

  3. {city} パス変数に Seattle と入力します。

  4. day クエリ文字列パラメータに morning と入力します。

  5. [Request Body] に { "callerName":"John" } と入力します。

  6. [Test] を選択します。

  7. 返されたレスポンスペイロードが次のようになっていることを確認します。

    { "greeting": "Good morning, John of Seattle. Happy Wednesday!" }
  8. ログを表示して、API Gateway によるリクエストおよびレスポンスの処理方法を調べることもできます。

    Execution log for request test-request Thu Aug 31 01:07:25 UTC 2017 : Starting execution for request: test-invoke-request Thu Aug 31 01:07:25 UTC 2017 : HTTP Method: POST, Resource Path: /Seattle Thu Aug 31 01:07:25 UTC 2017 : Method request path: {city=Seattle} Thu Aug 31 01:07:25 UTC 2017 : Method request query string: {time=morning} Thu Aug 31 01:07:25 UTC 2017 : Method request headers: {day=Wednesday} Thu Aug 31 01:07:25 UTC 2017 : Method request body before transformations: { "callerName": "John" } Thu Aug 31 01:07:25 UTC 2017 : Request validation succeeded for content type application/json Thu Aug 31 01:07:25 UTC 2017 : Endpoint request URI: https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations Thu Aug 31 01:07:25 UTC 2017 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=****************************************************************************************************************************************************************************************************************************************************************************************************************************************338c72, X-Amz-Date=20170831T010725Z, x-amzn-apigateway-api-id=beags1mnid, X-Amz-Source-Arn=arn:aws:execute-api:us-west-2:123456789012:beags1mnid/null/POST/{city}, Accept=application/json, User-Agent=AmazonAPIGateway_beags1mnid, X-Amz-Security-Token=FQoDYXdzELL//////////wEaDMHGzEdEOT/VvGhabiK3AzgKrJw+3zLqJZG4PhOq12K6W21+QotY2rrZyOzqhLoiuRg3CAYNQ2eqgL5D54+63ey9bIdtwHGoyBdq8ecWxJK/YUnT2Rau0L9HCG5p7FC05h3IvwlFfvcidQNXeYvsKJTLXI05/yEnY3ttIAnpNYLOezD9Es8rBfyruHfJfOqextKlsC8DymCcqlGkig8qLKcZ0hWJWVwiPJiFgL7laabXs++ZhCa4hdZo4iqlG729DE4gaV1mJVdoAagIUwLMo+y4NxFDu0r7I0/EO5nYcCrppGVVBYiGk7H4T6sXuhTkbNNqVmXtV3ch5bOlh7 [TRUNCATED] Thu Aug 31 01:07:25 UTC 2017 : Endpoint request body after transformations: { "city": "Seattle", "time": "morning", "day": "Wednesday", "name" : "John" } Thu Aug 31 01:07:25 UTC 2017 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations Thu Aug 31 01:07:25 UTC 2017 : Received response. Integration latency: 328 ms Thu Aug 31 01:07:25 UTC 2017 : Endpoint response body before transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"} Thu Aug 31 01:07:25 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=c0475a28-8de8-11e7-8d3f-4183da788f0f, Connection=keep-alive, Content-Length=62, Date=Thu, 31 Aug 2017 01:07:25 GMT, X-Amzn-Trace-Id=root=1-59a7614d-373151b01b0713127e646635;sampled=0, Content-Type=application/json} Thu Aug 31 01:07:25 UTC 2017 : Method response body after transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"} Thu Aug 31 01:07:25 UTC 2017 : Method response headers: {X-Amzn-Trace-Id=sampled=0;root=1-59a7614d-373151b01b0713127e646635, Content-Type=application/json} Thu Aug 31 01:07:25 UTC 2017 : Successfully completed execution Thu Aug 31 01:07:25 UTC 2017 : Method completed with status: 200

    このログには、マッピング前の受信リクエスト、およびマッピング後の統合リクエストが示されます。テストに失敗した場合、このログは、元の出力が正しいかどうか、またはマッピングテンプレートが正しいかどうかを評価する上で役立ちます。

API をデプロイする

テスト呼び出しはシミュレーションのため、制限があります。たとえば、API で実施される任意の認証メカニズムはバイパスされます。リアルタイムで API の実行をテストするには、最初に API をデプロイする必要があります。API をデプロイするには、ステージを作成し、その時点の API のスナップショットを作成します。また、ステージ名では、API のデフォルトのホスト名の後にベースパスが定義されます。API のルートリソースはステージ名の後に追加されます。API を変更する場合は、変更が適用される前に既存または新しいステージに再デプロイする必要があります。

API をステージにデプロイするには

  1. [APIs] ペインから API を選択するか、[Resources] ペインからリソースまたはメソッドを選択します。[Actions] ドロップダウンメニューから [Deploy API] を選択します。

  2. [Deployment stage] で、[New Stage] を選択します。

  3. [Stage name] に、名前 (例: test) を入力します。

    注記

    入力は UTF-8 でエンコードされた (ローカライズされていない) テキストである必要があります。

  4. [Stage description] に説明を入力するか、空白のままにします。

  5. [Deployment description] に説明を入力するか、空白のままにします。

  6. [Deploy] を選択します。API が正常にデプロイされたら、[Stage Editor] の上部に [Invoke URL] として表示される API のベース URL (デフォルトのホスト名とステージ名) が表示されます。このベース URL の一般的なパターンは、https://api-id.region.amazonaws.com/stageName です。たとえば、us-west-2 リージョンで作成され、test ステージにデプロイされた API (beags1mnid) の URL は、「https://beags1mnid.execute-api.us-west-2.amazonaws.com/test」です。

デプロイステージで API をテストする

デプロイされた API をテストするには、いくつかの方法があります。URL パス変数またはクエリ文字列パラメータのみ使用する GET リクエストの場合は、ブラウザに API のリソース URL を入力します。それ以外のメソッドの場合は、「POSTMAN」または「cURL」などの高度な REST API テストユーティリティを使用する必要があります。

cURL を使用して API をテストするには

  1. インターネットに接続されているローカルコンピュータでターミナルウィンドウを開きます。

  2. POST /Seattle?time=evening をテストするには

    以下の cURL コマンドをコピーして、ターミナルウィンドウに貼り付けます。

    curl -v -X POST \ 'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Seattle?time=evening' \ -H 'content-type: application/json' \ -H 'day: Thursday' \ -H 'x-amz-docs-region: us-west-2' \ -d '{ "callerName": "John" }'

    次のペイロードで成功を示すレスポンスが返ります。

    {"greeting":"Good evening, John of Seattle. Happy Thursday!"}

    このメソッドリクエストで POST から PUT に変更した場合も同じレスポンスを受け取ります。

  3. GET /Boston?time=morning をテストするには

    以下の cURL コマンドをコピーして、ターミナルウィンドウに貼り付けます。

    curl -X GET \ 'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Boston?time=morning' \ -H 'content-type: application/json' \ -H 'day: Thursday' \ -H 'x-amz-docs-region: us-west-2' \ -d '{ "callerName": "John" }'

    400 Bad Request レスポンスが以下のエラーメッセージと一緒に返ります。

    {"message": "Invalid request body"}

    これは、送信した GET リクエストでペイロードを取得できず、リクエストの検証に失敗したためです。

クリーンアップ

この演習で作成した Lambda 関数が不要になった場合は、削除できます。さらに、関数に付随する IAM リソースを削除できます。

警告

このシリーズの他の演習を行う予定の場合は、Lambda 実行ロールまたは Lambda 呼び出しロールを削除しないでください。API が依存する Lambda 関数を削除すると、API は機能しなくなります。Lambda 関数の削除は元に戻すことができません。再度 Lambda 関数を使用するには、関数を再度作成する必要があります。

Lambda 関数が依存する IAM リソースを削除すると、Lambda 関数は機能しなくなります。また、同関数に依存する API は機能しなくなります。IAM リソースの削除は元に戻すことができません。再度 IAM 関数を使用するには、関数を再度作成する必要があります。

Lambda 関数を削除する

  1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。

  2. 関数の一覧から [GetHelloWorld] を選択し、[Actions]、[Delete function] の順に選択します。プロンプトが表示されたら、再度 [Delete] を選択します。

  3. 関数の一覧から [GetHelloWithName] を選択し、[Actions]、[Delete function] の順に選択します。プロンプトが表示されたら、再度 [Delete] を選択します。

関連付けられた IAM リソースを削除する

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. [Details] から [Roles] を選択します。

  3. ロールのリストから [APIGatewayLambdaExecRole] を選択し、続いて [Role Actions]、[Delete Role] の順で選択します。プロンプトが表示されたら、[Yes, Delete] を選択します。

  4. [Details] から、[Policies] を選択します。

  5. ポリシーの一覧から [APIGatewayLambdaExecPolicy] を選択し、[Policy Actions]、[Delete] の順に選択します。プロンプトが表示されたら、[Delete] を選択します。

この演習はこれで終了です。