Lambda 함수 URL 생성 및 관리

Lambda 함수 URL 생성 및 관리

함수 URL은 Lambda 함수를 위한 전용 HTTP(S) 엔드포인트예요. Lambda 콘솔이나 Lambda API를 통해 함수 URL을 만들고 구성할 수 있어요.

팁(Tip) Lambda는 HTTP 엔드포인트를 통해 함수를 호출하는 두 가지 방법을 제공해요. 함수 URL과 Amazon API Gateway예요. 사용 사례에 어떤 방법이 가장 좋은지 확실하지 않다면 HTTP 요청으로 Lambda 함수를 호출하는 방법 선택을 참고하세요.

함수 URL을 만들면 Lambda가 고유한 URL 엔드포인트를 자동으로 생성해요. 함수 URL을 만든 후에는 URL 엔드포인트가 절대 변경되지 않아요. 함수 URL 엔드포인트의 형식은 다음과 같아요.

https://<url-id>.lambda-url.<region>.on.aws

참고(Note) 함수 URL은 모든 AWS 리전에서 지원되지는 않아요. 가용성을 확인하려면 AWS Regional Services를 방문해 Feature Name = Function URLs로 필터링하세요.

함수 URL은 IPv4와 IPv6를 지원하는 듀얼 스택(dual stack)을 활성화해요. 함수에 함수 URL을 구성한 후에는 웹 브라우저, curl, Postman 또는 모든 HTTP 클라이언트로 HTTP(S) 엔드포인트를 통해 함수를 호출할 수 있어요.

참고(Note) 함수 URL은 공개 인터넷을 통해서만 접근할 수 있어요. Lambda 함수는 AWS PrivateLink를 지원하지만 함수 URL은 지원하지 않아요.

Lambda 함수 URL은 보안과 접근 제어에 리소스 기반 정책을 사용해요. 함수 URL은 교차 출처 리소스 공유(CORS) 구성 옵션도 지원해요.

함수 URL은 모든 함수 별칭이나 $LATEST 미게시 함수 버전에 적용할 수 있어요. 다른 함수 버전에는 함수 URL을 추가할 수 없어요.

다음 섹션에서는 Lambda 콘솔, AWS CLI, CloudFormation 템플릿으로 함수 URL을 만들고 관리하는 방법을 보여줘요. 함수 URL을 웹훅 엔드포인트로 사용하는 단계별 튜토리얼은 튜토리얼: Lambda 함수 URL을 사용한 웹훅 엔드포인트 만들기를 참고하세요.

출처: AWS Lambda 개발자 안내서

본문

주제(Topics)

함수 URL 만들기(콘솔)

다음 단계에 따라 콘솔을 사용해 함수 URL을 만들어요.

기존 함수의 함수 URL 만들기

  1. Lambda 콘솔의 Functions 페이지를 열어요.

  2. 함수 URL을 만들 함수의 이름을 선택해요.

  3. Configuration 탭을 선택한 다음 Function URL을 선택해요.

  4. Create function URL을 선택해요.

  5. Auth type에 대해 AWS_IAM 또는 NONE을 선택해요. 함수 URL 인증에 대한 자세한 내용은 접근 제어를 참고하세요.

  6. (선택 사항) **Configure cross-origin resource sharing (CORS)**을 선택한 다음 함수 URL에 대한 CORS 설정을 구성해요. CORS에 대한 자세한 내용은 교차 출처 리소스 공유(CORS)를 참고하세요.

  7. Save를 선택해요.

이렇게 하면 함수의 $LATEST 미게시 버전에 대한 함수 URL이 생성돼요. 함수 URL은 콘솔의 Function overview 섹션에 나타나요.

기존 별칭의 함수 URL 만들기

  1. Lambda 콘솔의 Functions 페이지를 열어요.

  2. 함수 URL을 만들 별칭이 있는 함수의 이름을 선택해요.

  3. Aliases 탭을 선택한 다음 함수 URL을 만들 별칭의 이름을 선택해요.

  4. Configuration 탭을 선택한 다음 Function URL을 선택해요.

  5. Create function URL을 선택해요.

  6. Auth type에 대해 AWS_IAM 또는 NONE을 선택해요. 함수 URL 인증에 대한 자세한 내용은 접근 제어를 참고하세요.

  7. (선택 사항) **Configure cross-origin resource sharing (CORS)**을 선택한 다음 함수 URL에 대한 CORS 설정을 구성해요. CORS에 대한 자세한 내용은 교차 출처 리소스 공유(CORS)를 참고하세요.

  8. Save를 선택해요.

이렇게 하면 함수 별칭에 대한 함수 URL이 생성돼요. 함수 URL은 별칭의 콘솔 Function overview 섹션에 나타나요.

