概要
従来は、HTTP(s)経由で、API Gateway --→ Lambda とアクセスしていたが、関数 URL がサポートされた事で、API Gateway なしででアクセスできるようになった。
パブリックに公開するAPIや、簡易な認証実装でも差し支えの無いAPIの場合は、AWSLambdaで実装する場合には、関数 URL の利用を検討するとよい。
認証タイプ
「認証タイプ」にはAWS_IAMとNONEがあります。
- AWS_IAM : 認証された IAM ユーザーとロールのみがアクセス可能。
- NONE : パブリックにアクセス可能。
CORS
CORS を使用して、任意のドメインから関数 URL へのアクセスを許可することも可能。
参考URL
やってみた
認証タイプ:NONE
認証タイプ 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
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!!