AWS Lambda 함수 URL

AWS는 Lambda 함수 URL이라는 Lambda의 새로운 기능을 발표했습니다. 다음은 그것들이 무엇인지, 어떻게 작동하는지, 그리고 그것들을 만드는 두 가지 방법에 대한 간략한 설명입니다.

Lambda 함수 URL이란?



이전에는 HTTP 엔드포인트가 있는 Lambda를 노출하려는 경우 일반적으로 완전 관리형 API 게이트웨이 서비스를 사용했지만 이 새로운 기능을 사용하면 대신 Lambda 함수에 직접 연결된 HTTPS URL을 사용하여 API 게이트웨이를 제거할 수 있습니다. 중개자.

한 가지 큰 특징은 가격입니다. Lambda 함수 URL은 완전히 "무료"입니다. 일반 Lambda와 같이 호출 및 메모리 시간에 대해서만 비용을 지불하면 됩니다. 이것은 통합 비용이 드는 API 게이트웨이에 비해 한 가지 이점입니다.

그러나 이것이 API 게이트웨이를 직접 대체한다는 의미는 아닙니다. 대신 API Gateway는 JWT/사용자 지정 권한 부여자, 요청-응답 검증 및 변환, 사용 계획, 직접 내장된 AWS 방화벽 지원 등과 같은 고급 기능을 제공합니다.

작동 방식



각 URL은 최신 버전의 함수를 호출하는 함수의 별칭 또는 함수 ARN에 대해 고유합니다. 이를 통해 테스트 및 반복 개발을 위해 서로 다른 URL을 사용하여 함수의 여러 버전을 배포할 수 있습니다.

요청 처리는 간단하며 Lambda에서 일반적으로 사용하는 이벤트 객체도 HTTP 요청과 관련된 속성으로 채워집니다.
예를 들어 requestContext에서 메서드를 추출할 수 있습니다.

const method = event.requestContext.http.method;


URL의 모든 쿼리 매개변수는 queryStringParameters 속성을 통해 액세스할 수 있습니다.

const queryParam = event.querySTringParameters.myParam;


마지막으로 body 속성에서 요청 본문에 액세스할 수 있습니다.

const body = event.body;


1. ClickOps를 통해 Lambda URL 생성



Lambda를 생성할 때 UI에서 함수 URL을 활성화할 수 있습니다.
먼저 고급 옵션을 선택한 다음 기능 URL 활성화를 선택합니다.

이렇게 하면 인증 설정을 보고 CORS 옵션을 구성할 수 있는 새로운 옵션 세트가 나타납니다.



함수 옵션의 오른쪽에 있는 새로운 함수 URL 매개변수가 표시됩니다. 이것이 함수 URL입니다.



이제 APIGateway를 설정하지 않고도 웹 요청을 통해 코드를 호출할 수 있습니다!

2. Cloudformation을 통해 Lambda URL 생성



클릭 대신 Cloudformation을 사용하여 URL에 액세스할 수 있는 Lambda를 생성할 수 있습니다. Cloudformation은 Amazon의 코드형 인프라이며 이를 통해 프로그래밍 방식으로 "스택"을 생성하고 AWS에 배포할 수 있습니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: "Cloudformation template for Lambda"
Resources:
  MattsLambda:
    Type: AWS::Lambda::Function
    Properties:
      Description: my lambda with a url
      FunctionName: MattsTestLambda
      Handler: index.handler
      MemorySize: 128
      Runtime: nodejs14.x
      Timeout: 5
      Role: {{ ADD YOUR ROLE ARN HERE }}
      Code:
        S3Bucket: mybucket
        S3Key: mycode.js


이전에 Lambda를 생성했다면 위의 필드 대부분을 인식할 것입니다. 속성에 Lambda 함수 URL 필드를 추가하지 않았음을 알 수 있습니다. 이는 Lambda 함수 URL이 Lambda 함수 리소스에 직접 있는 필드가 아니라 새로운 유형의 리소스이기 때문입니다.

대신, 하나를 만들려면 리소스를 추가하고 만들고 있는 URL을 다시 참조해야 합니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: "Cloudformation template for Lambda"
Resources:
  MyLambda:
    Type: AWS::Lambda::Function
    Properties:
      Description: my lambda with a url
      FunctionName: MattsTestLambda
      Handler: index.handler
      MemorySize: 128
      Runtime: nodejs14.x
      Timeout: 5
      Role: {{ ADD YOUR ROLE ARN HERE }}
      Code:
        S3Bucket: mybucket
        S3Key: mycode.js
### Lets create the URL ###
  MattsLambdaURL:
    Type: AWS::Lambda::Url
    DependsOn: MyLambda
    Properties:
      AuthType: NONE
      TargetFunctionArn: !GetAtt MyLambda.Arn


Lambda::Url 유형의 새 리소스를 추가했습니다. 그러나 주의해야 할 점은 DependsOnattribute도 추가하고 있다는 것입니다. 이 속성은 Lambda 함수가 생성될 때까지 CloudFormation이 URL 리소스를 배포하지 않도록 합니다. Lambda ARN에 의존하기 때문에 마지막 줄에서 이를 참조하고 있음을 알 수 있습니다.

터미널에서 다음 명령을 실행하면 Cloudformation에 스택이 생성되고 람다와 URL이 생성됩니다.

aws cloudformation create-stack --stack-name MyStackName --template-body file://my-file.yaml


또는 AWS 대시보드를 통해 스택을 Cloudformation에 직접 업로드할 수 있습니다.

이제 AWS Lambda 함수 URL의 최신 기능과 이를 직접 구현하는 방법에 대한 간략한 설명이 있습니다.

소스 코드:



https://github.com/MattBidewell/snippets/tree/main/aws/cloudformation/lambda

추가 자료




AWS 발표:

https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/


Cloudformation 람다 함수:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html


Cloudformation 람다 URL:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-url.html


아마존 API 게이트웨이

https://aws.amazon.com/api-gateway/

내 트위터:

https://matty.dev

좋은 웹페이지 즐겨찾기