

# 가중치 별칭을 사용하여 Lambda 카나리 배포 구현
<a name="configuring-alias-routing"></a>

가중치가 적용된 별칭을 사용하여 동일한 함수의 서로 다른 두 [버전](configuration-versions.md) 간에 트래픽을 분할할 수 있습니다. 이 접근 방식을 사용하면 적은 비율의 트래픽으로 함수의 새 버전을 테스트하고 필요한 경우 빠르게 롤백할 수 있습니다. 이를 [카나리 배포](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/canary-deployments.html)라고 합니다. 카나리 배포는 모든 트래픽을 한 번에 전환하는 대신 새 버전을 요청의 일부에만 노출하여 블루/그린 배포와 다릅니다.

별칭이 최대 두 개의 Lambda 함수 버전을 가리키도록 설정할 수 있습니다. 버전은 다음 기준을 충족해야 합니다.
+ 두 버전이 동일한 [실행 역할](lambda-intro-execution-role.md)을 가져야 합니다.
+ 두 버전 모두 동일한 [배달 못한 편지 대기열](invocation-async-retain-records.md#invocation-dlq) 구성을 가져야 하거나 배달 못한 편지 대기열 구성이 없어야 합니다.
+ 두 버전 모두 게시해야 합니다. 별칭은 `$LATEST`을 가리킬 수 없습니다.

**참고**  
Lambda는 간단한 확률 모델을 사용하여 두 함수 버전 간에 트래픽을 분산시킵니다. 트래픽 수준이 낮으면 각 버전에서 구성된 트래픽과 실제 트래픽의 비율 간에 큰 차이가 나타날 수 있습니다. 함수가 프로비저닝된 동시성을 사용하는 경우 별칭 라우팅이 활성 상태인 동안 더 많은 수의 프로비전된 동시성 인스턴스를 구성하여 [초과(spillover) 호출](monitoring-metrics-types.md#invocation-metrics)을 방지할 수 있습니다.

## 가중치가 적용된 별칭 생성
<a name="create-weighted-alias"></a>

------
#### [ Console ]

**콘솔을 사용하여 별칭에 대한 라우팅 구성하기**
**참고**  
함수에 게시된 버전이 두 개 이상 있는지 확인합니다. 추가 버전을 생성하려면 [함수 버전 생성](configuration-versions.md#configuration-versions-config)의 지침을 따르세요.

1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

1. 함수를 선택합니다.

1. **별칭(Aliases)**을 선택한 다음 **별칭 생성(Create alias)**을 선택합니다.

1. **별칭 생성(Create alias)** 페이지에서 다음을 수행합니다.

   1. 별칭의 **이름(Name)**을 입력합니다.

   1. (선택 사항) 경보에 대한 **설명(Description)**을 입력합니다.

   1. **버전(Version)**에서 별칭이 가리키도록 할 첫 번째 함수 버전을 선택합니다.

   1. **가중치 기반 별칭(Weighted alias)**을 확장합니다.

   1. **추가 버전(Additional version)**에서 별칭이 가리킬 두 번째 함수 버전을 선택합니다.

   1. **가중치(Weight)(%)**에서 함수의 가중치 값을 입력합니다. *가중치*는 별칭이 간접 호출될 때 해당 버전에 할당되는 트래픽의 비율입니다. 첫 번째 버전에는 남은 가중치가 할당됩니다. 예를 들어 **Additional version(추가 버전)**에 10%를 지정할 경우 첫 번째 버전에 자동으로 90%가 할당됩니다.

   1. **저장**을 선택합니다.

------
#### [ AWS CLI ]

[create-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-alias.html) 및 [update-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-alias.html) AWS CLI 명령을 사용하여 두 함수 버전 간의 트래픽 가중치를 구성합니다. 별칭을 만들거나 업데이트할 때 `routing-config` 파라미터에 트래픽 가중치를 지정합니다.

다음 예에서는 함수의 버전 1을 가리키는 **routing-alias**라는 Lambda 함수 별칭을 생성합니다. 함수의 버전 2는 트래픽의 3%를 수신합니다. 나머지 97%의 트래픽은 버전 1로 라우팅됩니다.

```
aws lambda create-alias \
  --name routing-alias \
  --function-name my-function \
  --function-version 1  \
  --routing-config AdditionalVersionWeights={"2"=0.03}
```

이 `update-alias` 명령을 사용하여 버전 2로 들어오는 트래픽의 비율을 늘립니다. 다음 예에서는 트래픽을 5%로 늘립니다.

```
aws lambda update-alias \
  --name routing-alias \
  --function-name my-function \
  --routing-config AdditionalVersionWeights={"2"=0.05}
```

모든 트래픽을 버전 2로 라우팅하려면 `update-alias` 명령을 사용하여 별칭이 버전 2를 가리키도록 `function-version` 속성을 변경합니다. 이 명령은 라우팅 구성도 재설정합니다.

```
aws lambda update-alias \
  --name routing-alias \
  --function-name my-function  \
  --function-version 2 \
  --routing-config AdditionalVersionWeights={}
```

 이전 단계의 AWS CLI 명령은 다음 Lambda API 작업에 해당합니다.
+ [CreateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_CreateAlias.html)
+ [UpdateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateAlias.html)

------

## 간접 호출된 버전 확인
<a name="determining-routing-version"></a>

두 함수 버전 간에 트래픽 가중치를 구성할 때 간접 호출된 Lambda 함수 버전을 확인하는 방법은 두 가지가 있습니다.
+ **CloudWatch Logs** – 매 함수 간접 호출 시 Lambda가 간접 호출된 버전 ID를 포함한 `START` 로그 항목을 자동으로 내보냅니다. 예제:

  `START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version: 2` 

  별칭 간접 호출을 위해 Lambda는 `ExecutedVersion` 차원을 사용하여 간접 호출된 버전을 기준으로 지표 데이터를 필터링합니다. 자세한 내용은 [Lambda 함수에 대한 지표 보기](monitoring-metrics-view.md) 섹션을 참조하세요.
+ **응답 페이로드(동기식 간접 호출)** – 동기식 함수 간접 호출에 대한 응답에 간접 호출된 함수 버전을 나타내는 `x-amz-executed-version` 헤더가 포함되어 있습니다.

## 가중치가 적용된 별칭을 사용하여 롤링 배포 생성
<a name="lambda-rolling-deployments"></a>

AWS CodeDeploy 및 AWS Serverless Application Model(AWS SAM) 항목을 사용하여 함수 코드의 변경 사항을 자동으로 감지하고, 함수의 새 버전을 배포하고, 새 버전으로 흐르는 트래픽 양을 점진적으로 늘리는 롤링 배포를 생성합니다. 트래픽 양과 증가 속도는 구성이 가능한 파라미터입니다.

롤링 배포에서 AWS SAM는 다음 작업을 수행합니다.
+ Lambda 함수를 구성하고 별칭을 생성합니다. 별칭 가중치 라우팅 구성은 롤링 배포 구현의 기반이 되는 기능입니다.
+ CodeDeploy 애플리케이션 및 배포 그룹을 생성합니다. 배포 그룹은 롤링 배포 및 롤백(필요한 경우)을 관리합니다.
+ 내 Lambda 함수의 새 버전이 생성될 때 이를 감지합니다.
+ 새 버전의 배포를 시작하도록 CodeDeploy를 트리거합니다.

### 예제 AWS SAM 템플릿
<a name="sam-template"></a>

다음 예제는 간단한 롤링 배포를 위한 [AWS SAM 템플릿](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html)을 보여줍니다.

```
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A sample SAM template for deploying Lambda functions

Resources:
# Details about the myDateTimeFunction Lambda function
  myDateTimeFunction:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      Handler: myDateTimeFunction.handler
      Runtime: nodejs24.x
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
      AutoPublishAlias: live
      DeploymentPreference:
# Specifies the deployment configuration
          Type: Linear10PercentEvery2Minutes
```

이 템플릿은 다음 속성을 가진 `myDateTimeFunction`이라는 Lambda 함수를 정의합니다.

**AutoPublishAlias **  
`AutoPublishAlias` 속성은 `live`라는 별칭을 생성합니다. 또한 AWS SAM 프레임워크는 함수에 대한 새 코드를 저장할 때 이를 자동으로 감지합니다. 그러면 프레임워크가 새 함수 버전을 게시하고 새 버전을 가리키도록 `live` 별칭을 업데이트합니다.

**DeploymentPreference**  
`DeploymentPreference` 속성은 CodeDeploy 애플리케이션이 Lambda 함수의 원래 버전에서 새 버전으로 트래픽을 이동시키는 속도를 결정합니다. 값이 `Linear10PercentEvery2Minutes`면 트래픽의 10%가 2분마다 새 버전으로 새롭게 이동됩니다.  
사전 정의된 배포 구성의 목록은 [배포 구성](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)을 참조하세요.

CodeDeploy 및 AWS SAM 항목을 사용하여 롤링 배포를 생성하는 방법에 대한 자세한 내용은 다음을 참조하세요.
+ [튜토리얼: CodeDeploy와 AWS Serverless Application Model 항목을 사용하여 업데이트된 Lambda 함수 배포](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-lambda-sam.html)
+ [AWS SAM에서 서버리스 애플리케이션의 점진적 배포](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html)