튜토리얼: 함수 URL로 응답 스트리밍 Lambda 함수 만들기
튜토리얼: 함수 URL로 응답 스트리밍 Lambda 함수 만들기 (Creating a response streaming Lambda function with a function URL)
이 튜토리얼에서는 응답 스트림을 반환하는 함수 URL 엔드포인트가 있는 .zip 파일 아카이브로 정의된 Lambda 함수를 만들니다. 함수 URL 구성에 대한 자세한 내용은 함수 URL을 참조하세요.
본문
사전 조건
이 튜토리얼은 기본 Lambda 작업과 Lambda 콘솔에 대한 지식이 있다고 가정합니다. 아직 하지 않았다면 콘솔로 Lambda 함수 만들기의 지침에 따라 첫 번째 Lambda 함수를 만드세요.
다음 단계를 완료하려면 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)이 지원되지 않습니다. Windows 통합 버전의 Ubuntu와 Bash를 얻으려면 Windows Subsystem for Linux를 설치하세요. 이 안내서의 예제 CLI 명령은 Linux 형식을 사용합니다. 인라인 JSON 문서를 포함하는 명령은 Windows CLI를 사용하는 경우 다시 형식화해야 합니다.
실행 역할 만들기
Lambda 함수가 AWS 리소스에 액세스할 수 있는 권한을 부여하는 실행 역할을 만듭니다.
실행 역할을 만들려면:
- AWS Identity and Access Management(IAM) 콘솔의 Roles(역할) 페이지를 엽니다.
- Create role(역할 생성) 을 선택합니다.
- 다음 속성으로 역할을 만듭니다:
- Trusted entity type(신뢰할 수 있는 엔터티 유형) – AWS service
- Use case(사용 사례) – Lambda
- Permissions(권한) –
AWSLambdaBasicExecutionRole - Role name(역할 이름) –
response-streaming-role
AWSLambdaBasicExecutionRole 정책에는 함수가 Amazon CloudWatch Logs에 로그를 쓰는 데 필요한 권한이 있습니다. 역할을 만든 후 그 Amazon 리소스 이름(ARN)을 적어두세요. 다음 단계에서 필요합니다.
응답 스트리밍 함수 만들기 (AWS CLI)
AWS Command Line Interface(AWS CLI)를 사용해 함수 URL 엔드포인트가 있는 응답 스트리밍 Lambda 함수를 만듭니다.
응답을 스트리밍할 수 있는 함수를 만들려면:
- 다음 코드 예제를
index.js라는 파일에 복사합니다. 이 함수는 1초 간격으로 세 개의 응답을 스트리밍합니다.
exports.handler = awslambda.streamifyResponse(
async (event, responseStream, _context) => {
// Metadata is a JSON serializable JS object. Its shape is not defined here.
const metadata = {
statusCode: 200,
headers: {
"Content-Type": "application/json",
"CustomHeader": "outerspace"
}
};
// Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream.
responseStream = awslambda.HttpResponseStream.from(responseStream, metadata);
responseStream.write("Streaming with Helper \n");
await new Promise(r => setTimeout(r, 1000));
responseStream.write("Hello 0 \n");
await new Promise(r => setTimeout(r, 1000));
responseStream.write("Hello 1 \n");
await new Promise(r => setTimeout(r, 1000));
responseStream.write("Hello 2 \n");
await new Promise(r => setTimeout(r, 1000));
responseStream.end();
await responseStream.finished();
}
);
- 배포 패키지를 만듭니다.
zip function.zip index.js
create-function명령으로 Lambda 함수를 만듭니다.--role값을 이전 단계의 역할 ARN으로 교체하세요. 이 명령은 함수 타임아웃을 10초로 설정해 함수가 세 개의 응답을 스트리밍할 수 있게 합니다.
aws lambda create-function \
--function-name my-streaming-function \
--runtime nodejs24.x \
--zip-file fileb://function.zip \
--handler index.handler \
--timeout 10 \
--role arn:aws:iam::123456789012:role/response-streaming-role
함수 URL을 만들려면:
lambda:InvokeFunctionUrl및lambda:InvokeFunction권한을 부여하는 리소스 기반 정책을 함수에 추가합니다. 각 문은 별도 명령으로 추가해야 합니다.--principal값을 AWS 계정 ID로 교체하세요.
aws lambda add-permission \
--function-name my-streaming-function \
--action lambda:InvokeFunctionUrl \
--statement-id UrlPolicyInvokeURL \
--principal 123456789012 \
--function-url-auth-type AWS_IAM
aws lambda add-permission \
--function-name my-streaming-function \
--action lambda:InvokeFunction \
--statement-id UrlPolicyInvokeFunction \
--principal 123456789012
create-function-url-config명령으로 함수의 URL 엔드포인트를 만듭니다.
aws lambda create-function-url-config \
--function-name my-streaming-function \
--auth-type AWS_IAM \
--invoke-mode RESPONSE_STREAM
참고
--invoke-mode에 대한 오류가 발생하면 더 새로운 버전의 AWS CLI로 업그레이드해야 할 수 있습니다.
함수 URL 엔드포인트 테스트
함수를 호출해 통합을 테스트합니다. 브라우저에서 함수의 URL을 열거나 curl을 사용할 수 있습니다.
curl --request GET "https://abcdefghijklm7nop7qrs740abcd.lambda-url.us-east-1.on.aws/" --user "«redacted:AKIA…»" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer
함수 URL은 IAM_AUTH 인증 유형을 사용합니다. 즉 AWS 액세스 키와 시크릿 키로 요청에 서명해야 합니다. 이전 명령에서 «redacted:AKIA…»를 AWS 액세스 키 ID로 교체하세요. 메시지가 표시되면 AWS 시크릿 키를 입력합니다. AWS 시크릿 키가 없으면 임시 AWS 자격 증명을 대신 사용할 수 있습니다.
다음과 같은 응답이 표시되어야 합니다:
Streaming with Helper
Hello 0
Hello 1
Hello 2
리소스 정리
보관하려는 경우가 아니라면 이 튜토리얼에서 만든 리소스를 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.
실행 역할을 삭제하려면:
- IAM 콘솔의 Roles(역할) 페이지를 엽니다.
- 만든 실행 역할을 선택합니다.
- Delete(삭제) 를 선택합니다.
- 텍스트 입력 필드에 역할 이름을 입력하고 Delete 를 선택합니다.
Lambda 함수를 삭제하려면:
- Lambda 콘솔의 Functions(함수) 페이지를 엽니다.
- 만든 함수를 선택합니다.
- Actions(작업), Delete(삭제) 를 선택합니다.
- 텍스트 입력 필드에
confirm을 입력하고 Delete 를 선택합니다.
더 알아보기 (Learn more)
- Lambda 함수 URL
- Lambda 응답 스트리밍
- Lambda 호출 모드