チュートリアル: 関数 URL を使用してレスポンスストリーミング Lambda 関数を作成する - AWS Lambda

チュートリアル: 関数 URL を使用してレスポンスストリーミング Lambda 関数を作成する

このチュートリアルでは、レスポンスストリームを返す関数 URL エンドポイントを持つ .zip ファイルアーカイブとして定義された Lambda 関数を作成します。関数 URL の設定の詳細については、「関数 URL」を参照してください。

前提条件

このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。初めての方は、コンソールで Lambda の関数の作成 の手順に従って最初の Lambda 関数を作成してください。

以下の手順を完了するには、AWS CLI バージョン 2 が必要です。コマンドと予想される出力は、別々のブロックにリストされます。

aws --version

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

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

コマンドが長い場合、コマンドを複数行に分割するためにエスケープ文字 (\) が使用されます。

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。

注記

Windows では、Lambda でよく使用される一部の Bash CLI コマンド (zip など) が、オペレーティングシステムの組み込みターミナルでサポートされていません。Ubuntu および Bash の Windows 統合バージョンを取得するには、Windows Subsystem for Linux をインストールします。このガイドの CLI コマンドの例では、Linux フォーマットを使用しています。Windows CLI を使用している場合、インライン JSON ドキュメントを含むコマンドを再フォーマットする必要があります。

実行ロールを作成する

AWS リソースにアクセスするためのアクセス権限をLambda 関数に付与する実行ロールを作成します。

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

  2. [ロールの作成] を選択します。

  3. 次のプロパティでロールを作成します。

    • [信頼できるエンティティタイプ][AWS のサービス]

    • [ユースケース][Lambda]

    • アクセス許可 - AWSLambdaBasicExecutionRole

    • [ロール名]response-streaming-role

AWSLambdaBasicExecutionRole ポリシーには、ログを Amazon CloudWatch Logs に書き込むために関数が必要とするアクセス許可が含まれています。ロールを作成した後、Amazon リソースネーム (ARN) を書き留めてください。これは次のステップで必要になります。

レスポンスストリーミング関数を作成する (AWS CLI)

AWS Command Line Interface (AWS CLI) を使用して、関数 URL エンドポイントでレスポンスストリーミング Lambda 関数を作成します。

レスポンスをストリーミングできる関数を作成するには
  1. 以下のコード例を index.mjs という名前のファイルにコピーします。

    import util from 'util'; import stream from 'stream'; const { Readable } = stream; const pipeline = util.promisify(stream.pipeline); /* global awslambda */ export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream); });
  2. デプロイパッケージを作成します。

    zip function.zip index.mjs
  3. create-function コマンドを使用して Lambda 関数を作成します。--role の値を、前のステップで書き留めたロールの ARN に置き換えます。

    aws lambda create-function \ --function-name my-streaming-function \ --runtime nodejs16.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/response-streaming-role
関数 URL を作成するには
  1. 関数に、関数 URL へのアクセスを許可するリソースベースのポリシーを追加します。--principal の値を AWS アカウント  ID に置き換えます。

    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id 12345 \ --principal 123456789012 \ --function-url-auth-type AWS_IAM \ --statement-id url
  2. create-function-url-config コマンドを使用して、関数の URL エンドポイントを作成します。

    aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAM

関数 URL エンドポイントをテストする

関数を呼び出して統合をテストします。関数 URL をブラウザで開くことも、curl を使用することもできます。

curl --request GET "<function_url>" --user "<key:token>" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer

関数 URL では、認証タイプ IAM_AUTH を使用します。つまり、AWS アクセスキーとシークレットキーの両方でリクエストに署名する必要があります。前のコマンドで、<key:token> を AWS アクセスキー ID に置き換えます。プロンプトが表示されたら、AWS シークレットキーを入力します。AWS シークレットキーがない場合は、代わりに一時的な AWS 認証情報を使用できます。

リソースのクリーンアップ

このチュートリアル用に作成したリソースは、保持しない場合は削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウント アカウントに請求される料金の発生を防ぎます。

実行ロールを削除する
  1. IAM コンソールのロールページを開きます。

  2. 作成した実行ロールを選択します。

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

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

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

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

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

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