함수 URL로 새 함수 만들기

함수 URL로 새 함수 만들기(콘솔)

  1. Lambda 콘솔의 Functions 페이지를 열어요.

  2. Create function을 선택해요.

  3. Basic information에서 다음을 수행해요.

    1. Function name에 대해 my-function 같은 함수 이름을 입력해요.

    2. Runtime에 대해 선호하는 언어 런타임(예: Node.js 24)을 선택해요.

    3. Architecture에 대해 x86_64 또는 arm64를 선택해요.

    4. Permissions를 확장한 다음 새 실행 역할을 만들지 기존 역할을 사용할지 선택해요.

  4. Advanced settings를 확장한 다음 Function URL을 선택해요.

  5. Auth type에 대해 AWS_IAM 또는 NONE을 선택해요. 함수 URL 인증에 대한 자세한 내용은 접근 제어를 참고하세요.

  6. (선택 사항) **Configure cross-origin resource sharing (CORS)**을 선택해요. 함수 생성 중 이 옵션을 선택하면 기본적으로 모든 출처의 요청을 함수 URL이 허용해요. 함수를 만든 후 함수 URL의 CORS 설정을 편집할 수 있어요. CORS에 대한 자세한 내용은 교차 출처 리소스 공유(CORS)를 참고하세요.

  7. Create function을 선택해요.

이렇게 하면 함수의 $LATEST 미게시 버전에 대한 함수 URL이 있는 새 함수가 생성돼요. 함수 URL은 콘솔의 Function overview 섹션에 나타나요.

함수 URL 만들기(AWS CLI)

AWS Command Line Interface(AWS CLI)를 사용해서 기존 Lambda 함수의 함수 URL을 만들려면 다음 명령을 실행해요.

aws lambda create-function-url-config \
    --function-name {{my-function}} \
    --qualifier {{prod}} \ // optional
    --auth-type {{AWS_IAM}}
    --cors-config {{{AllowOrigins="https://example.com"}}} // optional

이렇게 하면 my-function 함수의 prod 특정자(qualifier)에 함수 URL이 추가돼요. 이러한 구성 파라미터에 대한 자세한 내용은 API 참조의 CreateFunctionUrlConfig를 참고하세요.

참고(Note) AWS CLI로 함수 URL을 만들려면 함수가 이미 존재해야 해요.

CloudFormation 템플릿에 함수 URL 추가

CloudFormation 템플릿에 AWS::Lambda::Url 리소스를 추가하려면 다음 구문을 사용해요.

JSON

{
  "Type" : "AWS::Lambda::Url",
  "Properties" : {
      "AuthType" : String,
      "Cors" : Cors,
      "Qualifier" : String,
      "TargetFunctionArn" : String
    }
}

YAML

Type: AWS::Lambda::Url
Properties: 
  AuthType: String
  Cors: 
    Cors
  Qualifier: String
  TargetFunctionArn: String

파라미터

  • (필수) AuthType – 함수 URL의 인증 유형을 정의해요. 가능한 값은 AWS_IAM 또는 NONE이에요. 인증된 사용자만 접근을 제한하려면 AWS_IAM으로 설정해요. IAM 인증을 우회하고 모든 사용자가 함수에 요청하도록 허용하려면 NONE으로 설정해요.
  • (선택 사항) Cors – 함수 URL의 CORS 설정을 정의해요. CloudFormation에서 AWS::Lambda::Url 리소스에 Cors를 추가하려면 다음 구문을 사용해요.

예시 AWS::Lambda::Url.Cors(JSON)

{
  "AllowCredentials" : Boolean,
  "AllowHeaders" : [ String, ... ],
  "AllowMethods" : [ String, ... ],
  "AllowOrigins" : [ String, ... ],
  "ExposeHeaders" : [ String, ... ],
  "MaxAge" : Integer
}

예시 AWS::Lambda::Url.Cors(YAML)

  AllowCredentials: Boolean
  AllowHeaders: 
    - String
  AllowMethods: 
    - String
  AllowOrigins: 
    - String
  ExposeHeaders: 
    - String
  MaxAge: Integer
  • (선택 사항) Qualifier – 별칭 이름이에요.
  • (필수) TargetFunctionArn – Lambda 함수의 이름 또는 Amazon Resource Name(ARN)이에요. 유효한 이름 형식은 다음과 같아요.
    • 함수 이름 – my-function
    • 함수 ARN – arn:aws:lambda:us-west-2:123456789012:function:my-function
    • 부분 ARN – 123456789012:function:my-function

교차 출처 리소스 공유(CORS)

