URL을 통한 Lambda 함수
주요 테이크 아웃
새 Lambda 함수 생성 시 함수 URL 설정
Whenever creating a new Lambda function from AWS console, under the advance section you can enable Enable function URL - new.
This setup accepts other configuration parameters such as one of authentication type for the Function URL -
- AWS IAM
- NONE, making the Function URL publicly accessible.
And also you can specify if the Function URL should be Cross-origin resource sharing (CORS) so that Lambda function URL can be invoked from any domain.
This auto-generates a policy which allows the invocation of AWS Lambda function for AuthType : NONE
.
{
"Version": "2012-10-17",
"Statement": [
{
"StatementId": "FunctionURLAllowPublicAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "lambda:InvokeFunctionUrl",
"Resource": "arn:aws:lambda:us-east-1:xxxxx:function:xxxx",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "NONE"
}
}
}
]
}
AuthType
또는 AWS_IAM
, NONE
및 Cors
값을 허용하는 AllowOrigins
를 구성하여 특정 출처 또는 AllowOrigin : *
를 모두 허용하도록 SAM CLI와 동일하게 지원됩니다.AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
function-url-demo
Sample SAM Template for function-url-demo
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs14.x
Architectures:
- x86_64
FunctionUrlConfig:
AuthType: NONE
Cors:
AllowOrigins:
- "*"
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldFunctionArn:
Description: "Hello World Lambda Function ARN"
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: "Implicit IAM Role created for Hello World function"
Value: !GetAtt HelloWorldFunctionRole.Arn
Lambda 함수가 생성되면 콘솔에서 보일러 플레이트 코드와 함수 URL을 사용할 수 있습니다.
전체 함수 URL 구성은 Lambda 함수의 구성 탭에 있는 함수 URL 메뉴에서 사용할 수 있습니다.
CORS 구성
With Function URLs, you can allow access to any or specific domain(s). Once you enable the CORS configuration for your Lambda function URL the below settings are available.These CORS headers with
AllowOrigin
property could be configured as an array list items. 특정 헤더가 배열 목록 항목으로도 허용되거나 노출되도록 구성할 수도 있습니다.
Lambda 함수의 호출은 HTTP 엔드포인트를 통해 이루어지기 때문에 필요한 HTTP 메서드만 호출에 허용되도록 할 수도 있습니다.
이 호출을 통해 자격 증명의 쿠키를 저장할 수 있고 캐시된 요청에 대한 max-ages를 허용할 수도 있습니다.
어떻게 작동합니까!?
Once the Lambda function with function URL enabled generates a invocation URL which the format -
https://<url-id>.lambda-url.<region>.on.aws
Where the url-id
is a uniquely identified ID for your Lambda function for that specific region.
The Function URL could be invoked similar to how any other REST APIs are invoked with CURL, Postman or for GET
it would work on web browser as well.
Whenever a request is done, the parameters from headers or body with different content-type are taken as inputs similar to how Proxy based API Gateway invocation.
Sample input from invoking the Function URL via Postman.
{
"version": "2.0",
"routeKey": "$default",
"rawPath": "/favicon.ico",
"rawQueryString": "",
"headers": {
"sec-fetch-mode": "no-cors",
"referer": "https://uhpwurwzubchzjsqxxxxxxxxxxx.lambda-url.us-east-1.on.aws/",
"sec-fetch-site": "same-origin",
"accept-language": "en-US,en;q=0.9",
"x-forwarded-proto": "https",
"x-forwarded-port": "443",
"x-forwarded-for": "xx.xx.xxx.xxx",
"accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"sec-gpc": "1",
"x-amzn-trace-id": "Root=1-62531267-32fd08fb47a0f72211d92c63",
"host": "uhpwurwzubchzjsqspwroode2a0bqnbx.lambda-url.us-east-1.on.aws",
"accept-encoding": "gzip, deflate, br",
"sec-fetch-dest": "image",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.79 Safari/537.36"
},
"requestContext": {
"accountId": "anonymous",
"apiId": "uhpwurwzubchzjsqxxxxxxxxxxx",
"domainName": "uhpwurwzubchzjsqxxxxxxxxxxx.lambda-url.us-east-1.on.aws",
"domainPrefix": "uhpwurwzubchzjsqxxxxxxxxxxx",
"http": {
"method": "GET",
"path": "/favicon.ico",
"protocol": "HTTP/1.1",
"sourceIp": "xx.xx.xxx.xxx",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.79 Safari/537.36"
},
"requestId": "f2fb1ec9-5347-491d-88ea-15f90750cc01",
"routeKey": "$default",
"stage": "$default",
"time": "10/Apr/2022:17:22:47 +0000",
"timeEpoch": 1649611367689
},
"isBase64Encoded": false
}
자세한 내용은 documentation을 참조하십시오.
일반적인 사용 사례
결론
함수 URL이 있는 AWS Lambda 함수를 사용하면 Lambda 함수를 더 빠르고 직접 호출할 수 있지만 이는 Lambda 함수 URL에서 기본적으로 지원되지 않는 제한, 방화벽 기능 측면에서 기능으로서 AWS API Gateway를 대체하지 않습니다.
Reference
이 문제에 관하여(URL을 통한 Lambda 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/lambda-functions-over-urls-5dca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)