チュートリアル: 関数 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 をインストール
実行ロールを作成する
AWS リソースにアクセスするためのアクセス権限をLambda 関数に付与する実行ロールを作成します。
実行ロールを作成するには
-
AWS Identity and Access Management (IAM) コンソールの ロールページ
を開きます。 -
[ロールの作成] を選択します。
-
次のプロパティでロールを作成します。
-
[信頼できるエンティティタイプ] – [AWS のサービス]
-
[ユースケース] – [Lambda]
-
アクセス許可 - AWSLambdaBasicExecutionRole。
-
[ロール名] –
response-streaming-role
-
AWSLambdaBasicExecutionRole ポリシーには、ログを Amazon CloudWatch Logs に書き込むために関数が必要とするアクセス許可が含まれています。ロールを作成した後、Amazon リソースネーム (ARN) を書き留めてください。これは次のステップで必要になります。
レスポンスストリーミング関数を作成する (AWS CLI)
AWS Command Line Interface (AWS CLI) を使用して、関数 URL エンドポイントでレスポンスストリーミング Lambda 関数を作成します。
レスポンスをストリーミングできる関数を作成するには
-
以下のコード例を
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); });
-
デプロイパッケージを作成します。
zip function.zip index.mjs
-
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 \ --rolearn:aws:iam::123456789012:role/response-streaming-role
関数 URL を作成するには
-
関数に、関数 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 -
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 アカウント アカウントに請求される料金の発生を防ぎます。
実行ロールを削除する
-
IAM コンソールのロールページ
を開きます。 -
作成した実行ロールを選択します。
-
[削除] を選択します。
-
テキスト入力フィールドにロールの名前を入力し、[削除] を選択します。
Lambda 関数を削除するには
-
Lambda コンソールの関数
ページを開きます。 -
作成した関数を選択します。
-
[アクション] で、[削除] を選択します。
-
テキスト入力フィールドに
delete
と入力し、[Delete] (削除) を選択します。