다른 출처가 함수 URL에 어떻게 접근할 수 있는지 정의하려면 교차 출처 리소스 공유(CORS)를 사용해요. 다른 도메인에서 함수 URL을 호출할 계획이라면 CORS를 구성하는 것을 권장해요. Lambda는 함수 URL에 대해 다음 CORS 헤더를 지원해요.

CORS 헤더 CORS 구성 속성 예시 값
Access-Control-Allow-Origin AllowOrigins *(모든 출처 허용)
https://www.example.com
http://localhost:60905
Access-Control-Allow-Methods AllowMethods GET, POST, DELETE, *
Access-Control-Allow-Headers AllowHeaders Date, Keep-Alive, X-Custom-Header
Access-Control-Expose-Headers ExposeHeaders Date, Keep-Alive, X-Custom-Header
Access-Control-Allow-Credentials AllowCredentials TRUE
Access-Control-Max-Age MaxAge 5(기본값), 300

Lambda 콘솔이나 AWS CLI로 함수 URL에 CORS를 구성하면 Lambda가 함수 URL을 통한 모든 응답에 CORS 헤더를 자동으로 추가해요. 또는 함수 응답에 CORS 헤더를 수동으로 추가할 수도 있어요. 충돌하는 헤더가 있으면 예상되는 동작은 요청 유형에 따라 달라져요.

  • OPTIONS 요청 같은 사전 요청(preflight)의 경우 함수 URL에 구성된 CORS 헤더가 우선해요. Lambda는 응답에서 이러한 CORS 헤더만 반환해요.
  • GET이나 POST 요청 같은 비사전 요청의 경우 Lambda는 함수 URL에 구성된 CORS 헤더와 함수가 반환한 CORS 헤더를 모두 반환해요. 이로 인해 응답에 중복 CORS 헤더가 생길 수 있어요. The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed 같은 오류가 보일 수 있어요.

일반적으로 함수 응답에서 CORS 헤더를 수동으로 보내기보다 함수 URL에 모든 CORS 설정을 구성하는 것을 권장해요.

함수 URL 스로틀링

스로틀링은 함수가 요청을 처리하는 비율을 제한해요. 이는 함수가 다운스트림 리소스를 과부하시키는 것을 방지하거나 갑작스러운 요청 급증을 처리하는 등 여러 상황에서 유용해요.

예약 동시성(reserved concurrency)을 구성해서 함수 URL을 통해 Lambda 함수가 처리하는 요청 비율을 스로틀할 수 있어요. 예약 동시성은 함수의 최대 동시 호출 수를 제한해요. 함수의 최대 초당 요청 수(RPS)는 구성된 예약 동시성의 10배와 같아요. 예를 들어 함수를 예약 동시성 100으로 구성하면 최대 RPS는 1,000이에요.

함수의 동시성이 예약 동시성을 초과할 때마다 함수 URL은 HTTP 429 상태 코드를 반환해요. 구성된 예약 동시성을 기준으로 10x RPS 최대치를 초과하는 요청을 함수가 받으면 HTTP 429 오류도 받아요. 예약 동시성에 대한 자세한 내용은 함수의 예약 동시성 구성을 참고하세요.

함수 URL 비활성화

긴급 상황에서 함수 URL에 대한 모든 트래픽을 거부하고 싶을 수 있어요. 함수 URL을 비활성화하려면 예약 동시성을 0으로 설정해요. 이렇게 하면 함수 URL에 대한 모든 요청이 스로틀되어 HTTP 429 상태 응답이 발생해요. 함수 URL을 재활성화하려면 예약 동시성 구성을 삭제하거나 구성을 0보다 큰 값으로 설정해요.

함수 URL 삭제

함수 URL을 삭제하면 복구할 수 없어요. 새 함수 URL을 만들면 URL 주소가 달라져요.

참고(Note) 인증 유형이 NONE인 함수 URL을 삭제해도 Lambda는 연결된 리소스 기반 정책을 자동으로 삭제하지 않아요. 이 정책을 삭제하려면 수동으로 삭제해야 해요.

  1. Lambda 콘솔의 Functions 페이지를 열어요.

  2. 함수의 이름을 선택해요.

  3. Configuration 탭을 선택한 다음 Function URL을 선택해요.

  4. Delete를 선택해요.

  5. 삭제를 확인하려면 필드에 delete라는 단어를 입력해요.

  6. Delete를 선택해요.

참고(Note) 함수 URL이 있는 함수를 삭제하면 Lambda는 함수 URL을 비동기적으로 삭제해요. 같은 계정에서 같은 이름으로 새 함수를 즉시 만들면 원래 함수 URL이 삭제되지 않고 새 함수에 매핑될 수 있어요.

더 알아보기 (Learn more)

함수 URL 인증에 대한 자세한 내용은 Lambda 함수 URL 접근 제어를 참고하세요.