Lambda 함수 URL을 사용하여 DynamoDB에서 지원하는 서버리스 앱 작성

이것은 AWS SAM을 사용하여 패키징 및 배포되는 Go Lambda 함수입니다.

Lambda Function URL은 Lambda 함수에 전용 HTTP(S) 엔드포인트를 제공하는 비교적 새로운 기능(이 블로그 작성 당시)입니다. 기능(예: 웹후크 역할)에 대한 단일 엔드포인트만 필요하고 API 게이트웨이를 설정 및 구성하지 않으려는 경우에 정말 유용합니다. 도저히 감당이 안 될 것 같은데요! 나는 이 주제에 대해 to와 then을 사용하는 실제 예제가 포함된 몇 개의 블로그 게시물을 작성했습니다.

이것은 Lambda 함수 URL을 사용하여 DynamoDB에서 지원하는 간단한 애플리케이션을 작성하는 방법을 보여주는 또 다른 블로그 게시물(짧은 게시물입니다!)입니다. DynamoDB에서 작업( GetItem , PutItem , Scan )을 실행하는 Lambda 함수 URL에 의해 노출된 API 엔드포인트를 호출할 수 있습니다. 이 함수는 DynamoDB packageAWS Go SDK을 사용하여 Go로 작성되었으며 AWS Serverless Application Model (SAM)은 솔루션을 빠르게 빌드하고 배포하는 데 사용됩니다.

The code is available on GitHub for your reference



바로 시작합시다! 계속 진행하기 전에 다음이 준비되었는지 확인하십시오.

전제 조건



  • Create an AWS account 아직 없는 경우 로그인하십시오. 사용하는 IAM 사용자는 필요한 AWS 서비스 호출을 수행하고 AWS 리소스를 관리할 수 있는 충분한 권한이 있어야 합니다.

  • AWS CLI 설치 및 구성됨

  • Go ( 1.16 이상) 설치됨

  • AWS Serverless Application Model (AWS SAM) 설치됨
  • Git Installed

  • 전개



    Github 리포지토리를 복제하여 시작하고 올바른 디렉터리로 변경합니다.

    git clone https://github.com/abhirockzz/lambda-functionurl-dynamodb-sam-go
    cd lambda-functionurl-dynamodb-sam-go
    


    AWS SAM을 사용하여 앱을 빌드합니다.

    sam build
    


    이제 애플리케이션을 배포할 준비가 되었습니다.

    sam deploy --guided
    


    메시지가 표시되면 스택 이름 등과 같은 필수 정보를 입력합니다. 아래 예를 참조하십시오.

    Configuring SAM deploy
    ======================
    
            Looking for config file [samconfig.toml] :  Not found
    
            Setting default arguments for 'sam deploy'
            =========================================
            Stack Name [sam-app]: 
            AWS Region [us-east-1]: 
            #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
            Confirm changes before deploy [y/N]: y
            #SAM needs permission to be able to create roles to connect to the resources in your template
            Allow SAM CLI IAM role creation [Y/n]: y
            #Preserves the state of previously provisioned resources when an operation fails
            Disable rollback [y/N]: n
            DemoFunction Function Url may not have authorization defined, Is this okay? [y/N]: y
            Save arguments to configuration file [Y/n]: 
            SAM configuration file [samconfig.toml]: 
            SAM configuration environment [default]: 
    


    Once you have run sam deploy --guided mode once and saved arguments to a configuration file (samconfig.toml), you can use sam deploy in future to use these defaults.



    성공하면 이제 다음이 준비되어 있어야 합니다.
  • HTTP(S) URL이 있는 Lambda 함수
  • DynamoDB 테이블(users)
  • Lambda 및 DynamoDB에 필요한 최소 권한이 있는 IAM 역할( PutItem , GetItemScan )

  • Note the output from the SAM deployment process. This contains the HTTP URL endpoint for your function required for testing



    애플리케이션 테스트



    통합 테스트에는 HTTP 요청을 Lambda 함수 URL로 보내는 작업이 포함됩니다. 이 예에서는 curl CLI를 사용했지만 다른 옵션을 사용할 수도 있습니다.

    Lambda 함수 URL 끝점을 환경 변수로 내보냅니다.

    export LAMBDA_FUNCTION_URL_ENDPOINT=<SAM deployment output>
    e.g. export LAMBDA_FUNCTION_URL_ENDPOINT=https://qfmpu2n74ik7m2m3ipv3m6yw5a0qiwmp.lambda-url.us-east-1.on.aws/
    


    엔드포인트를 호출하여 DynamoDB 테이블에 새 항목을 생성합니다.

    curl -i -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]", "username":"user-1"}' $LAMBDA_FUNCTION_URL_ENDPOINT
    
    curl -i -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]", "username":"user-2"}' $LAMBDA_FUNCTION_URL_ENDPOINT
    


    두 경우 모두 HTTP201 Created 응답을 받아야 합니다. 이는 항목이 DynamoDB의 users 테이블에 추가되었음을 나타냅니다.

    방금 만든 레코드에 대한 정보를 검색해 보겠습니다(URL에 query 매개변수(이메일)를 추가하여 수행).

    curl -i $LAMBDA_FUNCTION_URL_ENDPOINT?email=[email protected]
    


    방금 추가한 모든 항목을 검색하려면:

    curl -i $LAMBDA_FUNCTION_URL_ENDPOINT
    


    아직 추가하지 않은 항목을 검색해 보세요.

    curl -i $LAMBDA_FUNCTION_URL_ENDPOINT?email=[email protected]
    


    이 경우 HTTP 404 Not Found 응답을 받게 됩니다.

    마지막으로 중복 레코드를 삽입해 봅니다.

    curl -i -X POST -d '{"email":"[email protected]", "username":"user-2"}' $LAMBDA_FUNCTION_URL_ENDPOINT
    


    이 경우 Lambda 함수는 Condition Expression ( 409 Conflict )가 기존 항목(동일한 attribute_not_exists(email) 포함)을 email 호출로 덮어쓰는 것을 방지하므로 HTTPPutItem를 반환합니다.

    그게 다야! Lambda 함수에 의해 노출된 모든 작업을 시도했습니다.

    대청소



    완료되면 스택을 삭제하십시오.

    sam delete --stack-name STACK_NAME
    


    스택이 삭제되었는지 확인

    aws cloudformation list-stacks --query "StackSummaries[?contains(StackName,'STACK_NAME')].StackStatus"
    


    마무리!



    이것은 짧지만 유용한 튜토리얼이었습니다! 이를 사용하여 Lambda 함수 URL에 의해 노출된 기능이 있는 DynamoDB 백엔드로 서버리스 앱을 빠르게 부트스트랩할 수 있습니다.

    즐거운 코딩하세요!

    좋은 웹페이지 즐겨찾기