

# 안전한 카나리 업데이트 수행
<a name="performing-safe-canary-upgrades"></a>

CloudWatch Synthetics 안전한 카나리 업데이트를 사용하면 변경 사항을 적용하기 전에 기존 카나리에 대한 업데이트를 테스트할 수 있습니다. 이 기능은 새로운 런타임 및 코드 또는 메모리 변경과 같은 기타 구성 변경 사항과 카나리의 호환성을 검증하는 데 도움이 됩니다. 잘못된 업데이트로 인한 잠재적 모니터링 중단을 최소화할 수 있습니다.

런타임 버전 업데이트, 구성 변경 및 코드 스크립트 수정에 안전한 카나리 업데이트를 사용하면 위험을 완화하고, 중단 없는 모니터링을 유지하고, 커밋 전에 변경 사항을 확인하고, 업데이트 및 가동 중지 시간을 단축할 수 있습니다.

**Topics**
+ [사전 조건](#performing-safe-canary-upgrades-prereq)
+ [모범 사례](#performing-safe-canary-upgrades-best-practices)
+ [모의 실습을 사용하여 카나리 테스트](#performing-safe-canary-upgrades-getting-started)
+ [제한 사항](#performing-safe-canary-upgrades-limitations)

## 사전 조건
<a name="performing-safe-canary-upgrades-prereq"></a>

사전 조건이 완료되어야 합니다.
+ AWS CloudWatch Synthetics 권한이 있는 계정
+ 지원되는 런타임 버전의 기존 카나리([제한 사항](#performing-safe-canary-upgrades-limitations)에서 호환되는 런타임 참조)
+ 모의 실행을 수행할 때 호환되는 런타임 포함([제한 사항](#performing-safe-canary-upgrades-limitations)에서 호환되는 런타임 참조)

## 모범 사례
<a name="performing-safe-canary-upgrades-best-practices"></a>

다음은 카나리를 수행하는 동안 따라야 할 몇 가지 모범 사례입니다.
+ 모의 실행을 실행하여 런타임 업데이트 검증
+ 카나리에 대한 프로덕션 업데이트 전에 모의 실행 수행
+ 모의 실행 후 카나리 로그 및 아티팩트 검토
+ 모의 실행을 사용하여 종속성 및 라이브러리 호환성 검증

## 모의 실습을 사용하여 카나리 테스트
<a name="performing-safe-canary-upgrades-getting-started"></a>

다음 옵션을 사용하여 카나리 업데이트를 테스트할 수 있습니다.

 **AWS Management Console의 편집 워크플로 사용** 

1. CloudWatch Synthetics 콘솔로 이동합니다.

1. 업데이트할 카나리를 선택합니다.

1. **작업** 드롭다운에서 **편집**을 선택합니다.

   테스트하려는 변경 사항으로 카나리를 업데이트합니다. 런타임 버전 변경이나 스크립트의 코드 편집을 예로 들 수 있습니다.

1. **카나리 스크립트**에서 **모의 실행 시작**을 선택하여 테스트하고 즉시 결과를 확인하거나 페이지 하단에 있는 **나중에 검증 및 저장**을 선택하여 테스트를 시작하고 나중에 **카나리 세부 정보** 페이지에서 결과를 확인합니다.

1. 모의 실행이 성공하면 **제출**을 선택하여 카나리 업데이트를 커밋합니다.

 **AWS Management Console을 사용하여 카나리 일괄 업데이트** 

1. CloudWatch Synthetics 콘솔로 이동합니다.

1. **Synthetics** 목록 페이지를 선택합니다.

1. 런타임을 업데이트할 카나리를 최대 5개까지 선택합니다.

1. **작업** 드롭다운 메뉴에서 **런타임 업데이트**를 선택합니다.

1. **새 런타임의 모의 실행 시작**을 선택하여 모의 실행을 시작하고 업데이트 전에 변경 사항을 테스트합니다.

1. **Synthetics** 목록 페이지에는 카나리의 **런타임** 버전 옆에 모의 실행 진행 상황을 표시하는 텍스트가 표시됩니다(런타임 업데이트와 관련된 모의 실행에만 표시됨).

   모의 실행이 성공하면 **업데이트 시작** 텍스트가 표시됩니다.

1. **업데이트 시작**을 선택하여 런타임 업데이트를 커밋합니다.

1. 모의 실행이 실패하면 **모의 실행 업데이트 실패** 텍스트가 표시됩니다. 텍스트를 선택하여 카나리 세부 정보 페이지에 대한 디버그 링크를 확인합니다.

 **AWS CLI 또는 SDK 사용** 

API는 제공된 카나리 이름 `MyCanary`에 대해 모의 실행을 시작하고 런타임 버전을 `syn-nodejs-puppeteer-10.0`으로 업데이트합니다.

```
aws synthetics start-canary-dry-run \
    --name MyCanary \
    --runtime-version syn-nodejs-puppeteer-10.0
      
      // Or if you wanted to update other configurations:

aws synthetics start-canary-dry-run \
    --name MyCanary \
    --execution-role-arn arn:aws:iam::123456789012:role/NewRole
```

API는 `DryRunConfigOutput` 내부에 `DryRunId`를 반환합니다.

제공된 `DryRunId`를 사용하여 `GetCanary`를 호출하고 카나리의 모의 실행 구성과 `LastDryRunExecutionStatus`로 나열된 모의 실행의 상태가 포함된 추가 필드인 `DryRunConfig`를 수신합니다.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

자세한 정보를 알아보려면 제공된 `DryRunId`와 함께 `GetCanaryRuns`를 사용하여 실행 및 추가 정보를 검색합니다.

```
aws synthetics get-canary-runs \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

모의 실습이 성공하면 제공된 ` DryRunId`와 함께 `UpdateCanary`를 사용하여 변경 사항을 커밋할 수 있습니다.

```
aws synthetics update-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

어떤 이유로든 실패하면(GetCanaryRuns의 결과에 세부 정보 포함) `GetCanaryRuns`의 결과에 디버깅할 로그가 포함된 아티팩트 위치가 있습니다. 로그가 없으면 모의 실행 생성에 실패한 것입니다. ` GetCanary`를 사용하여 검증할 수 있습니다.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

*State*, *StateReason* 및 *StateReasonCode*에는 모의 실행 상태가 표시됩니다.

 **CloudFormation 사용** 

Synthetics Canary용 템플릿에서 부울 값 `true` 또는 `false`를 허용하는 필드 `DryRunAndUpdate`를 입력합니다.

값이 `true`인 경우 모든 업데이트에서 카나리를 자동으로 업데이트하기 전에 변경 사항을 검증하기 위한 모의 실행을 실행합니다. 모의 실행이 실패하면 카나리가 업데이트되지 않고 유효한 이유와 함께 배포 및 CloudFormation 배포에 실패합니다. 이 문제를 디버깅하려면 [AWS Synthetics 콘솔](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html)을 사용하거나 API를 사용하는 경우 `GetCanaryRuns` API를 사용하여 `ArtifactS3Location`을 가져오고, `*-log.txt` 파일을 다운로드하여 카나리 로그 실행에 오류가 있는지 검토합니다. 검증 후 CloudFormation 템플릿을 수정하고 배포를 다시 시도하거나 위의 API를 사용하여 검증합니다.

값이 `false`인 경우 Synthetics는 변경 사항을 검증하기 위해 모의 실행을 실행하지 않고 업데이트를 직접 커밋합니다.

실패한 카나리에 대한 문제 해결에 대한 내용은 [실패한 canary 문제 해결](CloudWatch_Synthetics_Canaries_Troubleshoot.md) 섹션을 참조하세요.

예제 템플릿.

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-puppeteer-10.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      DryRunAndUpdate: true
```

## 제한 사항
<a name="performing-safe-canary-upgrades-limitations"></a>
+ 지원 런타임 버전 – syn-nodejs-puppeteer-10.0\$1, syn-nodejs-playwright-2.0\$1, syn-python-selenium-5.1\$1, syn-nodejs-3.0\$1
+ 한 번에 카나리당 한 번의 모의 실행만 실행할 수 있습니다.
+ 모의 실행이 실패하면 카나리를 업데이트할 수 없습니다.
+ 모의 실행은 **Schedule** 필드 변경 사항을 테스트할 수 없습니다.

**참고**  
Playwright 카나리에 대한 코드 변경이 포함된 모의 실행을 시작하고 연결된 `DryRunId`를 제공하지 않고 카나리를 업데이트하려는 경우 코드 파라미터를 명시적으로 지정해야 합니다.