チュートリアル: 関数 URL を使用する Lambda 関数の作成
このチュートリアルでは、パブリック関数 URL エンドポイントから 2 つの数値の積を返す Lambda 関数を、.zip ファイルアーカイブとして定義することで作成します。関数 URL の設定の詳細については、「関数 URL」を参照してください。
前提条件
このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。初めての方は、コンソールで Lambda の関数の作成 の手順に従って最初の Lambda 関数を作成してください。
以下の手順を完了するには、「AWS Command Line Interface (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] を選択します。
-
[Next] を選択します。
-
[許可ポリシー] ペインの検索ボックスに「
AWSLambdaBasicExecutionRole
」と入力します。 -
AWS マネージドポリシー
AWSLambdaBasicExecutionRole
の横にあるチェックボックスをオンにしてから、[次へ] を選択します。 -
[ロール名] に「
lambda-url-role
」と入力して、[ロールの作成] をクリックします。
AWSLambdaBasicExecutionRole
ポリシーには、ログを Amazon CloudWatch Logs に書き込むために関数が必要とするアクセス許可が含まれます。このチュートリアルの後半で、Lambda 関数の作成にロールの Amazon リソースネーム (ARN) が必要になります。
実行ロールの ARN を見つける方法
-
AWS Identity and Access Management (IAM) コンソールの ロールページ
を開きます。 -
先ほど作成したロール (
lambda-url-role
) を選択します。 -
[概要] ペインで、ARN をコピーします。
関数 URL を使用する Lambda 関数を作成する (ZIP ファイルアーカイブ)
ZIP ファイルアーカイブから、関数 URL エンドポイントを使用する Lambda 関数を作成します。
関数を作成するには
-
以下のコード例を
index.js
という名前のファイルにコピーします。例 index.js
exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; };
-
デプロイパッケージを作成します。
zip function.zip index.js
-
create-function
コマンドを使用して Lambda 関数を作成します。ロール ARN は、チュートリアルの前半でコピーした独自の実行ロールの ARN に置き換えてください。aws lambda create-function \ --function-name my-url-function \ --runtime nodejs18.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role
arn:aws:iam::123456789012:role/lambda-url-role
-
関数に、関数の URL へのパブリックアクセスを許可する権限を付与するリソースベースのポリシーを追加します。
aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
-
create-function-url-config
コマンドを使用して、関数の URL エンドポイントを作成します。aws lambda create-function-url-config \ --function-name my-url-function \ --auth-type NONE
関数 URL エンドポイントをテストする
curl や Postman などの HTTP クライアントから関数 URL エンドポイントをコールすることで、Lambda 関数を呼び出します。
curl
'https://abcdefg.lambda-url.us-east-1.on.aws/'
\ -H 'Content-Type: application/json' \ -d '{"num1": "10", "num2": "10"}'
以下の出力が表示されます。
The product of 10 and 10 is 100
関数 URL を使用する Lambda 関数を作成する (CloudFormation)
また、AWS CloudFormation タイプに AWS::Lambda::Url
を指定することで、関数 URL エンドポイントを使用する Lambda 関数を作成することもできます。
Resources: MyUrlFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Runtime: nodejs18.x Role: arn:aws:iam::123456789012:role/lambda-url-role Code: ZipFile: | exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; }; Description: Create a function with a URL. MyUrlFunctionPermissions: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyUrlFunction Action: lambda:InvokeFunctionUrl Principal: "*" FunctionUrlAuthType: NONE MyFunctionUrl: Type: AWS::Lambda::Url Properties: TargetFunctionArn: !Ref MyUrlFunction AuthType: NONE
関数 URL を使用する Lambda 関数の作成 (AWS SAM)
また、AWS Serverless Application Model (AWS SAM) により、関数 URL が設定された Lambda 関数を作成することもできます。
ProductFunction: Type: AWS::Serverless::Function Properties: CodeUri: function/. Handler: index.handler Runtime: nodejs18.x AutoPublishAlias: live FunctionUrlConfig: AuthType: NONE
リソースのクリーンアップ
このチュートリアル用に作成したリソースは、保持しない場合は削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウント アカウントに請求される料金の発生を防ぎます。
実行ロールを削除する
-
IAM コンソールのロールページ
を開きます。 -
作成した実行ロールを選択します。
-
[削除] を選択します。
-
テキスト入力フィールドにロールの名前を入力し、[削除] を選択します。
Lambda 関数を削除するには
-
Lambda コンソールの関数
ページを開きます。 -
作成した関数を選択します。
-
[アクション] で、[削除] を選択します。
-
テキスト入力フィールドに
delete
と入力し、[Delete] (削除) を選択します。