자습서: 함수 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을 설치
실행 역할 만들기
Lambda 함수에 AWS 리소스에 액세스할 수 있는 권한을 제공하는 실행 역할을 만듭니다.
실행 역할을 만들려면
-
AWS Identity and Access Management(IAM) 콘솔의 역할 페이지
를 엽니다. -
역할 생성을 선택합니다.
-
신뢰할 수 있는 엔터티 유형으로 AWS 서비스를 선택하고 사용 사례로 Lambda를 선택합니다.
-
다음을 선택합니다.
-
권한 정책 창의 검색 상자에
AWSLambdaBasicExecutionRole
을 입력합니다. -
AWSLambdaBasicExecutionRole
AWS 관리형 정책 옆에 있는 확인란을 선택한 후 다음을 선택합니다. -
역할 이름에
lambda-url-role
을 입력한 다음 역할 생성을 선택합니다.
AWSLambdaBasicExecutionRole
정책은 함수가 Amazon CloudWatch Logs에 로그를 쓰는 데 필요한 권한을 가집니다. 자습서 뒷부분에서는 Lambda 함수를 생성하기 위해 역할의 Amazon 리소스 이름(ARN)이 필요합니다.
실행 역할의 ARN을 찾으려면 다음을 수행합니다.
-
AWS Identity and Access Management(IAM) 콘솔의 역할 페이지
를 엽니다. -
방금 생성한 역할을 선택합니다(
lambda-url-role
). -
요약 창에서 ARN을 복사합니다.
함수 URL(.zip 파일 아카이브)이 있는 Lambda 함수 생성
.zip 파일 아카이브를 사용하여 함수 URL 엔드포인트가 있는 Lambda 함수 생성
함수를 만들려면
-
다음 코드 예제를
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; };
-
배포 패키지를 만듭니다.
zip function.zip index.js
-
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
-
함수 URL에 대한 공개 액세스를 허용하는 권한을 부여하는 리소스 기반 정책을 함수에 추가합니다.
aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
-
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 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.
집행 역할 삭제
-
IAM 콘솔에서 역할 페이지
를 엽니다. -
생성한 실행 역할을 선택합니다.
-
삭제를 선택합니다.
-
텍스트 입력 필드에 역할의 이름을 입력하고 Delete(삭제)를 선택합니다.
Lambda 함수를 삭제하려면
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
생성한 함수를 선택합니다.
-
작업, 삭제를 선택합니다.
-
텍스트 입력 필드에
delete
를 입력하고 Delete(삭제)를 선택합니다.