자습서: 함수 URL을 사용하여 Lambda 함수 생성 - AWS Lambda

자습서: 함수 URL을 사용하여 Lambda 함수 생성

이 자습서에서는 두 숫자로 이루어진 PRODUCT 함수를 반환하는 함수 URL 엔드포인트가 있는 .zip 파일 아카이브로 정의된 public 함수를 생성합니다. 함수 구성에 대한 자세한 내용은 함수 URL 섹션을 참조하세요.

필수 조건

이 자습서에서는 사용자가 기본 Lambda 작업과 Lambda 콘솔에 대해 어느 정도 알고 있다고 가정합니다. 그렇지 않은 경우 콘솔로 Lambda 함수 생성의 지침에 따라 첫 Lambda 함수를 생성합니다.

다음 단계를 완료하려면 AWS Command Line Interface(AWS CLI) 버전 2가 필요합니다. 명령과 예상 결과는 별도의 블록에 나열됩니다.

aws --version

다음 결과가 표시됩니다.

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

긴 명령의 경우 이스케이프 문자(\)를 사용하여 명령을 여러 행으로 분할합니다.

Linux 및 macOS는 선호 셸과 패키지 관리자를 사용합니다.

참고

Windows에서는 Lambda와 함께 일반적으로 사용하는 일부 Bash CLI 명령(예:zip)은 운영 체제의 기본 제공 터미널에서 지원되지 않습니다. Ubuntu와 Bash의 Windows 통합 버전을 가져오려면 Linux용 Windows Subsystem을 설치합니다. 이 안내서의 예제 CLI 명령은 Linux 형식을 사용합니다. Windows CLI를 사용하는 경우 인라인 JSON 문서를 포함하는 명령의 형식을 다시 지정해야 합니다.

실행 역할 만들기

Lambda 함수에 AWS 리소스에 액세스할 수 있는 권한을 제공하는 실행 역할을 만듭니다.

실행 역할을 만들려면
  1. AWS Identity and Access Management(IAM) 콘솔의 역할 페이지를 엽니다.

  2. 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 엔터티 유형으로 AWS 서비스를 선택하고 사용 사례Lambda를 선택합니다.

  4. 다음을 선택합니다.

  5. 권한 정책 창의 검색 상자에 AWSLambdaBasicExecutionRole을 입력합니다.

  6. AWSLambdaBasicExecutionRole AWS 관리형 정책 옆에 있는 확인란을 선택한 후 다음을 선택합니다.

  7. 역할 이름lambda-url-role을 입력한 다음 역할 생성을 선택합니다.

AWSLambdaBasicExecutionRole 정책은 함수가 Amazon CloudWatch Logs에 로그를 쓰는 데 필요한 권한을 가집니다. 자습서 뒷부분에서는 Lambda 함수를 생성하기 위해 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

실행 역할의 ARN을 찾으려면 다음을 수행합니다.
  1. AWS Identity and Access Management(IAM) 콘솔의 역할 페이지를 엽니다.

  2. 방금 생성한 역할을 선택합니다(lambda-url-role).

  3. 요약 창에서 ARN을 복사합니다.

함수 URL(.zip 파일 아카이브)이 있는 Lambda 함수 생성

.zip 파일 아카이브를 사용하여 함수 URL 엔드포인트가 있는 Lambda 함수 생성

함수를 만들려면
  1. 다음 코드 예제를 index.js라는 파일에 복사합니다.

    예 index.js
    exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; };
  2. 배포 패키지를 만듭니다.

    zip function.zip index.js
  3. create-function 명령을 사용해 Lambda 함수를 만듭니다. 역할 ARN을 자습서 앞부분에서 복사한 고유한 실행 역할의 ARN으로 바꿔야 합니다.

    aws lambda create-function \ --function-name my-url-function \ --runtime nodejs18.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/lambda-url-role
  4. 함수 URL에 대한 공개 액세스를 허용하는 권한을 부여하는 리소스 기반 정책을 함수에 추가합니다.

    aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
  5. create-function-url-config 명령을 사용하여 함수에 대한 URL 엔드포인트를 만듭니다.

    aws lambda create-function-url-config \ --function-name my-url-function \ --auth-type NONE

함수 URL 엔드포인트 테스트

curl 또는 Postman과 같은 HTTP 클라이언트를 사용하여 함수 URL 엔드포인트를 호출하여 Lambda 함수를 호출합니다.

curl 'https://abcdefg.lambda-url.us-east-1.on.aws/' \ -H 'Content-Type: application/json' \ -d '{"num1": "10", "num2": "10"}'

다음 결과가 표시됩니다.

The product of 10 and 10 is 100

함수 URL이 있는 Lambda 함수 생성(CloudFormation)

AWS CloudFormation 유형 AWS::Lambda::Url을 사용하여 함수 URL 엔드포인트가 있는 Lambda 함수를 생성할 수도 있습니다.

Resources: MyUrlFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Runtime: nodejs18.x Role: arn:aws:iam::123456789012:role/lambda-url-role Code: ZipFile: | exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; }; Description: Create a function with a URL. MyUrlFunctionPermissions: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyUrlFunction Action: lambda:InvokeFunctionUrl Principal: "*" FunctionUrlAuthType: NONE MyFunctionUrl: Type: AWS::Lambda::Url Properties: TargetFunctionArn: !Ref MyUrlFunction AuthType: NONE

함수 URL(AWS SAM)이 있는 Lambda 함수 생성(CloudFormation)

AWS Serverless Application Model(AWS SAM)을 사용하여 함수 URL로 구성된 Lambda 함수를 생성할 수도 있습니다.

ProductFunction: Type: AWS::Serverless::Function Properties: CodeUri: function/. Handler: index.handler Runtime: nodejs18.x AutoPublishAlias: live FunctionUrlConfig: AuthType: NONE

리소스 정리

이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.

집행 역할 삭제
  1. IAM 콘솔에서 역할 페이지를 엽니다.

  2. 생성한 실행 역할을 선택합니다.

  3. 삭제를 선택합니다.

  4. 텍스트 입력 필드에 역할의 이름을 입력하고 Delete(삭제)를 선택합니다.

Lambda 함수를 삭제하려면
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 생성한 함수를 선택합니다.

  3. 작업, 삭제를 선택합니다.

  4. 텍스트 입력 필드에 delete를 입력하고 Delete(삭제)를 선택합니다.