2
Help us understand the problem. What are the problem?

posted at

Lambda 関数 URL

概要

従来は、HTTP(s)経由で、API Gateway --→ Lambda とアクセスしていたが、関数 URL がサポートされた事で、API Gateway なしででアクセスできるようになった。

パブリックに公開するAPIや、簡易な認証実装でも差し支えの無いAPIの場合は、AWSLambdaで実装する場合には、関数 URL の利用を検討するとよい。

認証タイプ

「認証タイプ」にはAWS_IAMNONEがあります。

  • AWS_IAM : 認証された IAM ユーザーとロールのみがアクセス可能。
  • NONE : パブリックにアクセス可能。

CORS

CORS を使用して、任意のドメインから関数 URL へのアクセスを許可することも可能。

参考URL

やってみた

認証タイプ:NONE

url001.PNG

認証タイプ NONE を選択すると、Lambda によって以下のリソースベースのポリシーが自動的に作成され、関数にアタッチされます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "StatementId": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-webhook-handler",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    }
  ]
}

Hello, World! の適当な Lambda 関数。

exports.handler = async (event) => {
    return 'Hello, World!!';
};

関数 URL にアクセスしてみると、パブリックにアクセスされます。

$ curl 関数URL
Hello, World!!

認証タイプ:AWS_IAM

url002.PNG

AWS_IAM でアクセスする場合は、AWS Signature Version 4 (SigV4) を使用して、HTTPリクエストに対して署名する必要があります。
下記のドキュメントに従って、awscurl, Postman, AWS SigV4 Proxy などを利用後、アクセスを試みてみます。

$ pip install awscurl

$ awscurl --service lambda --region ap-northeast-1 関数URL
Hello, World!!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?