

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Data Lifecycle Manager를 사용하여 백업 자동화
<a name="snapshot-lifecycle"></a>

Amazon Data Lifecycle Manager를 사용하여 EBS 스냅샷 및 EBS-backed AMI의 생성, 보존 및 삭제를 자동화할 수 있습니다. 스냅샷 및 AMI 관리를 자동화하면 다음과 같은 이점이 있습니다.
+ 정기적인 백업 일정을 실행하여 중요한 데이터를 보호합니다.
+ 정기적으로 새로 고칠 수 있는 표준화된 AMI를 생성합니다.
+ 감사 기관이나 내부 규정 준수 부서에서 요구하는 백업을 보관합니다.
+ 오래된 백업을 삭제하여 스토리지 비용을 절감합니다.
+ 격리된 리전 또는 계정에 데이터를 백업하는 재해 복구 백업 정책을 생성합니다.

Amazon EventBridge 및의 모니터링 기능과 결합하면 AWS CloudTrail Amazon Data Lifecycle Manager는 추가 비용 없이 Amazon EC2 인스턴스 및 개별 EBS 볼륨에 대한 완전한 백업 솔루션을 제공합니다.

**중요**  
Amazon Data Lifecycle Manager는 다른 방법으로 생성된 스냅샷 또는 AMI를 관리할 수 없습니다.
Amazon Data Lifecycle Manager는 인스턴스 스토어 지원 AMI의 생성, 보존 및 삭제를 자동화할 수 없습니다.

Amazon Data Lifecycle Manager는 Amazon Elastic Block Store(Amazon EBS)의 서비스 기능으로 평가됩니다. Amazon EBS를 나열하는 [규정 준수 프로그램(FedRAMP, HIPAA BAA, SOC 등) 범위 내 모든AWS 서비스](https://aws.amazon.com/compliance/services-in-scope/)도 Amazon Data Lifecycle Manager에 적용됩니다.

**Topics**
+ [할당량](#dlm-quotas)
+ [작동 방식](dlm-elements.md)
+ [기본 정책 대 사용자 지정 정책](policy-differences.md)
+ [기본 정책 생성](default-policies.md)
+ [스냅샷에 대한 사용자 지정 정책 생성](snapshot-ami-policy.md)
+ [AMI에 대한 사용자 지정 정책 생성](ami-policy.md)
+ [교차 계정 스냅샷 복사 자동화](event-policy.md)
+ [정책 수정](modify.md)
+ [정책 삭제](delete.md)
+ [액세스 제어](dlm-prerequisites.md)
+ [정책 모니터링](dlm-monitor-lifecycle.md)
+ [서비스 엔드포인트](dlm-service-endpoints.md)
+ [인터페이스 VPC 엔드포인트](dlm-vpc-endpoints.md)
+ [문제 해결](dlm-troubleshooting.md)

## 할당량
<a name="dlm-quotas"></a>

 AWS 계정에는 Amazon Data Lifecycle Manager와 관련된 다음과 같은 할당량이 있습니다.


| 설명 | 할당량 | 
| --- | --- | 
| 리전당 사용자 지정 수명 주기 정책 | 100 | 
| 리전별 EBS 스냅샷에 대한 기본 정책 | 1 | 
| 리전별 EBS 지원 AMI에 대한 기본 정책 | 1 | 
| 리소스당 태그 | 45 | 

# Amazon Data Lifecycle Manager 작동 방식
<a name="dlm-elements"></a>

다음은 Amazon Data Lifecycle Manager의 핵심 요소입니다.

**Topics**
+ [정책](#dlm-policies)
+ [정책 일정](#dlm-lifecycle-schedule)
+ [대상 리소스 태그](#dlm-tagging-volumes)
+ [스냅샷](#dlm-ebs-snapshots)
+ [EBS-backed AMI](#dlm-ebs-amis)
+ [Amazon Data Lifecycle Manager 태그](#dlm-tagging-snapshots)

## 정책
<a name="dlm-policies"></a>

Amazon Data Lifecycle Manager로 정책을 생성하여 백업 생성 및 보존 요구 사항을 정의합니다. 이러한 정책은 일반적으로 다음을 지정합니다.
+ **정책 유형** - 정책에서 관리하는 백업 리소스의 유형(스냅샷 또는 EBS 지원 AMI)을 정의합니다.
+ **대상 리소스** - 정책의 대상이 되는 리소스의 유형(인스턴스 또는 EBS 볼륨)을 정의합니다.
+ **생성 빈도** - 정책이 실행되고 스냅샷 또는 AMI를 생성하는 빈도를 정의합니다.
+ **보존 임곗값** - 정책이 생성 후 스냅샷 또는 AMI를 유지하는 기간을 정의합니다.
+ **추가 작업** - 크로스 리전 복사, 보관 또는 리소스 태깅과 같이 정책에서 수행해야 하는 추가 작업을 정의합니다.

Amazon Data Lifecycle Manager는 기본 정책과 사용자 지정 정책을 제공합니다.

**기본 정책**  
기본 정책은 최근 백업이 없는 리전의 모든 볼륨과 인스턴스를 백업합니다. 제외 파라미터를 지정하여 볼륨과 인스턴스를 선택적으로 제외할 수 있습니다.

Amazon Data Lifecycle Manager는 다음과 같은 기본 정책을 지원합니다.
+ EBS 스냅샷의 기본 정책 - 볼륨을 대상으로 하고 스냅샷의 생성, 보존 및 삭제를 자동화합니다.
+ EBS 지원 AMI의 기본 정책 - 인스턴스를 대상으로 하고 EBS 지원 AMI의 생성, 보존 및 등록 취소를 자동화합니다.

각 계정 및 AWS 리전의 리소스 유형당 하나의 기본 정책만 가질 수 있습니다.

**사용자 지정 정책**  
사용자 지정 정책은 할당된 태그를 기반으로 특정 리소스를 대상으로 하며 빠른 스냅샷 복원, 스냅샷 아카이빙, 크로스 계정 복사, 사전 및 사후 스크립트와 같은 고급 기능을 지원합니다. 사용자 지정 정책에는 최대 4개의 일정이 포함될 수 있으며, 각 일정에는 고유한 생성 빈도, 보존 임곗값 및 고급 기능 구성이 있을 수 있습니다.

Amazon Data Lifecycle Manager는 다음과 같은 사용자 지정 정책을 지원합니다.
+ EBS 스냅샷 정책 - 볼륨 또는 인스턴스를 대상으로 하고 EBS 스냅샷의 생성, 보존 및 삭제를 자동화합니다.
+ EBS 지원 AMI 정책 - 인스턴스를 대상으로 하고 EBS 지원 AMI의 생성, 보존 및 등록 취소를 자동화합니다.
+ 크로스 계정 복사 이벤트 정책 - 공유된 스냅샷의 크로스 리전 복사 작업을 자동화합니다.

자세한 내용은 [Amazon Data Lifecycle Manager 기본 정책 대 사용자 지정 정책](policy-differences.md) 단원을 참조하십시오.

## **정책 일정 (사용자 지정 정책만 해당)
<a name="dlm-lifecycle-schedule"></a>

정책 일정은 정책에 따라 스냅샷 또는 AMI가 생성되는 시기를 정의합니다. 정책은 최대 4개의 일정(하나의—필수 일정과 최대 3개의 선택적 일정)을 가질 수 있습니다.

단일 정책에 여러 일정을 추가하면 동일한 정책을 사용하여 서로 다른 빈도로 스냅샷 또는 AMI를 생성할 수 있습니다. 예를 들어, 일별, 주별, 월별 및 연도별 스냅샷을 생성하는 단일 정책을 생성할 수 있습니다. 이렇게 하면 여러 정책을 관리할 필요가 없습니다.

각 일정에 대해 빈도, 빠른 스냅샷 복원 설정(스냅샷 수명 주기 정책만 해당), 교차 리전 복사 규칙 및 태그를 정의할 수 있습니다. 일정에 할당된 태그는 일정이 시작될 때 생성된 스냅샷 또는 AMI에 자동으로 할당됩니다. 또한 Amazon Data Lifecycle Manager는 일정의 빈도에 따라 각 스냅샷 또는 AMI에 시스템 생성 태그를 자동으로 할당합니다.

각 일정은 빈도에 따라 개별적으로 시작됩니다. 여러 일정이 동시에 시작되는 경우 Amazon Data Lifecycle Manager는 하나의 스냅샷 또는 AMI만 생성하고 보존 기간이 가장 높은 일정의 스냅샷 보존 설정을 적용합니다. 시작된 모든 일정의 태그가 스냅샷 또는 AMI에 적용됩니다.
+ (스냅샷 수명 주기 정책에만 해당) 빠른 스냅샷 복원에 대해 시작된 일정 중 두 개 이상이 활성화된 경우, 시작된 모든 일정에 지정된 모든 가용 영역에서 빠른 스냅샷 복원에 대해 스냅샷이 활성화됩니다. 시작된 일정의 가장 높은 보존 설정이 각 가용 영역에 사용됩니다.
+ 교차 리전 복사에 대해 시작된 일정이 중 두 개 이상이 활성화된 경우, 시작된 모든 일정에 지정된 모든 리전에 스냅샷 또는 AMI가 복사됩니다. 시작된 일정의 가장 높은 보존 기간이 적용됩니다.

## **대상 리소스 태그(사용자 지정 정책만 해당)
<a name="dlm-tagging-volumes"></a>

Amazon Data Lifecycle Manager 사용자 지정 정책은 리소스 태그를 사용하여 백업할 리소스를 식별합니다. 스냅샷 또는 EBS 지원 AMI 정책을 생성할 때 여러 대상 리소스 태그를 지정할 수 있습니다. 지정된 대상 리소스 태그 중 하나 이상이 있는 지정된 유형(인스턴스 또는 볼륨)의 모든 리소스가 정책의 대상이 됩니다. 예를 들어 볼륨을 대상으로 하는 스냅샷 정책을 생성하고`purpose=prod`, `costcenter=prod` 및 `environment=live`를 대상 리소스 태그로 지정하면 해당 태그-키 값 페어가 있는 모든 볼륨이 정책의 대상이 됩니다.

리소스에서 여러 정책을 실행하려는 경우 대상 리소스에 여러 태그를 할당한 다음에 특정 리소스 태그가 각각 대상이 되는 별도의 정책을 생성할 수 있습니다.

`\` 또는`=` 문자는 태그 키에 사용할 수 없습니다. 대상 리소스 태그는 대소문자를 구분합니다. 자세한 내용은 [리소스에 태그 지정](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)을 참조하세요.

## 스냅샷
<a name="dlm-ebs-snapshots"></a>

스냅샷은 EBS 볼륨에서 데이터를 백업하는 기본 방법입니다. 스토리지 비용을 절약하기 위해 이전 스냅샷 이후로 변경된 볼륨 데이터만 연속 스냅샷에 증분식으로 포함시킵니다. 특정 볼륨의 스냅샷 시리즈에서 스냅샷 하나를 삭제하면 해당 스냅샷에 고유한 데이터만 제거됩니다. 캡처된 볼륨 기록의 나머지는 보존됩니다. 자세한 내용은 [Amazon EBS 스냅샷](ebs-snapshots.md) 단원을 참조하십시오.

## EBS-backed AMI
<a name="dlm-ebs-amis"></a>

Amazon Machine Image(AMI)는 인스턴스를 시작하는 데 필요한 정보를 제공합니다. 동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI에서 여러 인스턴스를 시작할 수 있습니다. Amazon Data Lifecycle Manager는 EBS 지원 AMI만 지원합니다. EBS-backed AMI에는 소스 인스턴스에 연결된 각 EBS 볼륨에 대한 스냅샷이 포함됩니다. 자세한 내용은 [Amazon Machine Image(AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)를 참조하세요.

## Amazon Data Lifecycle Manager 태그
<a name="dlm-tagging-snapshots"></a>

Amazon Data Lifecycle Manager는 정책에 따라 생성된 모든 스냅샷 및 AMI에 다음 시스템 태그를 적용하여 다른 방법으로 생성된 스냅샷 및 AMI와 구분합니다.
+ `aws:dlm:lifecycle-policy-id`
+ `aws:dlm:lifecycle-schedule-name`
+ `aws:dlm:expirationTime` - 기간 기반 일정으로 생성된 스냅샷용입니다. 표준 계층에서 스냅샷을 삭제할 시기를 나타냅니다.
+ `dlm:managed`
+ `aws:dlm:archived` - 일정에 따라 아카이브된 스냅샷용입니다.
+ `aws:dlm:pre-script` - 사전 스크립트로 생성된 스냅샷의 경우
+ `aws:dlm:post-script` - 사후 스크립트로 생성된 스냅샷의 경우

스냅샷 및 AMI를 생성할 때 사용자 지정 태그가 적용되도록 지정할 수도 있습니다. `\` 또는`=` 문자는 태그 키에 사용할 수 없습니다.

필요한 경우 Amazon Data Lifecycle Manager에서 볼륨을 스냅샷 정책에 연결할 때 사용되는 대상 태그를 정책에 의해 생성된 스냅샷에 적용할 수 있습니다. 마찬가지로 인스턴스를 AMI 정책에 연결하는 데 사용되는 대상 태그를 정책에 의해 생성된 AMI에 선택적으로 적용할 수 있습니다.

# Amazon Data Lifecycle Manager 기본 정책 대 사용자 지정 정책
<a name="policy-differences"></a>

이 섹션에서는 기본 정책과 사용자 지정 정책을 비교하고 유사점과 차이점을 강조합니다.

**Topics**
+ [EBS 스냅샷 정책 비교](#snapshot-policy-diffs)
+ [EBS 지원 AMI 정책 비교](#ami-policy-diffs)

## EBS 스냅샷 정책 비교
<a name="snapshot-policy-diffs"></a>

다음 표는 EBS 스냅샷의 기본 정책과 사용자 지정 EBS 스냅샷 정책의 차이를 설명합니다.


| 기능 | EBS 스냅샷의 기본 정책 | 사용자 지정 EBS 스냅샷 정책 | 
| --- | --- | --- | 
| 관리형 백업 리소스 | EBS 스냅샷 | EBS 스냅샷 | 
| 대상 리소스 유형 | 볼륨 | 볼륨 또는 인스턴스 | 
| 리소스 대상 | 최근 스냅샷이 없는 리전 내 모든 볼륨을 대상으로 합니다. 제외 파라미터를 지정하여 특정 볼륨을 제외할 수 있습니다. | 특정 태그가 있는 볼륨 또는 인스턴스만 대상으로 합니다. | 
| 제외 파라미터 | 예, 부팅 볼륨, 특정 볼륨 유형 및 특정 태그가 있는 볼륨을 제외할 수 있습니다. | 예, 인스턴스를 대상으로 할 때 부팅 볼륨과 특정 태그가 있는 볼륨을 제외할 수 있습니다. | 
| 지원 AWS Outposts | 아니요 | 예 | 
| 여러 일정 지원 | 아니요 | 예, 정책당 최대 4개의 일정 | 
| 지원되는 보존 유형 | 경과 시간 기준 보존만 | 경과 시간 기준 및 개수 기준 보존 | 
| 스냅샷 생성 빈도 | 1\$17일마다. | cron 표현식을 사용한 일별, 주별, 월별, 연별 또는 사용자 지정 빈도 | 
| 스냅샷 보존 | 2\$114일. | 최대 1,000개의 스냅샷(개수 기준) 또는 최대 100년(경과 시간 기준). | 
| 애플리케이션에 일관되게 적용되는 스냅샷 지원 | 아니요 | 예, 사전 및 사후 스크립트 사용 | 
| 스냅샷 아카이빙 지원 | 아니요 | 예 | 
| 빠른 스냅샷 복원 지원 | 아니요 | 예 | 
| 크로스 리전 복사 지원  | 예, 기본 설정 사용 시 1 | 예, 사용자 지정 설정 사용 시 | 
| 크로스 계정 공유 지원 | 아니요 | 예 | 
| 확장 삭제 지원 2 | 예 | 아니요 | 

1 기본 정책의 경우
+ 크로스 리전 사본에는 태그를 복사할 수 없습니다.
+ 사본은 소스 스냅샷과 동일한 보존 기간을 사용합니다.
+ 사본은 소스 스냅샷과 동일한 암호화 상태를 갖습니다. 대상 리전이 기본적으로 암호화에 대해 활성화된 경우, 소스 스냅샷이 암호화되지 않았더라도 사본은 항상 암호화됩니다. 사본은 항상 대상 리전에 대한 기본 KMS 키로 암호화됩니다.

2 기본 및 사용자 지정 정책의 경우
+ 대상 인스턴스 또는 볼륨이 삭제되는 경우 Amazon Data Lifecycle Manager는 보존 기간을 기준으로 마지막 스냅샷까지 계속 삭제합니다. 단, 마지막 스냅샷은 삭제하지 않습니다. 기본 정책의 경우 마지막 스냅샷을 포함하도록 삭제를 확장할 수 있습니다.
+ 정책이 삭제되거나 오류 또는 비활성 상태가 되면 Amazon Data Lifecycle Manager는 스냅샷 삭제를 중지합니다. 기본 정책의 경우 마지막 스냅샷을 포함하여 스냅샷을 계속 삭제하도록 삭제를 확장할 수 있습니다.

## EBS 지원 AMI 정책 비교
<a name="ami-policy-diffs"></a>

다음 표는 EBS 지원 AMI의 기본 정책과 사용자 지정 EBS 지원 AMI 정책의 차이를 설명합니다.


| 기능 | EBS 지원 AMI에 대한 기본 정책 | 사용자 지정 EBS 지원 AMI 정책 | 
| --- | --- | --- | 
| 관리형 백업 리소스 | EBS-backed AMI | EBS-backed AMI | 
| 대상 리소스 유형 | 인스턴스 | 인스턴스 | 
| 리소스 대상 | 최근 AMI가 없는 리전의 모든 인스턴스를 대상으로 합니다. 제외 파라미터를 지정하여 특정 인스턴스를 제외할 수 있습니다. | 특정 태그가 있는 인스턴스만 대상으로 합니다. | 
| AMI 생성 전 인스턴스 재부팅 | 아니요 | 예 | 
| 제외 파라미터 | 예, 특정 태그가 있는 인스턴스를 제외할 수 있습니다. | 아니요 | 
| 여러 일정 지원 | 아니요 | 예, 정책당 최대 4개의 일정. | 
| AMI 생성 빈도 | 1\$17일마다. | cron 표현식을 사용한 일별, 주별, 월별, 연별 또는 사용자 지정 빈도 | 
| 지원되는 보존 유형 | 경과 시간 기준 보존만 | 경과 시간 기준 및 개수 기준 보존. | 
| AMI 보존 | 2\$114일. | 최대 1,000개의 AMI(개수 기준) 또는 최대 100년(경과 시간 기준). | 
| AMI 사용 중단 지원 | 아니요 | 예 | 
| 크로스 리전 복사 지원 | 예, 기본 설정 사용 시 1 | 예, 사용자 지정 설정 사용 시 | 
| 확장 삭제 지원 2 | 예 | 아니요 | 

1기본 정책의 경우
+ 크로스 리전 사본에는 태그를 복사할 수 없습니다.
+ 사본은 소스 AMI와 동일한 보존 기간을 사용합니다.
+ 사본은 소스 AMI와 동일한 암호화 상태를 갖습니다. 대상 리전이 기본적으로 암호화에 대해 활성화된 경우, 소스 AMI가 암호화되지 않았더라도 사본은 항상 암호화됩니다. 사본은 항상 대상 리전에 대한 기본 KMS 키로 암호화됩니다.

2 기본 및 사용자 지정 정책의 경우
+ 대상 인스턴스가 종료되는 경우 Amazon Data Lifecycle Manager는 보존 기간을 기준으로 마지막 AMI까지 계속 등록 취소합니다. 단, 마지막 스냅샷은 등록 취소하지 않습니다. 기본 정책의 경우 마지막 AMI를 포함하도록 등록 취소를 확장할 수 있습니다.
+ 정책이 삭제되거나 오류 또는 비활성 상태가 되면 Amazon Data Lifecycle Manager는 AMI 등록 취소를 중지합니다. 기본 정책의 경우 마지막 AMI를 포함하여 AMI를 계속 등록 취소하도록 등록 취소를 확장할 수 있습니다.

# Amazon Data Lifecycle Manager 기본 정책 생성
<a name="default-policies"></a>

인스턴스에서 주기적 EBS 지원 AMI를 생성하려면 EBS 지원 AMI에 기본 정책을 사용합니다. 연결 상태에 관계없이 모든 볼륨의 스냅샷을 생성하거나 특정 볼륨을 제외하려면 EBS 스냅샷에 기본 정책을 사용합니다.

이 섹션에서는 기본 정책을 생성하는 방법을 설명합니다.

**Topics**
+ [기본 정책 고려 사항](#default-policy-considerations)
+ [Amazon EBS 스냅샷에 대한 기본 정책 생성](#default-snapshot-policy)
+ [EBS 지원 AMI에 대한 기본 정책 생성](#default-ami-policy)
+ [여러 계정 및 리전에서 기본 정책 활성화](dlm-stacksets.md)

## 기본 정책 고려 사항
<a name="default-policy-considerations"></a>

기본 정책 작업 시 다음 사항에 유의하세요.
+ 기본 정책은 최근 백업(스냅샷 또는 AMI)이 있는 대상 리소스(인스턴스 또는 볼륨)를 백업하지 않습니다. 생성 빈도에 따라 백업할 리소스가 결정됩니다. 볼륨 또는 인스턴스는 마지막 스냅샷 또는 AMI가 정책의 생성 빈도보다 오래된 경우에만 백업됩니다. 예를 들어, 생성 빈도를 3일로 지정하는 경우 EBS 스냅샷의 기본 정책은 마지막 스냅샷이 3일보다 오래된 경우에만 볼륨의 스냅샷을 생성합니다.
+ 기본적으로 기본 정책은 제외 파라미터가 지정되지 않은 한 해당 리전의 모든 인스턴스 또는 볼륨을 대상으로 합니다.
+ 기본 정책은 최소한의 고유한 스냅샷 세트를 생성합니다. 예를 들어, EBS 지원 AMI 정책과 EBS 스냅샷 정책을 활성화하는 경우 스냅샷 정책은 EBS 지원 AMI 정책에 의해 이미 백업된 볼륨의 스냅샷을 복제하지 않습니다.
+ 기본 정책은 최소 24시간 이상 경과된 리소스만 대상으로 하기 시작합니다.
+ 볼륨을 삭제하거나 기본 정책의 대상이 되는 인스턴스를 종료하면 Amazon Data Lifecycle Manager는 보존 기간에 따라 마지막 백업까지 이전에 생성된 백업(스냅샷 또는 AMI)을 계속 삭제합니다. 단, 마지막 백업은 삭제하지 않습니다. 이 백업이 필요하지 않은 경우 수동으로 삭제해야 합니다.

  Amazon Data Lifecycle Manager가 마지막 백업을 삭제하도록 하려면 **삭제 확장을 활성화하면 됩니다.
+ 기본 정책이 삭제되거나 오류 또는 비활성 상태가 되면 Amazon Data Lifecycle Manager는 이전에 생성된 백업(스냅샷 또는 AMI) 삭제를 중지합니다. Amazon Data Lifecycle Manager가 마지막 백업을 포함하여 백업을 계속 삭제하도록 하려면 정책을 삭제하기 전 또는 정책 상태가 비활성 또는 삭제됨으로 변경되기 전에 **삭제 확장을 활성화해야 합니다.
+ 기본 정책을 생성하고 활성화하면 Amazon Data Lifecycle Manager는 4시간 기간에 대상 리소스를 무작위로 할당합니다. 대상 리소스는 지정된 생성 빈도로 할당된 기간 동안 백업됩니다. 예를 들어, 정책의 생성 빈도가 3일이고 대상 리소스가 12:00\$116:00 기간에 할당된 경우 해당 리소스는 3일마다 12:00\$116:00에 백업됩니다.

## Amazon EBS 스냅샷에 대한 기본 정책 생성
<a name="default-snapshot-policy"></a>

다음 절차는 EBS 스냅샷에 대한 기본 정책을 생성하는 방법을 보여줍니다.

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

**EBS 스냅샷에 대한 기본 정책 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 패널에서 **Lifecycle Manager**를 선택한 다음 **수명 주기 정책 생성**을 선택합니다.

1. **정책 유형**에서 **기본 정책**을 선택한 다음 **EBS 스냅샷 정책**을 선택합니다.

1. **설명(Description)**에 정책에 대한 간략한 설명을 입력합니다.

1. **IAM 역할**에서 스냅샷을 관리할 수 있는 권한이 있는 IAM 역할을 선택합니다.

   **기본값**을 선택하여 Amazon Data Lifecycle Manager가 제공하는 기본 IAM 역할을 사용하는 것이 좋습니다. 그러나 이전에 생성된 사용자 지정 IAM 역할을 사용할 수도 있습니다.

1. **생성 빈도**에 정책을 실행하고 볼륨의 스냅샷을 생성할 빈도를 지정합니다.

   지정하는 빈도에 따라 백업할 볼륨도 결정됩니다. 정책은 지정된 빈도 내에서 다른 방법으로 백업되지 않은 볼륨만 백업합니다. 예를 들어, 생성 빈도를 3일로 지정하는 경우 정책은 최근 3일 이내에 백업되지 않은 볼륨의 스냅샷만 생성합니다.

1. **보존 기간**에 정책에서 생성한 스냅샷을 정책에 유지할 기간을 지정합니다. 스냅샷이 보존 임곗값에 도달하면 자동으로 삭제됩니다. 보존 기간은 생성 빈도보다 크거나 같아야 합니다.

1. (*선택 사항*) 예약된 백업에서 특정 볼륨을 제외하도록 **제외 파라미터**를 구성합니다. 제외된 볼륨은 정책이 실행될 때 백업되지 않습니다.

   1. 부트 볼륨을 제외하려면 **부트 볼륨 제외**를 선택합니다. 부트 볼륨을 제외하면 정책에 의해 부트 볼륨이 아닌 데이터 볼륨만 백업됩니다. 즉, 인스턴스에 부트 볼륨으로 연결된 볼륨의 스냅샷은 생성되지 않습니다.

   1. 특정 볼륨 유형을 제외하려면 **특정 볼륨 유형 제외**를 선택한 다음 제외할 볼륨 유형을 선택합니다. 나머지 유형의 볼륨만 정책에 의해 백업됩니다.

   1. 특정 태그가 있는 볼륨을 제외하려면 **태그 추가**를 선택한 다음 태그 키와 값을 지정합니다. 이 정책은 지정된 태그가 있는 볼륨의 스냅샷을 생성하지 않습니다.

1. (*선택 사항*) **고급 설정**에서 정책이 수행해야 하는 추가 작업을 지정합니다.

   1. 할당된 태그를 소스 볼륨에서 스냅샷으로 복사하려면 **볼륨에서 태그 복사**를 선택합니다.

   1. **삭제 확장**이 비활성화된 상태에서
      + 소스 볼륨이 삭제되는 경우 Amazon Data Lifecycle Manager는 보존 기간을 기준으로 이전에 생성된 스냅샷을 마지막 스냅샷까지 계속 삭제합니다. 단, 마지막 스냅샷은 삭제하지 않습니다. Amazon Data Lifecycle Manager가 마지막 스냅샷을 포함하여 모든 스냅샷을 삭제하도록 하려면 **삭제 확장**을 선택합니다.
      + 정책이 삭제되거나 `error` 또는 `disabled` 상태가 되면 Amazon Data Lifecycle Manager는 스냅샷 삭제를 중지합니다. Amazon Data Lifecycle Manager가 마지막 스냅샷을 포함하여 스냅샷을 계속 삭제하도록 하려면 **삭제 확장**을 선택합니다.
**참고**  
삭제 확장을 활성화하면 위에서 설명한 두 동작이 모두 동시에 재정의됩니다.

   1. 정책에 의해 생성된 스냅샷을 다른 리전에 복사하려면 **크로스 리전 사본 생성**을 선택한 다음 최대 3개의 대상 리전을 선택합니다.
      + 소스 스냅샷이 암호화되거나 대상 리전에 암호화가 기본적으로 활성화되는 경우 복사된 스냅샷이 대상 리전의 EBS 암호화를 위한 기본 KMS 키를 사용하여 암호화됩니다.
      + 소스 스냅샷이 암호화되지 않고 대상 리전에 암호화가 기본적으로 비활성화되는 경우 복사된 스냅샷이 암호화되지 않습니다.

1. (**선택 사항) 정책에 태그를 추가하려면 **태그 추가**를 선택하고 태그 키와 값 페어를 지정합니다.

1. **기본 정책 생성**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRole already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

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

**EBS 스냅샷에 대한 기본 정책 생성**  
[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용합니다. 사용 사례 또는 기본 설정에 따라 두 가지 방법 중 하나로 요청 파라미터를 지정할 수 있습니다.
+ **방법 1**

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED | DISABLED \
  --description "policy_description" \
  --execution-role-arn role_arn \
  --default-policy VOLUME \
  --create-interval creation_frequency_in_days (1-7) \
  --retain-interval retention_period_in_days (2-14) \
  --copy-tags | --no-copy-tags \
  --extend-deletion | --no-extend-deletion \
  --cross-region-copy-targets TargetRegion=destination_region_code \
  --exclusions ExcludeBootVolumes=true | false, ExcludeTags=[{Key=tag_key,Value=tag_value}], ExcludeVolumeTypes="standard | gp2 | gp3 | io1 | io2 | st1 | sc1"
  ```

  예를 들어, 리전의 모든 볼륨을 대상으로 하고, 기본 IAM 역할을 사용하고, 매일 실행되고(기본값), 스냅샷을 7일간 유지(기본값)하는 EBS 스냅샷에 대한 기본 정책을 생성하려면 다음 파라미터를 지정해야 합니다.

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED \
  --description "Daily default snapshot policy" \
  --execution-role-arn arn:aws:iam::account_id:role/AWSDataLifecycleManagerDefaultRole \
  --default-policy VOLUME
  ```
+ **방법 2**

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED | DISABLED \
  --description "policy_description" \
  --execution-role-arn role_arn \
  --default-policy VOLUME \
  --policy-details file://policyDetails.json
  ```

  여기에서 `policyDetails.json`은 다음을 포함합니다.

  ```
  {
      "PolicyLanguage": "SIMPLIFIED",
      "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
      "ResourceType": "VOLUME",
      "CopyTags": true | false,
      "CreateInterval": creation_frequency_in_days (1-7),
      "RetainInterval": retention_period_in_days (2-14),
      "ExtendDeletion": true | false, 
      "CrossRegionCopyTargets": [{"TargetRegion":"destination_region_code"}],
      "Exclusions": {
          "ExcludeBootVolume": true | false,
  		"ExcludeVolumeTypes": ["standard | gp2 | gp3 | io1 | io2 | st1 | sc1"],
          "ExcludeTags": [{ 
              "Key": "exclusion_tag_key",
              "Value": "exclusion_tag_value"
          }]
      }
  }
  ```

------

## EBS 지원 AMI에 대한 기본 정책 생성
<a name="default-ami-policy"></a>

다음 절차는 EBS 지원 AMI에 대한 기본 정책을 생성하는 방법을 보여줍니다.

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

**EBS 지원 AMI에 대한 기본 정책 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 패널에서 **Lifecycle Manager**를 선택한 다음 **수명 주기 정책 생성**을 선택합니다.

1. **정책 유형**에서 **기본 정책**을 선택하고 **EBS 지원 AMI 정책**을 선택합니다.

1. **설명(Description)**에 정책에 대한 간략한 설명을 입력합니다.

1. **IAM 역할**에서 AMI를 관리할 수 있는 권한이 있는 IAM 역할을 선택합니다.

   **기본값**을 선택하여 Amazon Data Lifecycle Manager가 제공하는 기본 IAM 역할을 사용하는 것이 좋습니다. 그러나 이전에 생성된 사용자 지정 IAM 역할을 사용할 수도 있습니다.

1. **생성 빈도**에 정책을 실행하고 인스턴스에서 AMI를 생성할 빈도를 지정합니다.

   지정하는 빈도에 따라 백업할 인스턴스도 결정됩니다. 정책은 지정된 빈도 내에서 다른 방법으로 백업되지 않은 인스턴스만 백업합니다. 예를 들어, 생성 빈도를 3일로 지정하는 경우 정책은 최근 3일 이내에 백업되지 않은 인스턴스의 AMI만 생성합니다.

1. **보존 기간**에 정책에서 생성한 AMI를 정책에 유지할 기간을 지정합니다. AMI가 보존 임곗값에 도달하면 자동으로 등록 취소되고 연결된 스냅샷이 삭제됩니다. 보존 기간은 생성 빈도보다 크거나 같아야 합니다.

1. (*선택 사항*) 예약된 백업에서 특정 인스턴스를 제외하도록 **제외 파라미터**를 구성합니다. 제외된 인스턴스는 정책이 실행될 때 백업되지 않습니다.

   1. 특정 태그가 있는 인스턴스를 제외하려면 **태그 추가**를 선택한 다음 태그 키와 값을 지정합니다. 이 정책은 지정된 태그가 있는 인스턴스에서 AMI를 생성하지 않습니다.

1. (*선택 사항*) **고급 설정**에서 정책이 수행해야 하는 추가 작업을 지정합니다.

   1. 소스 인스턴스에서 해당 AMI로 할당된 태그를 복사하려면 **인스턴스에서 태그 복사**를 선택합니다.

   1. **삭제 확장**이 비활성화된 상태에서
      + 소스 인스턴스가 종료되는 경우 Amazon Data Lifecycle Manager는 보존 기간을 기준으로 이전에 생성된 AMI를 마지막 AMI까지 계속 등록 취소합니다. 단, 마지막 AMI는 등록 취소하지 않습니다. Amazon Data Lifecycle Manager가 마지막 AMI를 포함한 모든 AMI를 등록 취소하도록 하려면 **삭제 확장**을 선택합니다.
      + 정책이 삭제되거나 `error` 또는 `disabled` 상태가 되면 Amazon Data Lifecycle Manager는 AMI 등록 취소를 중지합니다. Amazon Data Lifecycle Manager가 마지막 AMI를 포함하여 계속해서 AMI를 등록 취소하도록 하려면 **삭제 확장**을 선택합니다.
**참고**  
확장 삭제를 활성화하면 위에서 설명한 두 동작이 모두 동시에 재정의됩니다.

   1. 정책에 의해 생성된 AMI를 다른 리전에 복사하려면 **크로스 리전 사본 생성**을 선택한 다음 최대 3개의 대상 리전을 선택합니다.
      + 소스 AMI가 암호화되거나 대상 리전에 암호화가 기본적으로 활성화되는 경우 복사된 AMI가 대상 리전의 EBS 암호화를 위한 기본 KMS 키를 사용하여 암호화됩니다.
      + 소스 AMI가 암호화되지 않고 대상 리전에 암호화가 기본적으로 비활성화되는 경우 복사된 AMI가 암호화되지 않습니다.

1. (**선택 사항) 정책에 태그를 추가하려면 **태그 추가**를 선택하고 태그 키와 값 페어를 지정합니다.

1. **기본 정책 생성**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRoleForAMIManagement already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

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

**EBS 지원 AMI에 대한 기본 정책 생성**  
[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용합니다. 사용 사례 또는 기본 설정에 따라 두 가지 방법 중 하나로 요청 파라미터를 지정할 수 있습니다.
+ **방법 1**

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED | DISABLED \
  --description "policy_description" \
  --execution-role-arn role_arn \
  --default-policy INSTANCE \
  --create-interval creation_frequency_in_days (1-7) \
  --retain-interval retention_period_in_days (2-14) \
  --copy-tags | --no-copy-tags \
  --extend-deletion | --no-extend-deletion \
  --cross-region-copy-targets TargetRegion=destination_region_code \
  --exclusions ExcludeTags=[{Key=tag_key,Value=tag_value}]
  ```

  예를 들어, 리전의 모든 인스턴스를 대상으로 하고, 기본 IAM 역할을 사용하고, 매일 실행되고(기본값), AMI를 7일간 유지(기본값)하는 EBS 지원 AMI에 대한 기본 정책을 생성하려면 다음 파라미터를 지정해야 합니다.

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED \
  --description "Daily default AMI policy" \
  --execution-role-arn arn:aws:iam::account_id:role/AWSDataLifecycleManagerDefaultRoleForAMIManagement \
  --default-policy INSTANCE
  ```
+ **방법 2**

  ```
  $ aws dlm create-lifecycle-policy \
  --state ENABLED | DISABLED \
  --description "policy_description" \
  --execution-role-arn role_arn \
  --default-policy INSTANCE \
  --policy-details file://policyDetails.json
  ```

  여기에서 `policyDetails.json`은 다음을 포함합니다.

  ```
  {
      "PolicyLanguage": "SIMPLIFIED",
      "PolicyType": "IMAGE_MANAGEMENT",
      "ResourceType": "INSTANCE",
      "CopyTags": true | false,
      "CreateInterval": creation_frequency_in_days (1-7),
      "RetainInterval": retention_period_in_days (2-14),
      "ExtendDeletion": true | false, 
  	"CrossRegionCopyTargets": [{"TargetRegion":"destination_region_code"}],
      "Exclusions": {
          "ExcludeTags": [{ 
              "Key": "exclusion_tag_key",
              "Value": "exclusion_tag_value"
          }]
      }
  }
  ```

------

# 여러 계정 및 리전에서 Data Lifecycle Manager 기본 정책 활성화
<a name="dlm-stacksets"></a>

 CloudFormation StackSets를 사용하면 단일 작업으로 여러 계정 및 AWS 리전에서 Amazon Data Lifecycle Manager 기본 정책을 활성화할 수 있습니다.

스택 세트를 사용하여 다음 방법 중 하나로 기본 정책을 활성화할 수 있습니다.
+ ** AWS 조직 전체** - 조직의 전체 AWS 조직 또는 특정 조직 단위에서 기본 정책이 일관되게 활성화되고 구성되도록 합니다. 이는 *서비스 관리형 권한을* 사용하여 수행됩니다. CloudFormation StackSets는 사용자를 대신하여 필요한 IAM 역할을 생성합니다.
+ **특정 AWS 계정 간** - 특정 대상 계정에서 기본 정책이 일관되게 활성화 및 구성되어 있는지 확인합니다. 여기에는 *자체 관리형 권한*이 필요합니다. 스택 세트 관리자 계정과 대상 계정 간의 신뢰 관계를 설정하는 데 필요한 IAM 역할을 생성합니다.

자세한 내용은 *AWS CloudFormation 사용 설명서*의 [스택 세트에 대한 권한 모델](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stacksets-concepts-stackset-permission-models)을 참조하세요.

다음 절차를 사용하여 전체 AWS 조직, 특정 OUs 또는 특정 대상 계정에서 Amazon Data Lifecycle Manager 기본 정책을 활성화합니다.

**사전 조건**

기본 정책을 활성화하는 방법에 따라 다음 중 하나를 수행합니다.
+ ( AWS 조직 전체) [ 조직의 모든 기능을 활성화](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)하고 [를 사용하여 신뢰할 수 있는 액세스를 활성화 AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-activate-trusted-access.html)해야 합니다. 또한 조직의 관리 계정 또는 [위임된 관리자 계정](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html)을 사용해야 합니다.
+ (특정 대상 계정) 스택 세트 관리자 계정과 대상 계정 간에 신뢰할 수 있는 관계를 설정하는 데 필요한 역할을 생성하여 [자체 관리형 권한을 부여](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html)해야 합니다.

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

**AWS 조직 또는 특정 대상 계정에서 기본 정책을 활성화하려면**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

1. 탐색 창에서 **StackSets**를 선택한 다음 **StackSet 생성**을 선택합니다.

1. **권한**에서 기본 정책을 활성화하는 방법에 따라 다음 중 하나를 수행합니다.
   + ( AWS 조직 전체) **서비스 관리형 권한을** 선택합니다.
   + (특정 대상 계정) **셀프 서비스 권한**을 선택합니다. 그런 다음 **IAM 관리자 역할 ARN**에서 관리자 계정에 대해 생성한 IAM 서비스 역할을 선택하고 **IAM 실행 역할 이름**에서 대상 계정에서 생성한 IAM 서비스 역할의 이름을 입력합니다.

1. **템플릿 준비**에서 **샘플 템플릿 사용**을 선택합니다.

1. **샘플 템플릿**에서 다음 중 하나를 수행합니다.
   + (EBS 스냅샷에 대한 기본 정책) **EBS 스냅샷에 대한 Amazon Data Lifecycle Manager 기본 정책 생성**을 선택합니다.
   + (EBS 지원 AMI에 대한 기본 정책) **EBS 지원 AMI에 대한 Amazon Data Lifecycle Manager 기본 정책 생성**을 선택합니다.

1. **다음**을 선택합니다.

1. **StackSet 이름** 및 **StackSet 설명**에 서술식 이름과 간단한 설명을 입력합니다.

1. **파라미터** 섹션에서 필요에 따라 기본 정책 설정을 구성합니다.
**참고**  
중요한 워크로드의 경우 **CreateInterval = 1일**, **RetainInterval = 7일 **을 사용하는 것이 좋습니다.

1. **다음**을 선택합니다.

1. (선택 사항) **태그**에서 StackSet 및 스택 리소스를 식별하는 데 도움이 되는 태그를 지정합니다.

1. **관리형 실행**에서 **활성**을 선택합니다.

1. **다음**을 선택합니다.

1. **Add stacks to stack set**(스택 세트에 스택 추가)에서 **Deploy new stacks**(새 스택 배포)를 선택합니다.

1. 기본 정책을 활성화하는 방법에 따라 다음 중 하나를 수행합니다.
   + ( AWS 조직 전체) **배포 대상**에서 다음 옵션 중 하나를 선택합니다.
     + 전체 AWS 조직에 배포하려면 **조직에 배포를** 선택합니다.
     + 특정 조직 단위(OU)에 배포하려면 **조직 단위에 배포**를 선택한 다음 **OU ID**에 OU ID를 입력합니다. OU를 추가하려면 **다른 OU 추가**를 선택합니다.
   + (특정 대상 계정) **계정**에서 다음 중 하나를 수행합니다.
     + 특정 대상 계정에 배포하려면 **계정에 스택 배포**를 선택한 다음 **계정 번호**에 대상 계정의 IDs를 입력합니다.
     + 특정 OU의 모든 계정에 배포하려면 **조직 단위의 모든 계정에 스택 배포**를 선택한 다음 **조직 번호**에 대상 OU의 ID를 입력합니다.

1. **자동 배포**에서 **활성화됨**을 선택합니다.

1. **계정 제거 동작**에서 **스택 보관**을 선택합니다.

1. **리전 지정**에서 기본 정책을 활성화할 특정 리전을 선택하거나 **모든 리전 추가**를 선택하여 모든 리전에서 기본 정책을 활성화합니다.

1. **다음**을 선택합니다.

1. 스택 세트 설정을 검토하고이 **IAM 리소스를 생성할 CloudFormation 수 있음을 승인합니다**를 선택한 다음 **제출**을 선택합니다.

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

**AWS 조직 전체에서 기본 정책을 활성화하려면**

1. 스택 세트를 생성합니다. [create-stack-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 명령을 사용합니다.

   `--permission-model`에서 `SERVICE_MANAGED`를 지정합니다.

   `--template-url`에 다음 템플릿 URL 중 하나를 지정합니다.
   + (EBS 지원 AMI에 대한 기본 정책) `https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/DataLifecycleManagerAMIDefaultPolicy.yaml`
   + (EBS 스냅샷에 대한 기본 정책) `https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/DataLifecycleManagerEBSSnapshotDefaultPolicy.yaml`

   `--parameters`에 기본 정책의 설정을 지정합니다. 지원되는 파라미터, 파라미터 설명 및 유효한 값의 경우 URL을 사용하여 템플릿을 다운로드한 다음 텍스트 편집기를 사용하여 템플릿을 봅니다.

   `--auto-deployment`에서 `Enabled=true, RetainStacksOnAccountRemoval=true`를 지정합니다.

   ```
   $ aws cloudformation create-stack-set \
   --stack-set-name stackset_name \
   --permission-model SERVICE_MANAGED \
   --template-url template_url \
   --parameters "ParameterKey=param_name_1,ParameterValue=param_value_1" "ParameterKey=param_name_2,ParameterValue=param_value_2" \
   --auto-deployment "Enabled=true, RetainStacksOnAccountRemoval=true"
   ```

1. 스택 세트를 배포합니다. [create-stack-instances](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 명령을 사용합니다.

   `--stack-set-name`에 이전 단계에서 생성한 스택 세트의 이름을 지정합니다.

   `--deployment-targets OrganizationalUnitIds`에서 전체 조직에 배포할 루트 OU의 ID 또는 조직의 특정 OU에 배포할 OU ID를 지정합니다.

   에서 기본 정책을 활성화할 AWS 리전을 `--regions`지정합니다.

   ```
   $ aws cloudformation create-stack-instances \
   --stack-set-name stackset_name \
   --deployment-targets OrganizationalUnitIds='["root_ou_id"]' | '["ou_id_1", "ou_id_2]' \
   --regions '["region_1", "region_2"]'
   ```

**특정 대상 계정에서 기본 정책을 활성화하려면**

1. 스택 세트를 생성합니다. [create-stack-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 명령을 사용합니다.

   `--template-url`에 다음 템플릿 URL 중 하나를 지정합니다.
   + (EBS 지원 AMI에 대한 기본 정책) `https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/DataLifecycleManagerAMIDefaultPolicy.yaml`
   + (EBS 스냅샷에 대한 기본 정책) `https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/DataLifecycleManagerEBSSnapshotDefaultPolicy.yaml`

   `--administration-role-arn`에서 이전에 스택 세트 관리자를 위해 생성한 IAM 서비스 역할의 ARN을 지정합니다.

   `--execution-role-name`에 대상 계정에서 생성한 IAM 서비스 역할의 이름을 지정합니다.

   `--parameters`에 기본 정책의 설정을 지정합니다. 지원되는 파라미터, 파라미터 설명 및 유효한 값의 경우 URL을 사용하여 템플릿을 다운로드한 다음 텍스트 편집기를 사용하여 템플릿을 봅니다.

   `--auto-deployment`에서 `Enabled=true, RetainStacksOnAccountRemoval=true`를 지정합니다.

   ```
   $ aws cloudformation create-stack-set \
   --stack-set-name stackset_name \
   --template-url template_url \
   --parameters "ParameterKey=param_name_1,ParameterValue=param_value_1" "ParameterKey=param_name_2,ParameterValue=param_value_2" \
   --administration-role-arn administrator_role_arn \
   --execution-role-name target_account_role \									
   --auto-deployment "Enabled=true, RetainStacksOnAccountRemoval=true"
   ```

1. 스택 세트를 배포합니다. [create-stack-instances](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 명령을 사용합니다.

   `--stack-set-name`에 이전 단계에서 생성한 스택 세트의 이름을 지정합니다.

   에서 대상 AWS 계정IDs를 `--accounts`지정합니다.

   에서 기본 정책을 활성화할 AWS 리전을 `--regions`지정합니다.

   ```
   $ aws cloudformation create-stack-instances \
   --stack-set-name stackset_name \
   --accounts '["account_ID_1","account_ID_2"]' \
   --regions '["region_1", "region_2"]'
   ```

------

# EBS 스냅샷에 대한 Amazon Data Lifecycle Manager 사용자 지정 정책 생성
<a name="snapshot-ami-policy"></a>

다음 절차에서는 Amazon Data Lifecycle Manager를 사용하여 Amazon EBS 스냅샷 수명 주기를 자동화하는 방법을 보여줍니다.

**Topics**
+ [스냅샷 수명 주기 정책 생성](#create-snap-policy)
+ [스냅샷 수명 주기 정책 고려 사항](#snapshot-considerations)
+ [추가 리소스](#snapshot-additional-resources)
+ [애플리케이션에 일관되게 적용되는 스냅샷 자동화](automate-app-consistent-backups.md)
+ [사전 및 사후 스크립트의 기타 사용 사례](script-other-use-cases.md)
+ [사전 및 사후 스크립트 작동 방식](script-flow.md)
+ [사전 및 사후 스크립트로 생성된 스냅샷 식별](dlm-script-tags.md)
+ [사전 및 사후 스크립트 모니터링](dlm-script-monitoring.md)

## 스냅샷 수명 주기 정책 생성
<a name="create-snap-policy"></a>

다음 절차 중 하나를 사용하여 스냅샷 또는 수명 주기 정책을 생성합니다.

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

**스냅샷 정책을 생성하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Elastic Block Store**, **Lifecycle Manager** 및 **수명 주기 정책 생성**을 차례로 선택합니다.

1. **정책 유형 선택(Select policy type)** 화면에서 **EBS 스냅샷 정책(EBS snapshot policy)**을 선택한 후 **다음(Next)**을 선택합니다.

1. **대상 리소스(Target resources)** 섹션에서 다음을 수행합니다.

   1. **대상 리소스 유형(Target resource types)**에서 백업할 리소스의 유형을 선택합니다. `Volume`을 선택하여 개별 볼륨의 스냅샷을 생성하거나 `Instance`를 선택하여 인스턴스에 연결된 볼륨에서 다중 볼륨 스냅샷을 생성합니다.

   1. (*Outpost 및 로컬 영역 고객에만 해당*) 대상 리소스의 위치를 지정합니다.

      **대상 리소스 위치**에서 대상 리소스의 위치를 지정합니다.
      + 리전의 리소스를 대상으로 지정하려면 **AWS 리전**을 선택합니다. Amazon Data Lifecycle Manager는 현재 리전에 있고 대상 태그가 일치하는 지정된 유형의 모든 리소스만 백업합니다. 스냅샷은 동일한 리전에 생성됩니다.
      + 로컬 영역의 리소스를 대상으로 지정하려면 **AWS 로컬 영역**을 선택합니다. Amazon Data Lifecycle Manager는 현재 리전의 모든 로컬 영역에서 대상 태그가 일치하는 지정된 유형의 모든 리소스만 백업합니다. 스냅샷은 소스 리소스와 동일한 로컬 영역 또는 상위 리전에 생성될 수 있습니다.
      + Outpost의 리소스를 대상으로 지정하려면 **AWS Outpost**를 선택합니다. Amazon Data Lifecycle Manager는 계정의 모든 Outposts에서 대상 태그가 일치하는 지정된 유형의 모든 리소스를 백업합니다. 스냅샷은 소스 리소스와 동일한 Outpost 또는 상위 리전에 생성될 수 있습니다.

   1. **대상 리소스 태그(Target resource tags)**에서 백업할 볼륨 또는 인스턴스를 식별하는 리소스 태그를 선택합니다. 지정된 태그 키 및 값 쌍이 있는 리소스만 정책에 의해 백업됩니다.

1. **설명(Description)**에 정책에 대한 간략한 설명을 입력합니다.

1. **IAM 역할(IAM role)**에서 스냅샷을 관리하고 볼륨 및 인스턴스를 설명할 권한이 있는 IAM 역할을 선택합니다. Amazon Data Lifecycle Manager가 제공하는 기본 역할을 사용하려면 [**기본 역할(Default role)**]을 선택합니다. 또는 이전에 생성한 사용자 지정 IAM 역할을 사용하려면 **다른 역할 선택(Choose another role)**을 선택하고 사용할 역할을 선택합니다.

1. **정책 태그(Policy tags)**에서 수명 주기 정책에 적용할 태그를 추가합니다. 이 태그를 사용하여 정책을 식별 및 분류할 수 있습니다.

1. **Policy status after creation**(생성 후 정책 상태) - **Enable policy**(정책 활성화)를 선택하여 다음 예약 시간에 정책 실행을 시작하거나, **Disable policy**(정책 비활성화)를 선택하여 정책을 실행하지 않습니다. 지금 정책을 활성화하지 않으면 생성 후 수동으로 활성화할 때까지 스냅샷 생성이 시작되지 않습니다.

1. (*인스턴스만 대상으로 하는 정책*) 다중 볼륨 스냅샷 세트에서 볼륨을 제외합니다.

   기본적으로 Amazon Data Lifecycle Manager는 대상 인스턴스에 연결된 모든 볼륨의 스냅샷을 생성합니다. 그러나 연결된 볼륨 중 일부에 대한 스냅샷을 생성하도록 선택할 수 있습니다. **Parameters**(파라미터) 섹션에서 다음을 수행합니다.
   + 대상 인스턴스에 연결된 루트 볼륨의 스냅샷을 생성하지 않으려면 **Exclude root volume**(루트 볼륨 제외)을 선택합니다. 이 옵션을 선택하면 대상 인스턴스에 연결된 데이터(루트 아님) 볼륨만 다중 볼륨 스냅샷 세트에 포함됩니다.
   + 대상 인스턴스에 연결된 데이터(루트 아님) 볼륨 중 일부에 대한 스냅샷을 생성하려면 **Exclude specific data volumes**(특정 데이터 볼륨 제외)를 선택한 다음 스냅샷을 생성하지 않아야 하는 데이터 볼륨을 식별하는 데 사용할 태그를 지정합니다. Amazon Data Lifecycle Manager는 지정된 태그가 있는 데이터 볼륨의 스냅샷을 생성하지 않습니다. Amazon Data Lifecycle Manager는 지정된 태그가 없는 데이터 볼륨의 스냅샷만 생성합니다.

1. [**다음(Next)**]을 선택합니다.

1. **일정 구성(Configure schedule)** 화면에서 정책 일정을 구성합니다. 정책에는 최대 4개의 일정을 구성할 수 있습니다. 일정 1은 필수입니다. 일정 2, 3, 4는 선택 사항입니다. 추가한 각 정책 일정에 대해 다음을 수행합니다.

   1. **일정 세부 정보(Schedule details)** 섹션에서 다음을 수행합니다.

      1. **일정 이름(Schedule name)**에 일정을 설명하는 이름을 지정합니다.

      1. **빈도(Frequency)** 및 관련 필드에서 정책 실행 간격을 구성합니다.

         매일, 매주, 매월 또는 매년 일정에 따라 정책 실행을 구성할 수 있습니다. 또는 **사용자 지정 cron 표현식(Custom cron expression)**을 선택하여 최대 1년의 간격을 지정합니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Cron 및 rate 표현식](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html)을 참조하세요.
**참고**  
일정에 대해 **스냅샷 아카이빙**을 활성화해야 하는 경우 **monthly**(월간) 또는 **yearly**(연간) 빈도를 선택하거나 생성 빈도가 28일 이상인 cron 표현식을 지정해야 합니다.  
특정 주의 특정 날짜(예: 매월 두 번째 목요일)에 스냅샷을 생성하는 월별 빈도를 지정하는 경우 개수 기반 일정의 경우 아카이브 계층의 보존 횟수는 4회 이상이어야 합니다.

      1. **시작 시간(Starting at)**에서 정책 실행의 시작을 예약할 시간을 지정합니다. 첫 번째 정책 실행은 예약된 시간 후 한 시간 이내에 시작됩니다. 이 시간은 `hh:mm` UTC 형식으로 입력해야 합니다.

      1. **보존 유형(Retention type)**에서 일정에 따라 생성되는 스냅샷의 보존 정책을 지정합니다.

         총 수 또는 수명을 기준으로 스냅샷을 보존할 수 있습니다.
         + 개수 기반 보존
           + 스냅샷 아카이브를 비활성화한 경우 범위는 `1`\$1`1000`입니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 영구적으로 삭제됩니다.
           + 스냅샷 아카이브가 활성화된 경우 범위는 `0`(생성 후 즉시 아카이브)\$1`1000`입니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 전체 스냅샷으로 변환되고 아카이브 계층으로 이동됩니다.
         + 경과 시간 기준 보존
           + 스냅샷 아카이브를 비활성화한 경우 범위는 `1`일\$1`100`년입니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 영구적으로 삭제됩니다.
           + 스냅샷 아카이브가 활성화된 경우 범위는 `0`일(생성 후 즉시 아카이브)\$1`100`년입니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 전체 스냅샷으로 변환되고 아카이브 계층으로 이동됩니다.
**참고**  
모든 일정은 보존 유형이 동일해야 합니다(기간 기반 또는 개수 기반). 일정 1에 대해서만 보존 유형을 지정할 수 있습니다. 일정 2, 3, 4는 일정 1에서 보존 유형을 상속합니다. 각 일정에는 고유한 보존 횟수 또는 기간이 있을 수 있습니다.
빠른 스냅샷 복원, 크로스 리전 복사 또는 스냅샷 공유를 활성화하는 경우 보존 횟수를 `1` 이상으로 지정하거나 보존 기간을 `1`일 이상으로 지정해야 합니다.

      1. (*AWS Outposts 및 로컬 영역 고객만 해당*) 스냅샷 대상을 지정합니다.

         **스냅샷 대상**에 정책에 따라 생성되는 스냅샷의 대상을 지정합니다.
         + 정책이 리전의 리소스를 대상으로 하는 경우 동일한 리전에서 스냅샷을 생성해야 합니다. AWS 리전이 자동으로 선택됩니다.
         + 정책의 대상이 로컬 영역의 리소스인 경우 소스 리소스와 동일한 로컬 영역 또는 상위 리전에 스냅샷을 생성할 수 있습니다.
         + 정책의 대상이 Outpost의 리소스인 경우 소스 리소스와 동일한 Outpost 또는 상위 리전에 스냅샷을 생성할 수 있습니다.

   1. 스냅샷에 대한 태깅을 구성합니다.

      **태깅(Tagging)** 섹션에서 다음을 수행합니다.

      1. 일정에 따라 소스 볼륨에서 사용자 정의 태그를 모두 스냅샷으로 복사하려면 **소스에서 태그 복사(Copy tags from source)**를 선택합니다.

      1. 이 일정에 따라 생성된 스냅샷에 할당할 추가 태그를 지정하려면 **태그 추가(Add tags)**를 선택합니다.

   1. 애플리케이션에 일관되게 적용되는 스냅샷을 위한 사전 및 사후 스크립트를 구성합니다.

      자세한 내용은 [Data Lifecycle Manager를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷 자동화](automate-app-consistent-backups.md) 단원을 참조하십시오.

   1. (*볼륨만 대상으로 하는 정책*) 스냅샷 아카이빙을 구성합니다.

      **스냅샷 아카이빙** 섹션에서 다음을 수행합니다.
**참고**  
정책에서 하나의 일정에 대해서만 스냅샷 아카이빙을 활성화할 수 있습니다.

      1. 일정에 대해 스냅샷 아카이빙을 활성화하려면 **Archive snapshots created by this schedule**(이 일정에 의해 생성된 스냅샷 아카이브)을 선택합니다.
**참고**  
스냅샷 생성 빈도가 월별 또는 연별인 경우 또는 생성 빈도가 28일 이상인 cron 표현식을 지정하는 경우에만 스냅샷 아카이빙을 활성화할 수 있습니다.

      1. 아카이브 계층의 스냅샷에 대한 보존 규칙을 지정합니다.
         + **개수 기반 일정**의 경우 아카이브 계층에 유지할 스냅샷 수를 지정합니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 아카이브 계층에서 영구적으로 삭제됩니다. 예를 들어, 3을 지정하면 일정은 아카이브 계층에 최대 3개의 스냅샷을 유지합니다. 네 번째 스냅샷이 아카이브되면 아카이브 계층에 있는 세 개의 기존 스냅샷 중 가장 오래된 것이 삭제됩니다.
         + **기간 기반 일정**의 경우 아카이브 계층에 스냅샷을 유지할 기간을 지정합니다. 보존 임계값에 도달하면 가장 오래된 스냅샷이 아카이브 계층에서 영구적으로 삭제됩니다. 예를 들어, 120일을 지정하면 해당 기간 경과 시 자동으로 아카이브 계층에서 스냅샷이 삭제됩니다.
**중요**  
아카이브된 스냅샷의 최소 보존 기간은 90일입니다. 스냅샷을 90일 이상 유지하는 보존 규칙을 지정해야 합니다.

   1. 빠른 스냅샷 복원을 활성화합니다.

      스케줄에 따라 생성된 스냅샷에 대해 빠른 스냅샷 복원을 활성화하려면 **빠른 스냅샷 복원(Fast snapshot restore)** 섹션에서 **빠른 스냅샷 복원 활성화(Enable fast snapshot restore)**를 선택합니다. 빠른 스냅샷 복원을 활성화하는 경우 이를 활성화할 가용 영역을 선택해야 합니다. 일정에서 수명 기준 보존 일정을 사용하는 경우 각 스냅샷에 대해 빠른 스냅샷 복원을 활성화할 기간을 지정해야 합니다. 일정에서 개수 기준 보존을 사용하는 경우 빠른 스냅샷 복원을 활성화할 최대 스냅샷 수를 지정해야 합니다.

      일정에서 Outpost에 스냅샷을 생성하는 경우 빠른 스냅샷 복원을 활성화할 수 없습니다. 빠른 스냅샷 복원은 Outpost에 저장된 로컬 스냅샷에서는 지원되지 않습니다.
**참고**  
특정 가용 영역의 스냅샷에 대해 빠른 스냅샷 복원이 활성화된 1분마다 요금이 청구됩니다. 요금은 최소 1시간으로 비례 청구됩니다.

   1. 크로스 리전 복사를 구성합니다.

      일정에 따라 생성된 스냅샷을 Outpost 또는 다른 리전에 복사하려면 **리전 간 복사** 섹션에서 **리전 간 복사 활성화**를 선택합니다.

      일정에서 리전에 스냅샷을 생성하는 경우 계정에 있는 최대 3개의 추가 리전 또는 Outposts에 스냅샷을 복사할 수 있습니다. 각 대상 리전 또는 Outpost에 대해 별도의 리전 간 복사 규칙을 지정해야 합니다.

      각 리전 또는 Outpost에 대해 다른 보존 정책을 선택하고 태그를 모두 복사할지 또는 복사하지 않을지 선택할 수 있습니다. 소스 스냅샷이 암호화되거나 암호화가 기본적으로 활성화된 경우 복사된 스냅샷이 암호화됩니다. 소스 스냅샷이 암호화 해제된 경우 암호화를 활성화할 수 있습니다. KMS 키를 지정하지 않은 경우 스냅샷은 각 대상 리전에서 EBS 암호화의 기본 KMS 키를 사용하여 암호화됩니다. 대상 리전에 대한 KMS 키를 지정하는 경우 선택한 IAM 역할에 KMS 키에 대한 액세스 권한이 있어야 합니다.
**참고**  
리전당 동시 스냅샷 복사본 수를 초과하지 않도록 해야 합니다.

       정책에서 Outpost에 스냅샷을 생성하는 경우 해당 스냅샷을 리전이나 다른 Outpost에 복사할 수 없으며 교차 리전 복사 설정을 사용할 수 없습니다.

   1. 크로스 계정 공유를 구성합니다.

      **교차 계정 공유**에서 일정에 의해 생성된 스냅샷을 다른 AWS 계정과 자동으로 공유하도록 정책을 구성합니다. 해결 방법:

      1. 다른 AWS 계정과의 공유를 활성화하려면 **교차 계정 공유 활성화를** 선택합니다.

      1. 스냅샷을 공유할 계정을 추가하려면 **계정 추가(Add account)**에 12자리 AWS 계정 ID를 입력하고 **추가(Add)**를 선택합니다.

      1. 일정 기간이 지난 후에 공유 스냅샷의 공유를 자동으로 해제하려면 **자동으로 공유 해제(Unshare automatically)**를 선택합니다. 공유 스냅샷의 공유를 자동으로 해제하도록 선택한 경우 스냅샷의 공유를 자동으로 해제하는 기간은 정책에서 해당 스냅샷을 보존하는 기간보다 길 수 없습니다. 예를 들어 정책의 보존 구성에서 5일 동안 스냅샷을 보존하는 경우 최대 4일 후에 공유 스냅샷의 공유를 자동으로 해제하도록 정책을 구성할 수 있습니다. 이는 수명 기반 및 개수 기반 스냅샷 보존 구성을 사용하는 정책에 적용됩니다.

         자동 공유 해제를 활성화하지 않으면 스냅샷이 삭제될 때까지 공유됩니다.
**참고**  
암호화되지 않았거나 고객 관리형 키를 사용하여 암호화된 스냅샷만 공유할 수 있습니다. 기본 EBS 암호화 KMS 키(으)로 암호화된 스냅샷은 공유할 수 없습니다. 암호화된 스냅샷을 공유하는 경우 소스 볼륨을 암호화하는 데 사용된 KMS 키도 대상 계정과 공유해야 합니다. 자세한 내용은 [AWS Key Management Service 개발자 안내서](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html)의 *다른 계정의 사용자가 CMK를 사용하도록 허용*을 참조하세요.

   1. 일정을 더 추가하려면 화면 상단에서 [**다른 일정 추가(Add another schedule)**]를 선택합니다. 각 추가 일정에 대해, 이 주제의 앞부분에서 설명한 대로 필드를 작성합니다.

   1. 필요한 일정을 추가한 후 [**정책 검토(Review policy)**]를 선택합니다.

1. 정책 요약을 검토한 다음 **정책 생성(Create policy)**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRole already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

------
#### [ Command line ]

[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용하여 스냅샷 수명 주기 정책을 생성합니다. `PolicyType`에 `EBS_SNAPSHOT_MANAGEMENT`을 지정합니다.

**참고**  
구문을 단순화하기 위해 다음 예에서는 정책 세부 정보가 포함된 JSON 파일(`policyDetails.json`)을 사용합니다.

**예제 1 - 2개의 일정이 포함된 스냅샷 수명 주기 정책**  
이 예제에서는 값이 `costcenter`인 `115` 태그 키가 있는 모든 볼륨의 스냅샷을 생성하는 스냅샷 수명 주기 정책을 만듭니다. 정책에는 2개의 일정이 포함되어 있습니다. 첫 번째 일정은 매일 03:00(UTC)에 스냅샷을 생성합니다. 두 번째 일정은 매주 금요일 17:00(UTC)에 주간 스냅샷을 생성합니다.

```
aws dlm create-lifecycle-policy \
    --description "My volume policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "ResourceTypes": [
        "VOLUME"
    ],
    "TargetTags": [{
        "Key": "costcenter",
        "Value": "115"
    }],
    "Schedules": [{
        "Name": "DailySnapshots",
        "TagsToAdd": [{
            "Key": "type",
            "Value": "myDailySnapshot"
        }],
        "CreateRule": {
            "Interval": 24,
            "IntervalUnit": "HOURS",
            "Times": [
                "03:00"
            ]
        },
        "RetainRule": {
            "Count": 5
        },
        "CopyTags": false
    },
    {
        "Name": "WeeklySnapshots",
        "TagsToAdd": [{
            "Key": "type",
            "Value": "myWeeklySnapshot"
        }],
        "CreateRule": {
            "CronExpression": "cron(0 17 ? * FRI *)"
        },
        "RetainRule": {
            "Count": 5
        },
        "CopyTags": false
    }
]}
```

요청이 성공하면 명령은 새로 생성된 정책의 ID를 반환합니다. 다음은 예제 출력입니다.

```
{
   "PolicyId": "policy-0123456789abcdef0"
}
```

**예 2 - 인스턴스를 대상으로 하고 데이터(루트 아님) 볼륨 중 일부에 대한 스냅샷을 생성하는 스냅샷 수명 주기 정책**  
이 예제에서는 `code=production` 태그가 지정된 인스턴스에서 다중 볼륨 스냅샷 세트를 생성하는 스냅샷 수명 주기 정책을 생성합니다. 정책에는 하나의 일정만 포함됩니다. 일정은 `code=temp`로 태그가 지정된 데이터 볼륨의 스냅샷을 생성하지 않습니다.

```
aws dlm create-lifecycle-policy \
    --description "My volume policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "ResourceTypes": [
        "INSTANCE"
    ],
    "TargetTags": [{
        "Key": "code",
        "Value": "production"
    }],
    "Parameters": {
        "ExcludeDataVolumeTags": [{
            "Key": "code",
            "Value": "temp"
        }]
    },
    "Schedules": [{
        "Name": "DailySnapshots",
        "TagsToAdd": [{
            "Key": "type",
            "Value": "myDailySnapshot"
        }],
        "CreateRule": {
            "Interval": 24,
            "IntervalUnit": "HOURS",
            "Times": [
                "03:00"
            ]
        },
        "RetainRule": {
            "Count": 5
        },
        "CopyTags": false
    }
]}
```

요청이 성공하면 명령은 새로 생성된 정책의 ID를 반환합니다. 다음은 예제 출력입니다.

```
{
   "PolicyId": "policy-0123456789abcdef0"
}
```

**예제 3 - Outpost 리소스의 로컬 스냅샷을 자동화하는 스냅샷 수명 주기 정책**  
이 예제에서는 모든 Outposts에서 `team=dev` 태그가 지정된 볼륨의 스냅샷을 생성하는 스냅샷 수명 주기 정책을 생성합니다. 이 정책은 소스 볼륨과 동일한 Outposts에 스냅샷을 생성합니다. 정책은 `12` UTC에 시작하여 `00:00`시간마다 스냅샷을 생성합니다.

```
aws dlm create-lifecycle-policy \
    --description "My local snapshot policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "ResourceTypes": "VOLUME",
	"ResourceLocations": "OUTPOST",
    "TargetTags": [{
        "Key": "team",
        "Value": "dev"
    }],
    "Schedules": [{
        "Name": "on-site backup",
        "CreateRule": {
            "Interval": 12,
            "IntervalUnit": "HOURS",
            "Times": [
                "00:00"
            ],
	"Location": [
		"OUTPOST_LOCAL"
	]
        },
        "RetainRule": {
            "Count": 1
        },
        "CopyTags": false
    }
]}
```

**예제 4 - 리전에서 스냅샷을 생성하고 이를 Outpost에 복사하는 스냅샷 수명 주기 정책**  
다음 예제 정책은 `team=dev` 태그가 지정된 볼륨의 스냅샷을 생성합니다. 스냅샷은 소스 볼륨과 동일한 리전에 생성됩니다. 스냅샷은 `12` UTC에 시작하여 `00:00`시간마다 생성되며, 최대 `1`개 스냅샷을 유지합니다. 또한 이 정책은 스냅샷을 Outpost `arn:aws:outposts:us-east-1:123456789012:outpost/op-1234567890abcdef0`에 복사하고, 기본 암호화 KMS 키를) 사용하여 복사된 스냅샷을 암호화하며, `1`개월 동안 복사본을 유지합니다.

```
aws dlm create-lifecycle-policy \
    --description "Copy snapshots to Outpost" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "ResourceTypes": "VOLUME",
    "ResourceLocations": "CLOUD",
    "TargetTags": [{
        "Key": "team",
        "Value": "dev"
    }],
    "Schedules": [{
        "Name": "on-site backup",
        "CopyTags": false,
        "CreateRule": {
            "Interval": 12,
            "IntervalUnit": "HOURS",
            "Times": [
                "00:00"
            ],
            "Location": "CLOUD"
        },
        "RetainRule": {
            "Count": 1
        },
        "CrossRegionCopyRules" : [
        {
            "Target": "arn:aws:outposts:us-east-1:123456789012:outpost/op-1234567890abcdef0",
            "Encrypted": true,
            "CopyTags": true,
            "RetainRule": {
                "Interval": 1,
                "IntervalUnit": "MONTHS"
            }
        }]
    }
]}
```

**예제 5 - 아카이브가 활성화된 기간 기반 일정이 포함된 스냅샷 수명 주기 정책**  
이 예제에서는 `Name=Prod`로 태그가 지정된 볼륨을 대상으로 하는 스냅샷 수명 주기 정책을 생성합니다. 정책에는 매월 1일 09:00에 스냅샷을 생성하는 기간 기반 일정이 하나 있습니다. 일정은 표준 계층의 각 스냅샷을 하루 동안 유지한 후 아카이브 계층으로 이동합니다. 스냅샷은 삭제되기 전에 90일 동안 아카이브 계층에 저장됩니다.

```
aws dlm create-lifecycle-policy \
    --description "Copy snapshots to Outpost" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "ResourceTypes": [ "VOLUME"],
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "Schedules" : [
      {
        "Name": "sched1",
        "TagsToAdd": [
          {"Key":"createdby","Value":"dlm"}
        ],
        "CreateRule": {
          "CronExpression": "cron(0 9 1 * ? *)"
        },
        "CopyTags": true,
        "RetainRule":{
          "Interval": 1,
          "IntervalUnit": "DAYS"
        },
        "ArchiveRule": {
            "RetainRule":{
              "RetentionArchiveTier": {
                 "Interval": 90,
                 "IntervalUnit": "DAYS"
              }
            }
        }
      }
    ],
    "TargetTags": [
      {
        "Key": "Name",
        "Value": "Prod"
      }
    ]
}
```

**예제 6 - 아카이브가 활성화된 개수 기반 일정이 포함된 스냅샷 수명 주기 정책**  
이 예제에서는 `Purpose=Test`로 태그가 지정된 볼륨을 대상으로 하는 스냅샷 수명 주기 정책을 생성합니다. 정책에는 매월 1일 09:00에 스냅샷을 생성하는 개수 기반 일정이 하나 있습니다. 일정은 생성 직후 스냅샷을 아카이브하고 아카이브 계층에 최대 3개의 스냅샷을 유지합니다.

```
aws dlm create-lifecycle-policy \
    --description "Copy snapshots to Outpost" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "ResourceTypes": [ "VOLUME"],
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "Schedules" : [
      {
        "Name": "sched1",
        "TagsToAdd": [
          {"Key":"createdby","Value":"dlm"}
        ],
        "CreateRule": {
          "CronExpression": "cron(0 9 1 * ? *)"
        },
        "CopyTags": true,
        "RetainRule":{
          "Count": 0
        },
        "ArchiveRule": {
            "RetainRule":{
              "RetentionArchiveTier": {
                 "Count": 3
              }
            }
        }
      }
    ],
    "TargetTags": [
      {
        "Key": "Purpose",
        "Value": "Test"
      }
    ]
}
```

------

## 스냅샷 수명 주기 정책 고려 사항
<a name="snapshot-considerations"></a>

다음은 스냅샷 수명 주기 정책에 적용되는 **일반적인 고려 사항**입니다.
+ 스냅샷 수명 주기 정책은 정책과 동일한 리전에 있는 인스턴스 또는 볼륨만 대상으로 합니다.
+ 지정된 시작 시간 후 1시간 내에 첫 번째 스냅샷 생성 작업이 시작됩니다. 후속 스냅샷 생성 작업은 예약된 시간으로부터 1시간 이내에 시작됩니다.
+ 볼륨 또는 인스턴스를 백업하도록 여러 정책을 생성할 수 있습니다. 볼륨에 12시간마다 스냅샷을 만드는 정책 *A*의 대상 태그인 태그 *A*와 24시간마다 스냅샷을 만드는 정책 *B*의 대상 태그인 태그 *B*, 이렇게 2개의 태그가 있다면 Amazon Data Lifecycle Manager는 양쪽 정책의 일정에 따라 스냅샷을 생성합니다. 여러 일정이 있는 단일 정책을 생성해도 동일한 결과를 얻을 수 있습니다. 예를 들어 태그 *A*만 대상으로 지정하는 단일 정책을 생성하고 12시간 간격과 24시간 간격의 2개 일정을 지정할 수 있습니다.
+ 대상 리소스 태그는 대소문자를 구분합니다.
+ 정책의 대상이 되는 리소스에서 대상 태그를 제거할 경우, Amazon Data Lifecycle Manager는 표준 티어와 아카이브 티어의 기존 스냅샷을 더 이상 관리하지 않습니다. 따라서 더 이상 필요하지 않은 경우 수동으로 스냅샷을 삭제해야 합니다.
+ 인스턴스를 대상으로 지정하는 정책을 생성하는 경우 정책이 생성된 후 새 볼륨이 대상 인스턴스에 연결되면 새로 추가된 볼륨은 다음 정책 실행 시 백업에 포함됩니다. 정책이 실행되면 인스턴스에 연결된 모든 볼륨이 포함됩니다.
+ 사용자 지정 cron 기반 예약이 있는 정책이 단일 스냅샷만 생성하도록 구성된 경우 이 정책은 보존 임계값에 도달할 때 스냅샷을 자동으로 삭제하지 않습니다. 더 이상 필요하지 않은 경우 스냅샷을 수동으로 삭제해야 합니다.
+ 보존 기간이 생성 빈도보다 짧은 경과 시간 기반 정책을 생성할 경우, Amazon Data Lifecycle Manager는 항상 다음 스냅샷이 생성될 때까지 마지막 스냅샷을 보존합니다. 예를 들어 경과 시간 기반 정책에서 보존 기간이 7일인 스냅샷을 매달 한 개씩 생성하는 경우, 보존 기간이 7일이더라도 Amazon Data Lifecycle Manager는 각 스냅샷을 한 달 동안 보존합니다.

**[스냅샷 아카이빙](snapshot-archive.md)**에는 다음 고려 사항이 적용됩니다.
+ 볼륨을 대상으로 하는 스냅샷 정책에 대해서만 스냅샷 아카이빙을 활성화할 수 있습니다.
+ 각 정책에 대해 하나의 일정에 대해서만 아카이빙 규칙을 지정할 수 있습니다.
+ 콘솔을 사용하는 경우 일정에 월별 또는 연별 생성 빈도가 있거나 일정에 생성 빈도가 28일 이상인 cron 표현식이 있는 경우에만 스냅샷 아카이빙을 활성화할 수 있습니다.

  , AWS CLI AWS API 또는 AWS SDK를 사용하는 경우 일정에 생성 빈도가 28일 이상인 cron 표현식이 있는 경우에만 스냅샷 아카이빙을 활성화할 수 있습니다.
+ 아카이브 계층의 최소 보존 기간은 90일입니다.
+ 스냅샷이 아카이브되면 아카이브 계층으로 이동할 때 전체 스냅샷으로 변환됩니다. 이로 인해 스냅샷 저장 비용이 증가할 수 있습니다. 자세한 내용은 [Amazon EBS 스냅샷 아카이빙 요금 및 결제](snapshot-archive-pricing.md) 단원을 참조하십시오.
+ 스냅샷이 아카이브되면 스냅샷에 대해 빠른 스냅샷 복원 및 스냅샷 공유가 비활성화됩니다.
+ 윤년의 경우 보존 규칙으로 인해 아카이브 보존 기간이 90일 미만인 경우 Amazon Data Lifecycle Manager는 스냅샷이 최소 90일 동안 유지되도록 합니다.
+ Amazon Data Lifecycle Manager에서 생성한 스냅샷을 수동으로 아카이브하고 일정의 보존 임계값에 도달해도 스냅샷이 계속 아카이브되는 경우 Amazon Data Lifecycle Manager는 더 이상 해당 스냅샷을 관리하지 않습니다. 그러나 일정의 보존 임계값에 도달하기 전에 스냅샷을 표준 계층으로 복원하는 경우 일정은 보존 규칙에 따라 스냅샷을 계속 관리합니다.
+ Amazon Data Lifecycle Manager에 의해 아카이브된 스냅샷을 표준 계층으로 영구적으로 또는 일시적으로 복원하고 일정의 보존 임계값에 도달했을 때 스냅샷이 여전히 표준 계층에 있는 경우 Amazon Data Lifecycle Manager는 더 이상 스냅샷을 관리하지 않습니다. 그러나 일정의 보존 임계값에 도달하기 전에 스냅샷을 다시 아카이브하는 경우 보존 임계값에 도달하면 일정에서 스냅샷을 삭제합니다.
+ Amazon Data Lifecycle Manager에 의해 아카이브된 스냅샷은 `Archived snapshots per volume` 및 `In-progress snapshot archives per account` 할당량에 포함됩니다.
+ 일정에서 24시간 동안 재시도한 후에도 스냅샷을 아카이브할 수 없는 경우 스냅샷은 표준 계층에 남아 있고 아카이브 계층에서 삭제된 시간을 기준으로 삭제되도록 예약됩니다. 예를 들어, 일정에서 스냅샷을 120일 동안 아카이브하는 경우 아카이브에 실패한 후 영구적으로 삭제되기 전에 120일 동안 표준 계층에 남아 있습니다. 개수 기반 일정의 경우 스냅샷은 일정의 보존 횟수에 포함되지 않습니다.
+ 스냅샷은 생성된 동일한 리전에 아카이브해야 합니다. 크로스 리전 복사 및 스냅샷 아카이빙을 활성화한 경우 Amazon Data Lifecycle Manager는 스냅샷 사본을 아카이브하지 않습니다.
+ Amazon Data Lifecycle Manager에 의해 아카이브된 스냅샷에는 `aws:dlm:archived=true` 시스템 태그가 지정됩니다. 또한 아카이브가 활성화된 기간 기반 일정에 의해 생성된 스냅샷에는 스냅샷 아카이브 예약 날짜와 시간을 나타내는 `aws:dlm:expirationTime` 시스템 태그가 지정됩니다.

**루트 볼륨 및 데이터(루트 아님) 볼륨을 제외**할 때 다음 고려 사항이 적용됩니다.
+ 부팅 볼륨을 제외하도록 선택하고 결과적으로 인스턴스에 연결된 모든 추가 데이터 볼륨을 제외하는 태그를 지정하면 Amazon Data Lifecycle Manager는 영향을 받는 인스턴스에 대한 스냅샷을 생성하지 않고 `SnapshotsCreateFailed` CloudWatch 지표를 내보냅니다. 자세한 내용은 [CloudWatch를 사용하여 정책 모니터링](monitor-dlm-cw-metrics.md) 단원을 참조하십시오.

다음은 **스냅샷 수명 주기 정책에 의해 대상으로 지정된 볼륨 삭제 또는 인스턴스 종료**에 적용되는 고려 사항입니다.
+ 볼륨을 삭제하거나 개수 기반 보존 일정으로 정책의 대상이 되는 인스턴스를 종료하는 경우 Amazon Data Lifecycle Manager는 삭제된 볼륨 또는 인스턴스에서 생성된 표준 계층 및 아카이브 계층의 스냅샷을 더 이상 관리하지 않습니다. 더 이상 필요하지 않은 이전의 스냅샷은 수동으로 삭제해야 합니다.
+ 기간 기반 보존 일정을 사용하는 정책의 대상 볼륨을 삭제하거나 인스턴스를 종료하는 경우 정책은 정의된 일정에 따라 삭제된 볼륨 또는 인스턴스에서 생성된 표준 계층 및 아카이브 계층에서 스냅샷을 계속해서 삭제합니다(단, 마지막 스냅샷 제외). 더 이상 필요하지 않은 경우 마지막 스냅샷을 수동으로 삭제해야 합니다.

다음은 스냅샷 수명 주기 정책과 ** [빠른 스냅샷 복원](ebs-fast-snapshot-restore.md)**에 적용되는 고려 사항입니다.
+ Amazon Data Lifecycle Manager는 크기가 16TiB 이하인 스냅샷에 대해서만 빠른 스냅샷 복원을 활성화할 수 있습니다. 자세한 내용은 [Amazon EBS 빠른 스냅샷 복원](ebs-fast-snapshot-restore.md) 단원을 참조하십시오.
+ 빠른 스냅샷 복원에 대해 사용 설정된 스냅샷은 정책을 삭제 또는 사용 중지하거나, 정책에 대한 빠른 스냅샷 복원을 사용 중지하거나, 가용 영역에 대한 빠른 스냅샷 복원을 사용 중지하더라도 사용 설정된 상태로 유지됩니다. 이러한 스냅샷에 대한 빠른 스냅샷 복원을 수동으로 사용 중지해야 합니다.
+ 정책에서 빠른 스냅샷 복원을 사용 설정하고 빠른 스냅샷 복원에 대해 사용 설정할 수 있는 최대 스냅샷 수를 초과하는 경우 Amazon Data Lifecycle Manager는 예약된 대로 스냅샷을 생성하지만 빠른 스냅샷 복원에 대해 스냅샷을 사용 설정하지 않습니다. 빠른 스냅샷 복원에 대해 활성화된 스냅샷을 삭제한 후 Amazon Data Lifecycle Manager가 생성하는 다음 스냅샷은 빠른 스냅샷 복원에 대해 활성화됩니다.
+ 스냅샷에 대해 빠른 스냅샷 복원을 사용 설정할 때 스냅샷을 최적화하려면 TiB당 60분 걸립니다. Amazon Data Lifecycle Manager에서 다음 스냅샷을 생성하기 전에 각 스냅샷이 완전히 최적화되도록 일정을 구성하는 것이 좋습니다.
+ 인스턴스를 대상으로 하는 정책에 대해 빠른 스냅샷 복원을 활성화하면 Amazon Data Lifecycle Manager는 다중 볼륨 스냅샷 세트의 각 스냅샷에 대해 개별적으로 빠른 스냅샷 복원을 활성화합니다. Amazon Data Lifecycle Manager가 다중 볼륨 스냅샷 세트의 스냅샷 중 하나에 대해 빠른 스냅샷 복원을 활성화하지 못하는 경우에도 스냅샷 세트의 나머지 스냅샷에 대해 빠른 스냅샷 복원을 활성화하려고 시도합니다.
+ 특정 가용 영역의 스냅샷에 대해 빠른 스냅샷 복원이 활성화된 1분마다 요금이 청구됩니다. 요금은 최소 1시간으로 비례 청구됩니다. 자세한 내용은 [요금 및 결제](ebs-fast-snapshot-restore.md#fsr-pricing) 단원을 참조하십시오.
**참고**  
수명 주기 정책의 구성에 따라 여러 가용 영역에서 빠른 스냅샷 복원에 대해 여러 스냅샷을 동시에 사용 설정할 수 있습니다.

스냅샷 수명 주기 정책 및 ** [다중 연결](ebs-volumes-multi.md) 지원 볼륨**에 적용되는 고려 사항은 다음과 같습니다.
+ 동일한 다중 연결 지원 볼륨을 가지고 있는 대상 인스턴스 수명 주기 정책을 생성할 때 Amazon Data Lifecycle Manager에서는 연결된 각 인스턴스에 대해 볼륨의 스냅샷을 시작합니다. *타임스탬프* 태그를 사용하여 연결된 인스턴스에서 생성된 시간 일관성 있는 스냅샷 집합을 식별합니다.

**계정 간에 스냅샷을 공유**할 때는 다음 사항을 고려해야 합니다.
+ 암호화되지 않았거나 고객 관리형 키를 사용하여 암호화된 스냅샷만 공유할 수 있습니다.
+ 기본 EBS 암호화 KMS 키로 암호화된 스냅샷은 공유할 수 없습니다.
+ 암호화된 스냅샷을 공유하는 경우 소스 볼륨을 암호화하는 데 사용된 KMS 키도 대상 계정과 공유해야 합니다. 자세한 내용은AWS Key Management Service 개발자 안내서**의 [다른 계정의 사용자가 CMK를 사용하도록 허용](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html)을 참조하세요.

다음은 스냅샷 정책과 **[스냅샷 아카이빙](snapshot-archive.md)**에 적용되는 고려 사항입니다.
+ 정책에 의해 생성된 스냅샷을 수동으로 아카이빙하고 정책의 보존 임계값에 도달했을 때 해당 스냅샷이 아카이브 계층에 있는 경우 Amazon Data Lifecycle Manager는 스냅샷을 삭제하지 않습니다. Amazon Data Lifecycle Manager는 아카이브 계층에 저장된 스냅샷을 관리하지 않습니다. 아카이브 계층에 저장된 스냅샷이 더 이상 필요하지 않으면 수동으로 삭제해야 합니다.

다음은 스냅샷 정책과 [휴지통](recycle-bin.md)에 적용되는 고려 사항입니다.
+ 정책의 보존 임계값에 도달하면 Amazon Data Lifecycle Manager가 스냅샷을 삭제하고 휴지통으로 보내고 사용자가 휴지통에서 스냅샷을 수동으로 복원하는 경우 더 이상 필요하지 않을 때 해당 스냅샷을 수동으로 삭제해야 합니다. Amazon Data Lifecycle Manager는 더 이상 스냅샷을 관리하지 않습니다.
+ 정책에 의해 생성된 스냅샷을 수동으로 삭제하고 정책의 보존 임계값에 도달했을 때 해당 스냅샷이 휴지통에 있는 경우 Amazon Data Lifecycle Manager는 스냅샷을 삭제하지 않습니다. Amazon Data Lifecycle Manager는 휴지통에 저장된 스냅샷을 관리하지 않습니다.

  정책의 보존 임계값에 도달하기 전에 스냅샷이 휴지통에서 복원되는 경우 정책의 보존 임계값에 도달하면 Amazon Data Lifecycle Manager가 스냅샷을 삭제합니다.

  정책의 보존 임계값에 도달한 후 스냅샷이 휴지통에서 복원되면 Amazon Data Lifecycle Manager가 더 이상 스냅샷을 삭제하지 않습니다. 더 이상 필요하지 않은 스냅샷은 수동으로 삭제해야 합니다.

다음은 **오류** 상태인 수명 주기 정책과 에 적용되는 고려 사항입니다.
+ 수명 기반 보존 일정이 포함된 정책의 경우 정책이 `error` 상태일 때 만료되도록 설정된 스냅샷은 무기한 보존됩니다. 이러한 스냅샷은 수동으로 삭제해야 합니다. 정책을 다시 활성화하면 Amazon Data Lifecycle Manager가 스냅샷 보존 기간이 만료될 때 삭제를 재개합니다.
+ 개수 기반 보존 일정이 있는 정책의 경우 `error` 상태인 동안 스냅샷 생성 및 삭제를 중단합니다. 정책을 다시 활성화하면 Amazon Data Lifecycle Manager가 스냅샷 생성을 재개하고 보존 임계값이 충족되면 스냅샷 삭제를 재개합니다.

다음은 스냅샷 정책과 **[스냅샷 잠금](ebs-snapshot-lock.md)**에 적용되는 고려 사항입니다.
+ Amazon Data Lifecycle Manager가 생성한 스냅샷을 수동으로 잠그고 해당 보존 임곗값에 도달해도 스냅샷이 계속 잠겨 있는 경우 Amazon Data Lifecycle Manager는 더 이상 해당 스냅샷을 관리하지 않습니다. 더 이상 필요하지 않은 경우 스냅샷을 수동으로 삭제해야 합니다.
+ Amazon Data Lifecycle Manager가 생성하고 빠른 스냅샷 복원이 활성화된 스냅샷을 수동으로 잠그고 해당 보존 임곗값에 도달해도 스냅샷이 계속 잠겨 있는 경우 Amazon Data Lifecycle Manager는 빠른 스냅샷 복원을 비활성화하거나 스냅샷을 삭제하지 않습니다. 더 이상 필요하지 않은 경우 수동으로 빠른 스냅샷 복원을 비활성화하고 스냅샷을 삭제해야 합니다.
+ Amazon Data Lifecycle Manager가 생성한 스냅샷을 AMI에 수동으로 등록한 다음 해당 스냅샷을 잠그고 해당 보존 임곗값에 도달해도 스냅샷이 계속 잠겨 있고 AMI와 연결된 경우 Amazon Data Lifecycle Manager는 해당 스냅샷 삭제를 계속 시도합니다. AMI가 등록 취소되고 스냅샷이 잠금 해제되면 Amazon Data Lifecycle Manager는 자동으로 스냅샷을 삭제합니다.

## 추가 리소스
<a name="snapshot-additional-resources"></a>

자세한 내용은 [ Amazon Data Lifecycle Manager 스토리지를 사용하여 Amazon EBS 스냅샷 및 AMI 관리 자동화](https://aws.amazon.com/blogs/storage/automating-amazon-ebs-snapshot-and-ami-management-using-amazon-dlm/) AWS 블로그를 참조하세요.

# Data Lifecycle Manager를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷 자동화
<a name="automate-app-consistent-backups"></a>

Amazon Data Lifecycle Manager를 사용하면 인스턴스를 대상으로 하는 스냅샷 수명 주기 정책에서 사전 및 사후 스크립트를 활성화하여 애플리케이션에 일관되게 적용되는 스냅샷을 자동화할 수 있습니다.

Amazon Data Lifecycle Manager는 AWS Systems Manager (Systems Manager)와 통합되어 애플리케이션 일관성 스냅샷을 지원합니다. Amazon Data Lifecycle Manager는 사전 및 사후 스크립트가 포함된 Systems Manager(SSM) 명령 문서를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷을 완성하는 데 필요한 작업을 자동화합니다. Amazon Data Lifecycle Manager는 스냅샷 생성을 시작하기 전에 사전 스크립트의 명령을 실행하여 I/O를 동결하고 플러시합니다. Amazon Data Lifecycle Manager가 스냅샷 생성을 시작한 후 사후 스크립트의 명령을 실행하여 I/O를 재개합니다.

Amazon Data Lifecycle Manager를 사용하면 다음과 같은 애플리케이션에 일관되게 적용되는 스냅샷을 자동화할 수 있습니다.
+ 볼륨 섀도 복사본 서비스(VSS)를 사용하는 Windows 애플리케이션
+  AWS 관리형 SSDM 문서를 사용하는 SAP HANA. 자세한 내용은 [Amazon EBS snapshots for SAP HANA](https://docs.aws.amazon.com/sap/latest/sap-hana/ebs-sap-hana.html)를 참조하세요.
+ SSM 문서 템플릿을 사용하는 MySQL, PostgreSQL 또는 InterSystems IRIS와 같은 자체 관리형 데이터베이스

**Topics**
+ [사전 및 사후 스크립트 사용을 위한 요구 사항](#app-consistent-prereqs)
+ [애플리케이션에 일관되게 적용되는 스냅샷 시작하기](#app-consistent-get-started)
+ [Amazon Data Lifecycle Manager를 사용한 VSS 백업 고려 사항](#app-consistent-vss)
+ [애플리케이션에 일관되게 적용되는 스냅샷에 대한 공동 책임](#shared-responsibility)

## 사전 및 사후 스크립트 사용을 위한 요구 사항
<a name="app-consistent-prereqs"></a>

다음 표에는 Amazon Data Lifecycle Manager에서 사전 및 사후 스크립트를 사용하기 위한 요구 사항이 요약되어 있습니다.


|  | 애플리케이션 일치 스냅샷 |  | 
| --- |--- |--- |
| 요구 사항 | VSS 백업 | 사용자 지정 SSM 문서 | 그 외 사용 사례 | 
| --- |--- |--- |--- |
| SSM Agent installed and running on target instances | ✓ | ✓ | ✓ | 
| VSS system requirements met on target instances | ✓ |  |  | 
| VSS enabled instance profile associated with target instances | ✓ |  |  | 
| VSS components installed on target instances | ✓ |  |  | 
| Prepare SSM document with pre and post script commands |  | ✓ | ✓ | 
| Prepare Amazon Data Lifecycle Manager IAM role run pre and post scripts | ✓ | ✓ | ✓ | 
| Create snapshot policy that targets instances and is configured for pre and post scripts | ✓ | ✓ | ✓ | 

## 애플리케이션에 일관되게 적용되는 스냅샷 시작하기
<a name="app-consistent-get-started"></a>

이 섹션에서는 Amazon Data Lifecycle Manager를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷을 자동화하기 위해 따라야 하는 단계를 설명합니다.

### 1단계: 대상 인스턴스 준비
<a name="prep-instances"></a>

Amazon Data Lifecycle Manager를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷을 위한 대상 인스턴스를 준비해야 합니다. 사용 사례에 따라 다음 중 하나를 수행합니다.

------
#### [ Prepare for VSS Backups ]

**VSS 백업을 위한 대상 인스턴스 준비**

1. SSM Agent가 아직 설치되지 않은 경우 대상 인스턴스에 SSM Agent를 설치합니다. SSM Agent가 대상 인스턴스에 이미 설치되어 있는 경우 이 단계를 건너뜁니다.

   자세한 내용은 [Windows Server용 EC2 인스턴스에서 SSM Agent 사용](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-windows.html)을 참조하세요.

1. SSM Agent가 실행 중인지 확인합니다. 자세한 내용은 [SSM Agent 상태 확인 및 에이전트 시작](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html)을 참조하세요.

1. Amazon EC2 인스턴스용 Systems Manager를 설정합니다. 자세한 내용은 **AWS Systems Manager 사용 설명서의 [Amazon EC2 인스턴스용 Systems Manager 설정](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html)을 참조하세요.

1. [ VSS 백업에 대한 시스템 요구 사항이 충족되는지 확인합니다.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/application-consistent-snapshots-prereqs.html)

1. [ VSS 사용 인스턴스 프로파일을 대상 인스턴스에 연결합니다.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vss-iam-reqs.html)

1. [ VSS 구성 요소를 설치합니다.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/application-consistent-snapshots-getting-started.html)

------
#### [ Prepare for SAP HANA backups ]

**SAP HANA 백업을 위한 대상 인스턴스 준비**

1. 대상 인스턴스에서 SAP HANA 환경을 준비합니다.

   1. SAP HANA로 인스턴스를 설정합니다. 기존 SAP HANA 환경이 아직 없는 경우 [SAP HANA Environment Setup on AWS](https://docs.aws.amazon.com/sap/latest/sap-hana/std-sap-hana-environment-setup.html)를 참조할 수 있습니다.

   1. 적절한 관리자 사용자로 SystemDB에 로그인합니다.

   1. Amazon Data Lifecycle Manager에서 사용할 데이터베이스 백업 사용자를 생성합니다.

      ```
      CREATE USER username PASSWORD password NO FORCE_FIRST_PASSWORD_CHANGE;
      ```

      예를 들어, 다음 명령은 이름이 `dlm_user`이고 암호가 `password`인 사용자를 생성합니다.

      ```
      CREATE USER dlm_user PASSWORD password NO FORCE_FIRST_PASSWORD_CHANGE;
      ```

   1. 이전 단계에서 생성한 데이터베이스 백업 사용자에게 `BACKUP OPERATOR` 역할을 할당합니다.

      ```
      GRANT BACKUP OPERATOR TO username
      ```

      예를 들어, 다음 명령은 `dlm_user`라는 사용자에게 역할을 할당합니다.

      ```
      GRANT BACKUP OPERATOR TO dlm_user
      ```

   1. 운영 체제에 관리자(예: `sidadm`)로 로그인합니다.

   1. 사용자가 정보를 입력하지 않고도 SAP HANA SSM 문서가 SAP HANA에 연결할 수 있도록 연결 정보를 저장할 `hdbuserstore` 항목을 생성합니다.

      ```
      hdbuserstore set DLM_HANADB_SNAPSHOT_USER localhost:3hana_instance_number13 username password
      ```

      예제:

      ```
      hdbuserstore set DLM_HANADB_SNAPSHOT_USER localhost:30013 dlm_user password
      ```

   1. 연결을 테스트합니다.

      ```
      hdbsql -U DLM_HANADB_SNAPSHOT_USER "select * from dummy"
      ```

1. SSM Agent가 아직 설치되지 않은 경우 대상 인스턴스에 SSM Agent를 설치합니다. SSM Agent가 대상 인스턴스에 이미 설치되어 있는 경우 이 단계를 건너뜁니다.

   자세한 정보는 [Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)를 참조하세요.

1. SSM Agent가 실행 중인지 확인합니다. 자세한 내용은 [SSM Agent 상태 확인 및 에이전트 시작](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html)을 참조하세요.

1. Amazon EC2 인스턴스용 Systems Manager를 설정합니다. 자세한 내용은 **AWS Systems Manager 사용 설명서의 [Amazon EC2 인스턴스용 Systems Manager 설정](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html)을 참조하세요.

------
#### [ Prepare for custom SSM documents ]

**대상 인스턴스의 사용자 지정 SSM 문서 준비**

1. SSM Agent가 아직 설치되지 않은 경우 대상 인스턴스에 SSM Agent를 설치합니다. SSM Agent가 대상 인스턴스에 이미 설치되어 있는 경우 이 단계를 건너뜁니다.
   + (Linux 인스턴스) [Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)
   + (Windows 인스턴스) [Windows Server용 EC2 인스턴스에서 SSM 에이전트 작업](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-windows.html)

1. SSM Agent가 실행 중인지 확인합니다. 자세한 내용은 [SSM Agent 상태 확인 및 에이전트 시작](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html)을 참조하세요.

1. Amazon EC2 인스턴스용 Systems Manager를 설정합니다. 자세한 내용은 **AWS Systems Manager 사용 설명서의 [Amazon EC2 인스턴스용 Systems Manager 설정](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html)을 참조하세요.

------

### 2단계: SSM 문서 준비
<a name="prep-ssm-doc"></a>

**참고**  
이 단계는 사용자 지정 SSM 문서에만 필요합니다. VSS 백업 또는 SAP HANA에는 필요하지 않습니다. VSS Backups 및 SAP HANA의 경우 Amazon Data Lifecycle Manager는 AWS 관리형 SSM 문서를 사용합니다.

MySQL, PostgreSQL, InterSystems IRIS와 같은 자체 관리형 데이터베이스에 대해 애플리케이션에 일관되게 적용되는 스냅샷을 자동화하는 경우 스냅샷 생성이 시작되기 전에 I/O를 동결하고 플러시하는 사전 스크립트와 스냅샷 생성이 시작된 후 I/O를 재개하는 사후 스크립트가 포함된 SSM 명령 문서를 생성해야 합니다.

MySQL, PostgreSQL 또는 InterSystems IRIS 데이터베이스에서 표준 구성을 사용하는 경우 아래 샘플 SSM 문서 내용을 사용하여 SSM 명령 문서를 생성할 수 있습니다. MySQL, PostgreSQL 또는 InterSystems IRIS 데이터베이스가 비표준 구성을 사용하는 경우 아래 샘플 내용을 SSM 명령 문서의 시작점으로 사용한 다음 요구 사항에 맞게 사용자 지정할 수 있습니다. 또는 SSM 문서를 처음부터 새로 생성하려면 아래의 빈 SSM 문서 템플릿을 사용하여 해당 문서 섹션에 사전 및 사후 명령을 추가합니다.

**다음 사항에 유의하세요.**  
SSM 문서가 데이터베이스 구성에 필요한 올바른 작업을 수행하는지 확인하는 것은 사용자의 책임입니다.
SSM 문서의 사전 및 사후 스크립트가 I/O를 성공적으로 동결, 플러시 및 재개할 수 있는 경우에만 스냅샷이 애플리케이션에 일관되게 적용됩니다.
SSM 문서에는 `pre-script`, `post-script` 및 `dry-run`을 포함하여 `allowedValues`에 대한 필수 필드가 포함되어야 합니다. Amazon Data Lifecycle Manager는 이러한 섹션의 내용을 기반으로 인스턴스에서 명령을 실행합니다. SSM 문서에 이러한 섹션이 없는 경우 Amazon Data Lifecycle Manager는 해당 문서를 실패한 실행으로 간주합니다.

------
#### [ MySQL sample document content ]

```
###===============================================================================###
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###===============================================================================###
schemaVersion: '2.2'
description: Amazon Data Lifecycle Manager Pre/Post script for MySQL databases
parameters:
  executionId:
    type: String
    default: None
    description: (Required) Specifies the unique identifier associated with a pre and/or post execution
    allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$
  command:
  # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. 
  # 'dry-run' option is intended for validating the document execution without triggering any commands
  # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully 
  # trigger pre and post script actions.
    type: String
    default: 'dry-run'
    description: (Required) Specifies whether pre-script and/or post-script should be executed.
    allowedValues:
    - pre-script
    - post-script
    - dry-run

mainSteps:
- action: aws:runShellScript
  description: Run MySQL Database freeze/thaw commands
  name: run_pre_post_scripts
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - |
      #!/bin/bash

      ###===============================================================================###
      ### Error Codes
      ###===============================================================================###
      # The following Error codes will inform Data Lifecycle Manager of the type of error 
      # and help guide handling of the error. 
      # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field.
      # 1 Pre-script failed during execution - 201
      # 2 Post-script failed during execution - 202
      # 3 Auto thaw occurred before post-script was initiated - 203
      # 4 Pre-script initiated while post-script was expected - 204
      # 5 Post-script initiated while pre-script was expected - 205
      # 6 Application not ready for pre or post-script initiation - 206

      ###=================================================================###
      ### Global variables
      ###=================================================================###
      START=$(date +%s)
      # For testing this script locally, replace the below with OPERATION=$1.
      OPERATION={{ command }}
      FS_ALREADY_FROZEN_ERROR='freeze failed: Device or resource busy'
      FS_ALREADY_THAWED_ERROR='unfreeze failed: Invalid argument'
      FS_BUSY_ERROR='mount point is busy'

      # Auto thaw is a fail safe mechanism to automatically unfreeze the application after the 
      # duration specified in the global variable below. Choose the duration based on your
      # database application's tolerance to freeze.
      export AUTO_THAW_DURATION_SECS="60"

      # Add all pre-script actions to be performed within the function below
      execute_pre_script() {
          echo "INFO: Start execution of pre-script"
          # Check if filesystem is already frozen. No error code indicates that filesystem 
          # is not currently frozen and that the pre-script can proceed with freezing the filesystem.
          check_fs_freeze
          # Execute the DB commands to flush the DB in preparation for snapshot
          snap_db
          # Freeze the filesystem. No error code indicates that filesystem was succefully frozen
          freeze_fs

          echo "INFO: Schedule Auto Thaw to execute in ${AUTO_THAW_DURATION_SECS} seconds."
          $(nohup bash -c execute_schedule_auto_thaw  >/dev/null 2>&1 &)
      }

      # Add all post-script actions to be performed within the function below
      execute_post_script() {
          echo "INFO: Start execution of post-script"
          # Unfreeze the filesystem. No error code indicates that filesystem was successfully unfrozen.
          unfreeze_fs
          thaw_db
      }

      # Execute Auto Thaw to automatically unfreeze the application after the duration configured 
      # in the AUTO_THAW_DURATION_SECS global variable.
      execute_schedule_auto_thaw() {
          sleep ${AUTO_THAW_DURATION_SECS}
          execute_post_script
      }

      # Disable Auto Thaw if it is still enabled
      execute_disable_auto_thaw() {
          echo "INFO: Attempting to disable auto thaw if enabled"
          auto_thaw_pgid=$(pgrep -f execute_schedule_auto_thaw | xargs -i ps -hp {} -o pgid)
          if [ -n "${auto_thaw_pgid}" ]; then
              echo "INFO: execute_schedule_auto_thaw process found with pgid ${auto_thaw_pgid}"
              sudo pkill -g ${auto_thaw_pgid}
              rc=$?
              if [ ${rc} != 0 ]; then
                  echo "ERROR: Unable to kill execute_schedule_auto_thaw process. retval=${rc}"
              else
                  echo "INFO: Auto Thaw  has been disabled"
              fi
          fi
      }

      # Iterate over all the mountpoints and check if filesystem is already in freeze state.
      # Return error code 204 if any of the mount points are already frozen.
      check_fs_freeze() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous and pre-script does not freeze these filesystems.
              # Hence, we will skip the root and boot mountpoints while checking if filesystem is in freeze state.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi

              error_message=$(sudo mount -o remount,noatime $target 2>&1)
              # Remount will be a no-op without a error message if the filesystem is unfrozen.
              # However, if filesystem is already frozen, remount will fail with busy error message.
              if [ $? -ne 0 ];then
                  # If the filesystem is already in frozen, return error code 204
                  if [[ "$error_message" == *"$FS_BUSY_ERROR"* ]];then
                      echo "ERROR: Filesystem ${target} already frozen. Return Error Code: 204"
                      exit 204
                  fi
                  # If the check filesystem freeze failed due to any reason other than the filesystem already frozen, return 201
                  echo "ERROR: Failed to check_fs_freeze on mountpoint $target due to error - $errormessage"
                  exit 201
              fi
          done
      } 

      # Iterate over all the mountpoints and freeze the filesystem.
      freeze_fs() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous. Hence, skip filesystem freeze 
              # operations for root and boot mountpoints.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi
              echo "INFO: Freezing $target"
              error_message=$(sudo fsfreeze -f $target 2>&1)
              if [ $? -ne 0 ];then
                  # If the filesystem is already in frozen, return error code 204
                  if [[ "$error_message" == *"$FS_ALREADY_FROZEN_ERROR"* ]]; then
                      echo "ERROR: Filesystem ${target} already frozen. Return Error Code: 204"
                      sudo mysql -e 'UNLOCK TABLES;'
                      exit 204
                  fi
                  # If the filesystem freeze failed due to any reason other than the filesystem already frozen, return 201
                  echo "ERROR: Failed to freeze mountpoint $targetdue due to error - $errormessage"
                  thaw_db
                  exit 201
              fi
              echo "INFO: Freezing complete on $target"
          done
      }

      # Iterate over all the mountpoints and unfreeze the filesystem.
      unfreeze_fs() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous and pre-script does not freeze these filesystems.
              # Hence, will skip the root and boot mountpoints during unfreeze as well.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi
              echo "INFO: Thawing $target"
              error_message=$(sudo fsfreeze -u $target 2>&1)
              # Check if filesystem is already unfrozen (thawed). Return error code 204 if filesystem is already unfrozen.
              if [ $? -ne 0 ]; then
                  if [[ "$error_message" == *"$FS_ALREADY_THAWED_ERROR"* ]]; then
                      echo "ERROR: Filesystem ${target} is already in thaw state. Return Error Code: 205"
                      exit 205
                  fi
                  # If the filesystem unfreeze failed due to any reason other than the filesystem already unfrozen, return 202
                  echo "ERROR: Failed to unfreeze mountpoint $targetdue due to error - $errormessage"
                  exit 202
              fi
              echo "INFO: Thaw complete on $target"
          done    
      }

      snap_db() {
          # Run the flush command only when MySQL DB service is up and running
          sudo systemctl is-active --quiet mysqld.service
          if [ $? -eq 0 ]; then
              echo "INFO: Execute MySQL Flush and Lock command."
              sudo mysql -e 'FLUSH TABLES WITH READ LOCK;'
              # If the MySQL Flush and Lock command did not succeed, return error code 201 to indicate pre-script failure
              if [ $? -ne 0 ]; then
                  echo "ERROR: MySQL FLUSH TABLES WITH READ LOCK command failed."
                  exit 201
              fi
              sync
          else 
              echo "INFO: MySQL service is inactive. Skipping execution of MySQL Flush and Lock command."
          fi
      }

      thaw_db() {
          # Run the unlock command only when MySQL DB service is up and running
          sudo systemctl is-active --quiet mysqld.service
          if [ $? -eq 0 ]; then
              echo "INFO: Execute MySQL Unlock"
              sudo mysql -e 'UNLOCK TABLES;'
          else 
              echo "INFO: MySQL service is inactive. Skipping execution of MySQL Unlock command."
          fi
      }

      export -f execute_schedule_auto_thaw
      export -f execute_post_script
      export -f unfreeze_fs
      export -f thaw_db

      # Debug logging for parameters passed to the SSM document
      echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}"

      # Based on the command parameter value execute the function that supports 
      # pre-script/post-script operation
      case ${OPERATION} in
          pre-script)
              execute_pre_script
              ;;
          post-script)
              execute_post_script
              execute_disable_auto_thaw
              ;;
          dry-run)
              echo "INFO: dry-run option invoked - taking no action"
              ;;
          *)
              echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run."
              exit 1 # return failure
              ;;
      esac

      END=$(date +%s)
      # Debug Log for profiling the script time
      echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
```

------
#### [ PostgreSQL sample document content ]

```
###===============================================================================###
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###===============================================================================###
schemaVersion: '2.2'
description: Amazon Data Lifecycle Manager Pre/Post script for PostgreSQL databases
parameters:
  executionId:
    type: String
    default: None
    description: (Required) Specifies the unique identifier associated with a pre and/or post execution
    allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$
  command:
  # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. 
  # 'dry-run' option is intended for validating the document execution without triggering any commands
  # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully 
  # trigger pre and post script actions.
    type: String
    default: 'dry-run'
    description: (Required) Specifies whether pre-script and/or post-script should be executed.
    allowedValues:
    - pre-script
    - post-script
    - dry-run

mainSteps:
- action: aws:runShellScript
  description: Run PostgreSQL Database freeze/thaw commands
  name: run_pre_post_scripts
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - |
      #!/bin/bash

      ###===============================================================================###
      ### Error Codes
      ###===============================================================================###
      # The following Error codes will inform Data Lifecycle Manager of the type of error 
      # and help guide handling of the error. 
      # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field.
      # 1 Pre-script failed during execution - 201
      # 2 Post-script failed during execution - 202
      # 3 Auto thaw occurred before post-script was initiated - 203
      # 4 Pre-script initiated while post-script was expected - 204
      # 5 Post-script initiated while pre-script was expected - 205
      # 6 Application not ready for pre or post-script initiation - 206

      ###===============================================================================###
      ### Global variables
      ###===============================================================================###
      START=$(date +%s)
      OPERATION={{ command }}
      FS_ALREADY_FROZEN_ERROR='freeze failed: Device or resource busy'
      FS_ALREADY_THAWED_ERROR='unfreeze failed: Invalid argument'
      FS_BUSY_ERROR='mount point is busy'

      # Auto thaw is a fail safe mechanism to automatically unfreeze the application after the 
      # duration specified in the global variable below. Choose the duration based on your
      # database application's tolerance to freeze.
      export AUTO_THAW_DURATION_SECS="60"

      # Add all pre-script actions to be performed within the function below
      execute_pre_script() {
          echo "INFO: Start execution of pre-script"
          # Check if filesystem is already frozen. No error code indicates that filesystem 
          # is not currently frozen and that the pre-script can proceed with freezing the filesystem.
          check_fs_freeze
          # Execute the DB commands to flush the DB in preparation for snapshot
          snap_db
          # Freeze the filesystem. No error code indicates that filesystem was succefully frozen
          freeze_fs

          echo "INFO: Schedule Auto Thaw to execute in ${AUTO_THAW_DURATION_SECS} seconds."
          $(nohup bash -c execute_schedule_auto_thaw  >/dev/null 2>&1 &)
      }

      # Add all post-script actions to be performed within the function below
      execute_post_script() {
          echo "INFO: Start execution of post-script"
          # Unfreeze the filesystem. No error code indicates that filesystem was successfully unfrozen
          unfreeze_fs
      }

      # Execute Auto Thaw to automatically unfreeze the application after the duration configured 
      # in the AUTO_THAW_DURATION_SECS global variable.
      execute_schedule_auto_thaw() {
          sleep ${AUTO_THAW_DURATION_SECS}
          execute_post_script
      }

      # Disable Auto Thaw if it is still enabled
      execute_disable_auto_thaw() {
          echo "INFO: Attempting to disable auto thaw if enabled"
          auto_thaw_pgid=$(pgrep -f execute_schedule_auto_thaw | xargs -i ps -hp {} -o pgid)
          if [ -n "${auto_thaw_pgid}" ]; then
              echo "INFO: execute_schedule_auto_thaw process found with pgid ${auto_thaw_pgid}"
              sudo pkill -g ${auto_thaw_pgid}
              rc=$?
              if [ ${rc} != 0 ]; then
                  echo "ERROR: Unable to kill execute_schedule_auto_thaw process. retval=${rc}"
              else
                  echo "INFO: Auto Thaw  has been disabled"
              fi
          fi
      }

      # Iterate over all the mountpoints and check if filesystem is already in freeze state.
      # Return error code 204 if any of the mount points are already frozen.
      check_fs_freeze() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous and pre-script does not freeze these filesystems.
              # Hence, we will skip the root and boot mountpoints while checking if filesystem is in freeze state.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi

              error_message=$(sudo mount -o remount,noatime $target 2>&1)
              # Remount will be a no-op without a error message if the filesystem is unfrozen.
              # However, if filesystem is already frozen, remount will fail with busy error message.
              if [ $? -ne 0 ];then
                  # If the filesystem is already in frozen, return error code 204
                  if [[ "$error_message" == *"$FS_BUSY_ERROR"* ]];then
                      echo "ERROR: Filesystem ${target} already frozen. Return Error Code: 204"
                      exit 204
                  fi
                  # If the check filesystem freeze failed due to any reason other than the filesystem already frozen, return 201
                  echo "ERROR: Failed to check_fs_freeze on mountpoint $target due to error - $errormessage"
                  exit 201
              fi
          done
      } 

      # Iterate over all the mountpoints and freeze the filesystem.
      freeze_fs() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous. Hence, skip filesystem freeze 
              # operations for root and boot mountpoints.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi
              echo "INFO: Freezing $target"
              error_message=$(sudo fsfreeze -f $target 2>&1)
              if [ $? -ne 0 ];then
                  # If the filesystem is already in frozen, return error code 204
                  if [[ "$error_message" == *"$FS_ALREADY_FROZEN_ERROR"* ]]; then
                      echo "ERROR: Filesystem ${target} already frozen. Return Error Code: 204"
                      exit 204
                  fi
                  # If the filesystem freeze failed due to any reason other than the filesystem already frozen, return 201
                  echo "ERROR: Failed to freeze mountpoint $targetdue due to error - $errormessage"
                  exit 201
              fi
              echo "INFO: Freezing complete on $target"
          done
      }

      # Iterate over all the mountpoints and unfreeze the filesystem.
      unfreeze_fs() {
          for target in $(lsblk -nlo MOUNTPOINTS)
          do
              # Freeze of the root and boot filesystems is dangerous and pre-script does not freeze these filesystems.
              # Hence, will skip the root and boot mountpoints during unfreeze as well.
              if [ $target == '/' ]; then continue; fi
              if [[ "$target" == *"/boot"* ]]; then continue; fi
              echo "INFO: Thawing $target"
              error_message=$(sudo fsfreeze -u $target 2>&1)
              # Check if filesystem is already unfrozen (thawed). Return error code 204 if filesystem is already unfrozen.
              if [ $? -ne 0 ]; then
                  if [[ "$error_message" == *"$FS_ALREADY_THAWED_ERROR"* ]]; then
                      echo "ERROR: Filesystem ${target} is already in thaw state. Return Error Code: 205"
                      exit 205
                  fi
                  # If the filesystem unfreeze failed due to any reason other than the filesystem already unfrozen, return 202
                  echo "ERROR: Failed to unfreeze mountpoint $targetdue due to error - $errormessage"
                  exit 202
              fi
              echo "INFO: Thaw complete on $target"
          done
      }

      snap_db() {
          # Run the flush command only when PostgreSQL DB service is up and running
          sudo systemctl is-active --quiet postgresql
          if [ $? -eq 0 ]; then
              echo "INFO: Execute Postgres CHECKPOINT"
              # PostgreSQL command to flush the transactions in memory to disk
              sudo -u postgres psql -c 'CHECKPOINT;'
              # If the PostgreSQL Command did not succeed, return error code 201 to indicate pre-script failure
              if [ $? -ne 0 ]; then
                  echo "ERROR: Postgres CHECKPOINT command failed."
                  exit 201
              fi
              sync
          else 
              echo "INFO: PostgreSQL service is inactive. Skipping execution of CHECKPOINT command."
          fi
      }

      export -f execute_schedule_auto_thaw
      export -f execute_post_script
      export -f unfreeze_fs

      # Debug logging for parameters passed to the SSM document
      echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}"

      # Based on the command parameter value execute the function that supports 
      # pre-script/post-script operation
      case ${OPERATION} in
          pre-script)
              execute_pre_script
              ;;
          post-script)
              execute_post_script
              execute_disable_auto_thaw
              ;;
          dry-run)
              echo "INFO: dry-run option invoked - taking no action"
              ;;
          *)
              echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run."
              exit 1 # return failure
              ;;
      esac

      END=$(date +%s)
      # Debug Log for profiling the script time
      echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
```

------
#### [ InterSystems IRIS sample document content ]

```
###===============================================================================###
# MIT License
# 
# Copyright (c) 2024 InterSystems
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
###===============================================================================###
schemaVersion: '2.2'
description: SSM Document Template for Amazon Data Lifecycle Manager Pre/Post script feature for InterSystems IRIS.
parameters:
  executionId:
    type: String
    default: None
    description: Specifies the unique identifier associated with a pre and/or post execution
    allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$
  command:
    type: String
    # Data Lifecycle Manager will trigger the pre-script and post-script actions. You can also use this SSM document with 'dry-run' for manual testing purposes.
    default: 'dry-run'
    description: (Required) Specifies whether pre-script and/or post-script should be executed.
    #The following allowedValues will allow Data Lifecycle Manager to successfully trigger pre and post script actions.
    allowedValues:
    - pre-script
    - post-script
    - dry-run

mainSteps:
- action: aws:runShellScript
  description: Run InterSystems IRIS Database freeze/thaw commands
  name: run_pre_post_scripts
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - |
      #!/bin/bash
      ###===============================================================================###
      ### Global variables
      ###===============================================================================###
      DOCKER_NAME=iris
      LOGDIR=./
      EXIT_CODE=0
      OPERATION={{ command }}
      START=$(date +%s)
      
      # Check if Docker is installed
      # By default if Docker is present, script assumes that InterSystems IRIS is running in Docker
      # Leave only the else block DOCKER_EXEC line, if you run InterSystems IRIS non-containerised (and Docker is present).
      # Script assumes irissys user has OS auth enabled, change the OS user or supply login/password depending on your configuration.
      if command -v docker &> /dev/null
      then
        DOCKER_EXEC="docker exec $DOCKER_NAME"
      else
        DOCKER_EXEC="sudo -i -u irissys"
      fi
      
                    
      # Add all pre-script actions to be performed within the function below
      execute_pre_script() {
        echo "INFO: Start execution of pre-script"
        
        # find all iris running instances
        iris_instances=$($DOCKER_EXEC iris qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5-  | awk '{print $1}')
        echo "`date`: Running iris instances $iris_instances"
      
        # Only for running instances
        for INST in $iris_instances; do
      
          echo "`date`: Attempting to freeze $INST"
      
          # Detailed instances specific log
          LOGFILE=$LOGDIR/$INST-pre_post.log
          
          #check Freeze status before starting
          $DOCKER_EXEC irissession $INST -U '%SYS' "##Class(Backup.General).IsWDSuspendedExt()"
          freeze_status=$?
          if [ $freeze_status -eq 5 ]; then
            echo "`date`:   ERROR: $INST IS already FROZEN"
            EXIT_CODE=204
          else
            echo "`date`:   $INST is not frozen"
            # Freeze
            # Docs: https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=Backup.General#ExternalFreeze
            $DOCKER_EXEC irissession $INST -U '%SYS' "##Class(Backup.General).ExternalFreeze(\"$LOGFILE\",,,,,,600,,,300)"
            status=$?
      
            case $status in
              5) echo "`date`:   $INST IS FROZEN"
                ;;
              3) echo "`date`:   $INST FREEZE FAILED"
                EXIT_CODE=201
                ;;
              *) echo "`date`:   ERROR: Unknown status code: $status"
                EXIT_CODE=201
                ;;
            esac
            echo "`date`:   Completed freeze of $INST"
          fi
        done
        echo "`date`: Pre freeze script finished"
      }
                    
      # Add all post-script actions to be performed within the function below
      execute_post_script() {
        echo "INFO: Start execution of post-script"
      
        # find all iris running instances
        iris_instances=$($DOCKER_EXEC iris qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5-  | awk '{print $1}')
        echo "`date`: Running iris instances $iris_instances"
      
        # Only for running instances
        for INST in $iris_instances; do
      
          echo "`date`: Attempting to thaw $INST"
      
          # Detailed instances specific log
          LOGFILE=$LOGDIR/$INST-pre_post.log
      
          #check Freeze status befor starting
          $DOCKER_EXEC irissession $INST -U '%SYS' "##Class(Backup.General).IsWDSuspendedExt()"
          freeze_status=$?
          if [ $freeze_status -eq 5 ]; then
            echo "`date`:  $INST is in frozen state"
            # Thaw
            # Docs: https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=Backup.General#ExternalFreeze
            $DOCKER_EXEC irissession $INST -U%SYS "##Class(Backup.General).ExternalThaw(\"$LOGFILE\")"
            status=$?
      
            case $status in
              5) echo "`date`:   $INST IS THAWED"
                  $DOCKER_EXEC irissession $INST -U%SYS "##Class(Backup.General).ExternalSetHistory(\"$LOGFILE\")"
                ;;
              3) echo "`date`:   $INST THAW FAILED"
                  EXIT_CODE=202
                ;;
              *) echo "`date`:   ERROR: Unknown status code: $status"
                  EXIT_CODE=202
                ;;
            esac
            echo "`date`:   Completed thaw of $INST"
          else
            echo "`date`:   ERROR: $INST IS already THAWED"
            EXIT_CODE=205
          fi
        done
        echo "`date`: Post thaw script finished"
      }
      
      # Debug logging for parameters passed to the SSM document
        echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}"
                    
      # Based on the command parameter value execute the function that supports 
      # pre-script/post-script operation
      case ${OPERATION} in
        pre-script)
          execute_pre_script
          ;;
        post-script)
          execute_post_script
            ;;
        dry-run)
          echo "INFO: dry-run option invoked - taking no action"
          ;;
        *)
          echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run."
          # return failure
          EXIT_CODE=1
          ;;
      esac
                    
      END=$(date +%s)
      # Debug Log for profiling the script time
      echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
      exit $EXIT_CODE
```

자세한 내용은 [GitHub 리포지토리](https://github.com/intersystems-community/aws/blob/master/README.md)를 참조하세요.

------
#### [ Empty document template ]

```
###===============================================================================###
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###===============================================================================###
schemaVersion: '2.2'
description: SSM Document Template for Amazon Data Lifecycle Manager Pre/Post script feature
parameters:
  executionId:
    type: String
    default: None
    description: (Required) Specifies the unique identifier associated with a pre and/or post execution
    allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$
  command:
  # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. 
  # 'dry-run' option is intended for validating the document execution without triggering any commands
  # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully 
  # trigger pre and post script actions.
    type: String
    default: 'dry-run'
    description: (Required) Specifies whether pre-script and/or post-script should be executed.
    allowedValues:
    - pre-script
    - post-script
    - dry-run

mainSteps:
- action: aws:runShellScript
  description: Run Database freeze/thaw commands
  name: run_pre_post_scripts
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - |
      #!/bin/bash

      ###===============================================================================###
      ### Error Codes
      ###===============================================================================###
      # The following Error codes will inform Data Lifecycle Manager of the type of error 
      # and help guide handling of the error. 
      # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field.
      # 1 Pre-script failed during execution - 201
      # 2 Post-script failed during execution - 202
      # 3 Auto thaw occurred before post-script was initiated - 203
      # 4 Pre-script initiated while post-script was expected - 204
      # 5 Post-script initiated while pre-script was expected - 205
      # 6 Application not ready for pre or post-script initiation - 206

      ###===============================================================================###
      ### Global variables
      ###===============================================================================###
      START=$(date +%s)
      # For testing this script locally, replace the below with OPERATION=$1.
      OPERATION={{ command }}

      # Add all pre-script actions to be performed within the function below
      execute_pre_script() {
          echo "INFO: Start execution of pre-script"
      }

      # Add all post-script actions to be performed within the function below
      execute_post_script() {
          echo "INFO: Start execution of post-script"
      }

      # Debug logging for parameters passed to the SSM document
      echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}"

      # Based on the command parameter value execute the function that supports 
      # pre-script/post-script operation
      case ${OPERATION} in
          pre-script)
              execute_pre_script
              ;;
          post-script)
              execute_post_script
              ;;
          dry-run)
              echo "INFO: dry-run option invoked - taking no action"
              ;;
          *)
              echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run."
              exit 1 # return failure
              ;;
      esac

      END=$(date +%s)
      # Debug Log for profiling the script time
      echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
```

------

SSM 문서 내용이 있는 경우 다음 절차 중 하나를 사용하여 사용자 지정 SSM 문서를 생성합니다.

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

**SSM 명령 문서 생성**

1. [ https://console.aws.amazon.com//systems-manager/](https://console.aws.amazon.com//systems-manager/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **문서**를 선택한 다음 **문서 생성**, **명령 또는 세션**을 선택합니다.

1. [**이름(Name)**]에 문서에 대한 설명이 포함된 이름을 입력합니다.

1. **대상 유형**에서 **/AWS::EC2::Instance**를 선택합니다.

1. **문서 유형**에서 **명령**을 선택합니다.

1. **콘텐츠** 필드에서 **YAML**을 선택한 다음 문서 내용을 붙여넣습니다.

1. **문서 태그** 섹션에서 태그 키가 `DLMScriptsAccess`이고 태그 값이 `true`인 태그를 추가합니다.
**중요**  
`DLMScriptsAccess:true` 태그는 *3단계: Amazon Data Lifecycle Manager IAM 역할 준비에 사용되는* **AWSDataLifecycleManagerSSMFullAccess** AWS 관리형 정책에 필요합니다. 정책은 `aws:ResourceTag` 조건 키를 사용하여 이 태그가 있는 SSM 문서에 대한 액세스를 제한합니다.

1. **문서 생성**을 선택합니다.

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

**SSM 명령 문서 생성**  
[create-document](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html) 명령을 사용합니다. `--name`에 문서에 대한 설명이 포함된 이름을 지정합니다. `--document-type`에서 `Command`를 지정합니다. `--content`에 대해 SSM 문서 내용이 포함된 .yaml 파일의 경로를 지정합니다. `--tags`에서 `"Key=DLMScriptsAccess,Value=true"`를 지정합니다.

```
$ aws ssm create-document \
--content file://path/to/file/documentContent.yaml \
--name "document_name" \
--document-type "Command" \
--document-format YAML \
--tags "Key=DLMScriptsAccess,Value=true"
```

------

### 3단계: Amazon Data Lifecycle Manager IAM 역할 준비
<a name="prep-iam-role"></a>

**참고**  
이 단계는 다음과 같은 경우 필요합니다.  
사용자 지정 IAM 역할을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트합니다.
명령줄을 사용하여 기본값을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트합니다.
콘솔을 사용하여 스냅샷 관리를 위한 기본 역할(**AWSDataLifecycleManagerDefaultRole**)을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트하려면 이 단계를 건너뜁니다. 이 경우 **AWSDataLifecycleManagerSSMFullAccess** 정책을 해당 역할에 자동으로 연결합니다.

정책에 사용하는 IAM 역할이 Amazon Data Lifecycle Manager에 정책 대상 인스턴스에서 사전 및 사후 스크립트를 실행하는 데 필요한 SSM 작업을 수행할 수 있는 권한을 부여하는지 확인해야 합니다.

Amazon Data Lifecycle Manager는 필요한 권한이 포함된 관리형 정책(**AWSDataLifecycleManagerSSMFullAccess**)을 제공합니다. 이 정책을 스냅샷 관리를 위한 IAM 역할에 연결하여 권한이 포함되도록 할 수 있습니다.

**중요**  
AWSDataLifecycleManagerSSMFullAccess 관리형 정책은 사전 및 사후 스크립트를 사용할 때 `aws:ResourceTag` 조건 키를 사용하여 특정 SSM 문서에 대한 액세스를 제한합니다. Amazon Data Lifecycle Manager가 SSM 문서에 액세스할 수 있도록 하려면 SSM 문서에 `DLMScriptsAccess:true` 태그가 지정되어 있는지 확인해야 합니다.

또는 사용자 지정 정책을 수동으로 생성하거나 사용하는 IAM 역할에 필요한 권한을 직접 할당할 수 있습니다. AWSDataLifecycleManagerSSMFullAccess 관리형 정책에 정의된 동일한 권한을 사용할 수 있지만 `aws:ResourceTag` 조건 키는 선택 사항입니다. 해당 조건 키를 포함하지 않기로 결정하면 SSM 문서에 `DLMScriptsAccess:true`로 태그를 지정할 필요가 없습니다.

다음 방법 중 하나를 사용하여 IAM 역할에 **AWSDataLifecycleManagerSSMFullAccess** 정책을 추가합니다.

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

**사용자 지정 역할에 관리형 정책 연결**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 [**역할(Roles)**]을 선택합니다.

1. 스냅샷 관리를 위한 사용자 지정 역할을 검색하고 선택합니다.

1. **권한** 탭에서 **권한 추가**, **정책 연결**을 선택합니다.

1. **AWSDataLifecycleManagerSSMFullAccess** 관리형 정책을 검색하여 선택한 다음 **권한 추가**를 선택합니다.

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

**사용자 지정 역할에 관리형 정책 연결**  
[attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html) 명령을 사용합니다. `---role-name`에 대해 사용자 지정 역할의 이름을 지정합니다. `--policy-arn`에서 `arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess`를 지정합니다.

```
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess \
--role-name your_role_name
```

------

### 4단계: 스냅샷 수명 주기 정책 생성
<a name="prep-policy"></a>

애플리케이션에 일관되게 적용되는 스냅샷을 자동화하려면 인스턴스를 대상으로 하는 스냅샷 수명 주기 정책을 생성하고 해당 정책에 대한 사전 및 사후 스크립트를 구성해야 합니다.

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

**스냅샷 수명 주기 정책 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Elastic Block Store**, **Lifecycle Manager** 및 **수명 주기 정책 생성**을 차례로 선택합니다.

1. **정책 유형 선택(Select policy type)** 화면에서 **EBS 스냅샷 정책(EBS snapshot policy)**을 선택한 후 **다음(Next)**을 선택합니다.

1. **대상 리소스(Target resources)** 섹션에서 다음을 수행합니다.

   1. **대상 리소스 유형**에서는 `Instance`를 선택합니다.

   1. **대상 리소스 태그**에서 백업할 인스턴스를 식별하는 리소스 태그를 지정합니다. 지정된 태그가 있는 리소스만 백업됩니다.

1. **IAM 역할**에서 **AWSDataLifecycleManagerDefaultRole**(스냅샷 관리를 위한 기본 역할)을 선택하거나 사전 및 사후 스크립트용으로 생성하고 준비한 사용자 지정 역할을 선택합니다.

1. 필요에 따라 일정과 추가 옵션을 구성합니다. 유지 관리 기간과 같이 워크로드에 맞는 기간으로 스냅샷 생성 시간을 예약하는 것이 좋습니다.

   SAP HANA의 경우 빠른 스냅샷 복원을 활성화하는 것이 좋습니다.
**참고**  
VSS 백업에 대해 일정을 활성화하는 경우 **특정 데이터 볼륨 제외** 또는 **소스에서 태그 복사**를 활성화할 수 없습니다.

1. **사전 및 사후 스크립트** 섹션에서 **사전 및 사후 스크립트 활성화**를 선택하고 워크로드에 따라 다음을 수행합니다.
   + Windows 애플리케이션의 애플리케이션에 일관되게 적용되는 스냅샷을 생성하려면 **VSS 백업**을 선택합니다.
   + SAP HANA 워크로드의 애플리케이션에 일관되게 적용되는 스냅샷을 생성하려면 **SAP HANA**를 선택합니다.
   + 사용자 지정 SSM 문서를 사용하여 자체 관리형 MySQL, PostgreSQL 또는 InterSystems IRIS 데이터베이스를 비롯한 다른 모든 데이터베이스와 워크로드의 애플리케이션에 일관되게 적용되는 스냅샷을 생성하려면 **사용자 지정 SSM 문서**를 선택합니다.

     1. **자동화 옵션**에서 **사전 및 사후 스크립트**를 선택합니다.

     1. **SSM 문서**에서 준비한 SSM 문서를 선택합니다.

1. 선택한 옵션에 따라 다음과 같은 추가 옵션을 구성합니다.
   + **스크립트 제한 시간** - (*사용자 지정 SSM 문서에만 해당*) Amazon Data Lifecycle Manager에서 완료되지 않은 스크립트 실행 시도가 실패하기 전까지의 제한 시간입니다. 스크립트가 제한 시간 내에 완료되지 않으면 Amazon Data Lifecycle Manager에서 시도는 실패합니다. 제한 시간은 사전 스크립트와 사후 스크립트에 개별적으로 적용됩니다. 최소 및 기본 제한 시간은 10초입니다. 최대 제한 시간은 120초입니다.
   + **실패한 스크립트 재시도** - 제한 시간 내에 완료되지 않은 스크립트를 재시도하려면 이 옵션을 선택합니다. 사전 스크립트가 실패할 경우 Amazon Data Lifecycle Manager는 사전 및 사후 스크립트 실행을 포함하여 전체 스냅샷 생성 프로세스를 재시도합니다. 사후 스크립트가 실패할 경우 Amazon Data Lifecycle Manager는 사후 스크립트만 재시도합니다. 이 경우 사전 스크립트가 완료되고 스냅샷이 생성되었을 수 있습니다.
   + **중단 일관성 스냅샷으로 기본 설정** - 사전 스크립트 실행에 실패할 경우 중단 일관성 스냅샷을 기본값으로 설정하려면 이 옵션을 선택합니다. 이는 사전 및 사후 스크립트가 활성화되지 않은 경우 Amazon Data Lifecycle Manager의 기본 스냅샷 생성 동작입니다. 재시도를 활성화한 경우 Amazon Data Lifecycle Manager는 모든 재시도가 소진된 후에만 중단 일관성 스냅샷으로 기본 설정됩니다. 사전 스크립트가 실패하고 중단 일관성 스냅샷을 기본으로 설정하지 않으면 Amazon Data Lifecycle Manager는 해당 일정 실행 중에 인스턴스에 대한 스냅샷을 생성하지 않습니다.
**참고**  
SAP HANA용 스냅샷을 생성하는 경우 이 옵션을 비활성화하는 것이 좋습니다. SAP HANA 워크로드의 중단 일관성 스냅샷은 동일한 방식으로 복원할 수 없습니다.

1. **기본 정책 생성**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRole already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

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

**스냅샷 수명 주기 정책 생성**  
[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용하고 `CreateRule`에 `Scripts` 파라미터를 포함시킵니다. 파라미터에 대한 자세한 내용은 [https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html](https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html)를 확인하세요.

```
$ aws dlm create-lifecycle-policy \
--description "policy_description" \
--state ENABLED \
--execution-role-arn iam_role_arn \
--policy-details file://policyDetails.json
```

사용 사례에 따라 `policyDetails.json`에 다음 중 하나가 포함됩니다.
+ **VSS 백업**

  ```
  {
      "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
      "ResourceTypes": [
          "INSTANCE"
      ],
      "TargetTags": [{
          "Key": "tag_key",
          "Value": "tag_value"
      }],
      "Schedules": [{
          "Name": "schedule_name",
          "CreateRule": {
              "CronExpression": "cron_for_creation_frequency", 
              "Scripts": [{ 
                  "ExecutionHandler":"AWS_VSS_BACKUP",
                  "ExecuteOperationOnScriptFailure":true|false,
                  "MaximumRetryCount":retries (0-3)
              }]
          },
          "RetainRule": {
              "Count": retention_count
          }
      }]
  }
  ```
+ **SAP HANA 백업**

  ```
  {
      "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
      "ResourceTypes": [
          "INSTANCE"
      ],
      "TargetTags": [{
          "Key": "tag_key",
          "Value": "tag_value"
      }],
      "Schedules": [{
          "Name": "schedule_name",
          "CreateRule": {
              "CronExpression": "cron_for_creation_frequency", 
              "Scripts": [{ 
                  "Stages": ["PRE","POST"],
                  "ExecutionHandlerService":"AWS_SYSTEMS_MANAGER",
                  "ExecutionHandler":"AWSSystemsManagerSAP-CreateDLMSnapshotForSAPHANA",
                  "ExecuteOperationOnScriptFailure":true|false,
                  "ExecutionTimeout":timeout_in_seconds (10-120), 
                  "MaximumRetryCount":retries (0-3)
              }]
          },
          "RetainRule": {
              "Count": retention_count
          }
      }]
  }
  ```
+ **사용자 지정 SSM 문서**

  ```
  {
      "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
      "ResourceTypes": [
          "INSTANCE"
      ],
      "TargetTags": [{
          "Key": "tag_key",
          "Value": "tag_value"
      }],
      "Schedules": [{
          "Name": "schedule_name",
          "CreateRule": {
              "CronExpression": "cron_for_creation_frequency", 
              "Scripts": [{ 
                  "Stages": ["PRE","POST"],
                  "ExecutionHandlerService":"AWS_SYSTEMS_MANAGER",
                  "ExecutionHandler":"ssm_document_name|arn",
                  "ExecuteOperationOnScriptFailure":true|false,
                  "ExecutionTimeout":timeout_in_seconds (10-120), 
                  "MaximumRetryCount":retries (0-3)
              }]
          },
          "RetainRule": {
              "Count": retention_count
          }
      }]
  }
  ```

------

## Amazon Data Lifecycle Manager를 사용한 VSS 백업 고려 사항
<a name="app-consistent-vss"></a>

Amazon Data Lifecycle Manager를 사용하면 Amazon EC2 인스턴스에서 실행되는 VSS(Volume Shadow Copy Service) 지원 Windows 애플리케이션을 백업 및 복원할 수 있습니다. 애플리케이션에 Windows VSS에 등록된 VSS 작성기가 있는 경우 Amazon Data Lifecycle Manager는 해당 애플리케이션에 일관되게 적용되는 스냅샷을 생성합니다.

**참고**  
Amazon Data Lifecycle Manager는 현재 Amazon EC2에서 실행되는 리소스의 애플리케이션에 일관되게 적용되는 스냅샷만 지원합니다. 특히 기존 인스턴스를 백업에서 생성된 새 인스턴스로 교체하여 애플리케이션 데이터를 복원할 수 있는 백업 시나리오에 적합합니다. 모든 인스턴스 유형 또는 애플리케이션이 VSS 백업에 대해 지원되는 것은 아닙니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [애플리케이션에 일관되게 적용되는 Windows 스냅샷](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/application-consistent-snapshots.html)을 참조하세요.

**지원되지 않는 인스턴스 유형**  
다음 Amazon EC2 인스턴스 유형은 VSS 백업에 지원되지 않습니다. 정책이 이러한 인스턴스 유형 중 하나를 대상으로 하는 경우 Amazon Data Lifecycle Manager는 여전히 VSS 백업을 생성할 수 있지만 스냅샷에 필수 시스템 태그가 지정되지 않을 수 있습니다. 이러한 태그가 없으면 스냅샷은 생성 후 Amazon Data Lifecycle Manager에 의해 관리되지 않습니다. 이러한 스냅샷을 수동으로 삭제해야 할 수도 있습니다.
+ T3: `t3.nano` \$1 `t3.micro`
+ T3a: `t3a.nano` \$1 `t3a.micro`
+ T2: `t2.nano` \$1 `t2.micro`

## 애플리케이션에 일관되게 적용되는 스냅샷에 대한 공동 책임
<a name="shared-responsibility"></a>

**다음을 확인해야 합니다.**
+ 대상 인스턴스에서 SSM Agent가 설치되어 있고 최신 상태로 실행되고 있습니다.
+ Systems Manager는 대상 인스턴스에 대해 필요한 작업을 수행할 수 있는 권한이 있습니다.
+ Amazon Data Lifecycle Manager는 대상 인스턴스에서 사전 및 사후 스크립트를 실행하는 데 필요한 Systems Manager 작업을 수행할 권한이 있습니다.
+ 자체 관리형 MySQL, PostgreSQL 또는 InterSystems IRIS 데이터베이스와 같은 사용자 지정 워크로드의 경우 사용하는 SSM 문서에는 데이터베이스 구성의 I/O를 동결, 플러시 및 재개하는 데 필요한 올바른 조치가 포함되어 있습니다.
+ 스냅샷 생성 시간은 워크로드 일정에 따라 조정됩니다. 예를 들어, 예약된 유지 관리 기간 동안 스냅샷 생성을 예약해 보세요.

**Amazon Data Lifecycle Manager는 다음을 보장합니다.**
+ 예약된 스냅샷 생성 시간으로부터 60분 내에 스냅샷 생성이 시작됩니다.
+ 스냅샷 생성이 시작되기 전에 사전 스크립트가 실행됩니다.
+ 사전 스크립트가 성공하고 스냅샷 생성이 시작된 후 사후 스크립트가 실행됩니다. Amazon Data Lifecycle Manager는 사전 스크립트가 성공한 경우에만 사후 스크립트를 실행합니다. 사전 스크립트가 실패하는 경우 Amazon Data Lifecycle Manager는 사후 스크립트를 실행하지 않습니다.
+ 생성 시 스냅샷애 적절한 태그가 지정됩니다.
+ CloudWatch 지표 및 이벤트는 스크립트가 시작되거나 실패 또는 성공할 때 내보내지거나 발생합니다.

# Data Lifecycle Manager 사전 및 사후 스크립트의 기타 사용 사례
<a name="script-other-use-cases"></a>

사전 및 사후 스크립트를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷을 자동화하는 것 외에도 사전 및 사후 스크립트를 함께 사용하거나 개별적으로 사용하여 스냅샷 생성 전후에 다른 관리 작업을 자동화할 수 있습니다. 예제:
+ 스냅샷을 생성하기 전에 사전 스크립트를 사용하여 패치를 적용합니다. 이렇게 하면 정기 주간 또는 월간 소프트웨어 업데이트를 적용한 후 스냅샷을 생성할 수 있습니다.
**참고**  
사전 스크립트만 실행하도록 선택하면 **중단 일관성 스냅샷으로 기본 설정**이 활성화됩니다.
+ 스냅샷을 생성한 후 사후 스크립트를 사용하여 패치를 적용합니다. 이렇게 하면 정기 주간 또는 월간 소프트웨어 업데이트를 적용하기 전 스냅샷을 생성할 수 있습니다.

## 다른 사용 사례를 위한 시작하기
<a name="dlm-script-other"></a>

이 섹션에서는 **애플리케이션에 일관되게 적용되는 스냅샷 이외의 사용 사례**에 사전 및/또는 사후 스크립트를 사용할 때 수행해야 하는 단계를 설명합니다.

### 1단계: 대상 인스턴스 준비
<a name="dlm-script-other-prep-instance"></a>

**사전 및/또는 사후 스크립트를 위한 대상 인스턴스 준비**

1. SSM Agent가 아직 설치되지 않은 경우 대상 인스턴스에 SSM Agent를 설치합니다. SSM Agent가 대상 인스턴스에 이미 설치되어 있는 경우 이 단계를 건너뜁니다.
   + (Linux 인스턴스) [Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)
   + (Windows 인스턴스) [Windows Server용 EC2 인스턴스에서 SSM 에이전트 작업](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-windows.html)

1. SSM Agent가 실행 중인지 확인합니다. 자세한 내용은 [SSM Agent 상태 확인 및 에이전트 시작](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html)을 참조하세요.

1. Amazon EC2 인스턴스용 Systems Manager를 설정합니다. 자세한 내용은 **AWS Systems Manager 사용 설명서의 [Amazon EC2 인스턴스용 Systems Manager 설정](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html)을 참조하세요.

### 2단계: SSM 문서 준비
<a name="dlm-script-other-prep-document"></a>

실행하려는 명령과 함께 사전 및/또는 사후 스크립트를 포함하는 SSM 명령 문서를 생성해야 합니다.

아래의 빈 SSM 문서 템플릿을 사용하여 SSM 문서를 생성하고 해당 문서 섹션에 사전 및 사후 스크립트 명령을 추가할 수 있습니다.

**다음 사항에 유의하세요.**  
SSM 문서가 워크로드에 필요한 올바른 작업을 수행하는지 확인하는 것은 사용자의 책임입니다.
SSM 문서에는 `pre-script`, `post-script` 및 `dry-run`을 포함하여 `allowedValues`에 대한 필수 필드가 포함되어야 합니다. Amazon Data Lifecycle Manager는 이러한 섹션의 내용을 기반으로 인스턴스에서 명령을 실행합니다. SSM 문서에 이러한 섹션이 없는 경우 Amazon Data Lifecycle Manager는 해당 문서를 실패한 실행으로 간주합니다.

```
###===============================================================================###
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###===============================================================================###
schemaVersion: '2.2'
description: SSM Document Template for Amazon Data Lifecycle Manager Pre/Post script feature
parameters:
  executionId:
    type: String
    default: None
    description: (Required) Specifies the unique identifier associated with a pre and/or post execution
    allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$
  command:
  # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. 
  # 'dry-run' option is intended for validating the document execution without triggering any commands
  # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully 
  # trigger pre and post script actions.
    type: String
    default: 'dry-run'
    description: (Required) Specifies whether pre-script and/or post-script should be executed.
    allowedValues:
    - pre-script
    - post-script
    - dry-run

mainSteps:
- action: aws:runShellScript
  description: Run Database freeze/thaw commands
  name: run_pre_post_scripts
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - |
      #!/bin/bash

      ###===============================================================================###
      ### Error Codes
      ###===============================================================================###
      # The following Error codes will inform Data Lifecycle Manager of the type of error 
      # and help guide handling of the error. 
      # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field.
      # 1 Pre-script failed during execution - 201
      # 2 Post-script failed during execution - 202
      # 3 Auto thaw occurred before post-script was initiated - 203
      # 4 Pre-script initiated while post-script was expected - 204
      # 5 Post-script initiated while pre-script was expected - 205
      # 6 Application not ready for pre or post-script initiation - 206

      ###===============================================================================###
      ### Global variables
      ###===============================================================================###
      START=$(date +%s)
      # For testing this script locally, replace the below with OPERATION=$1.
      OPERATION={{ command }}

      # Add all pre-script actions to be performed within the function below
      execute_pre_script() {
          echo "INFO: Start execution of pre-script"
      }

      # Add all post-script actions to be performed within the function below
      execute_post_script() {
          echo "INFO: Start execution of post-script"
      }

      # Debug logging for parameters passed to the SSM document
      echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}"

      # Based on the command parameter value execute the function that supports 
      # pre-script/post-script operation
      case ${OPERATION} in
          pre-script)
              execute_pre_script
              ;;
          post-script)
              execute_post_script
              ;;
          dry-run)
              echo "INFO: dry-run option invoked - taking no action"
              ;;
          *)
              echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run."
              exit 1 # return failure
              ;;
      esac

      END=$(date +%s)
      # Debug Log for profiling the script time
      echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
```

### 3단계: Amazon Data Lifecycle Manager IAM 역할 준비
<a name="dlm-script-other-prep-role"></a>

**참고**  
이 단계는 다음과 같은 경우 필요합니다.  
사용자 지정 IAM 역할을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트합니다.
명령줄을 사용하여 기본값을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트합니다.
콘솔을 사용하여 스냅샷 관리를 위한 기본 역할(**AWSDataLifecycleManagerDefaultRole**)을 사용하는 사전/사후 스크립트 지원 스냅샷 정책을 생성하거나 업데이트하려면 이 단계를 건너뜁니다. 이 경우 **AWSDataLifecycleManagerSSMFullAccess** 정책을 해당 역할에 자동으로 연결합니다.

정책에 사용하는 IAM 역할이 Amazon Data Lifecycle Manager에 정책 대상 인스턴스에서 사전 및 사후 스크립트를 실행하는 데 필요한 SSM 작업을 수행할 수 있는 권한을 부여하는지 확인해야 합니다.

Amazon Data Lifecycle Manager는 필요한 권한이 포함된 관리형 정책(**AWSDataLifecycleManagerSSMFullAccess**)을 제공합니다. 이 정책을 스냅샷 관리를 위한 IAM 역할에 연결하여 권한이 포함되도록 할 수 있습니다.

**중요**  
AWSDataLifecycleManagerSSMFullAccess 관리형 정책은 사전 및 사후 스크립트를 사용할 때 `aws:ResourceTag` 조건 키를 사용하여 특정 SSM 문서에 대한 액세스를 제한합니다. Amazon Data Lifecycle Manager가 SSM 문서에 액세스할 수 있도록 하려면 SSM 문서에 `DLMScriptsAccess:true` 태그가 지정되어 있는지 확인해야 합니다.

또는 사용자 지정 정책을 수동으로 생성하거나 사용하는 IAM 역할에 필요한 권한을 직접 할당할 수 있습니다. AWSDataLifecycleManagerSSMFullAccess 관리형 정책에 정의된 동일한 권한을 사용할 수 있지만 `aws:ResourceTag` 조건 키는 선택 사항입니다. 해당 조건 키를 사용하지 않기로 결정하면 SSM 문서에 `DLMScriptsAccess:true`로 태그를 지정할 필요가 없습니다.

다음 방법 중 하나를 사용하여 IAM 역할에 **AWSDataLifecycleManagerSSMFullAccess** 정책을 추가합니다.

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

**사용자 지정 역할에 관리형 정책 연결**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 [**역할(Roles)**]을 선택합니다.

1. 스냅샷 관리를 위한 사용자 지정 역할을 검색하고 선택합니다.

1. **권한** 탭에서 **권한 추가**, **정책 연결**을 선택합니다.

1. **AWSDataLifecycleManagerSSMFullAccess** 관리형 정책을 검색하여 선택한 다음 **권한 추가**를 선택합니다.

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

**사용자 지정 역할에 관리형 정책 연결**  
[attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html) 명령을 사용합니다. `---role-name`에 대해 사용자 지정 역할의 이름을 지정합니다. `--policy-arn`에서 `arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess`를 지정합니다.

```
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess \
--role-name your_role_name
```

------

### 스냅샷 수명 주기 정책 생성
<a name="dlm-script-other-prep-policy"></a>

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

**스냅샷 수명 주기 정책 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Elastic Block Store**, **Lifecycle Manager** 및 **수명 주기 정책 생성**을 차례로 선택합니다.

1. **정책 유형 선택(Select policy type)** 화면에서 **EBS 스냅샷 정책(EBS snapshot policy)**을 선택한 후 **다음(Next)**을 선택합니다.

1. **대상 리소스(Target resources)** 섹션에서 다음을 수행합니다.

   1. **대상 리소스 유형**에서는 `Instance`를 선택합니다.

   1. **대상 리소스 태그**에서 백업할 인스턴스를 식별하는 리소스 태그를 지정합니다. 지정된 태그가 있는 리소스만 백업됩니다.

1. **IAM 역할**에서 **AWSDataLifecycleManagerDefaultRole**(스냅샷 관리를 위한 기본 역할)을 선택하거나 사전 및 사후 스크립트용으로 생성하고 준비한 사용자 지정 역할을 선택합니다.

1. 필요에 따라 일정과 추가 옵션을 구성합니다. 유지 관리 기간과 같이 워크로드에 맞는 기간으로 스냅샷 생성 시간을 예약하는 것이 좋습니다.

1. **사전 및 사후 스크립트** 섹션에서 **사전 및 사후 스크립트 활성화**를 선택하고 다음을 수행합니다.

   1. **사용자 지정 SSM 문서**를 선택합니다.

   1. **자동화 옵션**에서 실행하려는 스크립트와 일치하는 옵션을 선택합니다.

   1. **SSM 문서**에서 준비한 SSM 문서를 선택합니다.

1. 필요한 경우 다음과 같은 추가 옵션을 구성합니다.
   + **스크립트 제한 시간** - Amazon Data Lifecycle Manager에서 완료되지 않은 스크립트 실행 시도가 실패하기 전까지의 제한 시간입니다. 스크립트가 제한 시간 내에 완료되지 않으면 Amazon Data Lifecycle Manager에서 시도는 실패합니다. 제한 시간은 사전 스크립트와 사후 스크립트에 개별적으로 적용됩니다. 최소 및 기본 제한 시간은 10초입니다. 최대 제한 시간은 120초입니다.
   + **실패한 스크립트 재시도** - 제한 시간 내에 완료되지 않은 스크립트를 재시도하려면 이 옵션을 선택합니다. 사전 스크립트가 실패할 경우 Amazon Data Lifecycle Manager는 사전 및 사후 스크립트 실행을 포함하여 전체 스냅샷 생성 프로세스를 재시도합니다. 사후 스크립트가 실패할 경우 Amazon Data Lifecycle Manager는 사후 스크립트만 재시도합니다. 이 경우 사전 스크립트가 완료되고 스냅샷이 생성되었을 수 있습니다.
   + **중단 일관성 스냅샷으로 기본 설정** - 사전 스크립트 실행에 실패할 경우 중단 일관성 스냅샷을 기본값으로 설정하려면 이 옵션을 선택합니다. 이는 사전 및 사후 스크립트가 활성화되지 않은 경우 Amazon Data Lifecycle Manager의 기본 스냅샷 생성 동작입니다. 재시도를 활성화한 경우 Amazon Data Lifecycle Manager는 모든 재시도가 소진된 후에만 중단 일관성 스냅샷으로 기본 설정됩니다. 사전 스크립트가 실패하고 중단 일관성 스냅샷을 기본으로 설정하지 않으면 Amazon Data Lifecycle Manager는 해당 일정 실행 중에 인스턴스에 대한 스냅샷을 생성하지 않습니다.

1. **기본 정책 생성**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRole already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

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

**스냅샷 수명 주기 정책 생성**  
[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용하고 `CreateRule`에 `Scripts` 파라미터를 포함시킵니다. 파라미터에 대한 자세한 내용은 [https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html](https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html)를 확인하세요.

```
$ aws dlm create-lifecycle-policy \
--description "policy_description" \
--state ENABLED \
--execution-role-arn iam_role_arn \
--policy-details file://policyDetails.json
```

여기에서 `policyDetails.json`은 다음을 포함합니다.

```
{
    "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
    "ResourceTypes": [
        "INSTANCE"
    ],
    "TargetTags": [{
        "Key": "tag_key",
        "Value": "tag_value"
    }],
    "Schedules": [{
        "Name": "schedule_name",
        "CreateRule": {
            "CronExpression": "cron_for_creation_frequency", 
            "Scripts": [{ 
                "Stages": ["PRE" | "POST" | "PRE","POST"],
                "ExecutionHandlerService":"AWS_SYSTEMS_MANAGER",
                "ExecutionHandler":"ssm_document_name|arn",
                "ExecuteOperationOnScriptFailure":true|false,
                "ExecutionTimeout":timeout_in_seconds (10-120), 
                "MaximumRetryCount":retries (0-3)
            }]
        },
        "RetainRule": {
            "Count": retention_count
        }
    }]
}
```

------

# Amazon Data Lifecycle Manager 사전 및 사후 스크립트 작동 방식
<a name="script-flow"></a>

다음 이미지는 사용자 지정 SSM 문서를 사용할 때의 사전 및 사후 스크립트의 프로세스 흐름을 보여줍니다. 이것이 VSS 백업에 적용되지는 않습니다.

![\[Amazon Data Lifecycle Manager 사전 및 사후 스크립트 프로세스 흐름\]](http://docs.aws.amazon.com/ko_kr/ebs/latest/userguide/images/dlm-scripts.png)


예약된 스냅샷 생성 시간에 다음과 같은 작업과 교차 서비스 상호 작용이 발생합니다.

1. Amazon Data Lifecycle Manager는 SSM 문서를 호출하고 `pre-script` 파라미터를 전달하여 사전 스크립트 작업을 시작합니다.
**참고**  
1\$13단계는 사전 스크립트를 실행하는 경우에만 발생합니다. 사후 스크립트만 실행하는 경우 1\$13단계는 생략됩니다.

1. Systems Manager는 대상 인스턴스에서 실행 중인 SSM Agent에 사전 스크립트 명령을 전송합니다. SSM Agent는 인스턴스에서 명령을 실행하고 상태 정보를 Systems Manager로 다시 전송합니다.

   예를 들어, SSM 문서를 사용하여 애플리케이션에 일관되게 적용되는 스냅샷을 생성하는 경우 스냅샷을 찍기 전에 모든 버퍼링된 데이터가 볼륨에 기록되도록 사전 스크립트가 I/O를 중지하고 플러시할 수 있습니다.

1. Systems Manager는 사전 스크립트 명령 상태 업데이트를 Amazon Data Lifecycle Manager로 전송합니다. 사전 스크립트가 실패하면 Amazon Data Lifecycle Manager는 사전 및 사후 스크립트 옵션을 구성하는 방법에 따라 다음 작업 중 하나를 수행합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/ebs/latest/userguide/script-flow.html)

1. Amazon Data Lifecycle Manager가 스냅샷 생성을 시작합니다.

1. Amazon Data Lifecycle Manager는 SSM 문서를 호출하고 `post-script` 파라미터를 전달하여 사후 스크립트 작업을 시작합니다.
**참고**  
5\$17단계는 사전 스크립트를 실행하는 경우에만 발생합니다. 사후 스크립트만 실행하는 경우 1\$13단계는 생략됩니다.

1. Systems Manager는 대상 인스턴스에서 실행 중인 SSM Agent에 사후 스크립트 명령을 전송합니다. SSM Agent는 인스턴스에서 명령을 실행하고 상태 정보를 Systems Manager로 다시 전송합니다.

   예를 들어, SSM 문서에서 애플리케이션에 일관되게 적용되는 스냅샷을 지원하는 경우 이 사후 스크립트는 I/O를 재개하여 스냅샷이 생성된 후 데이터베이스가 정상적인 I/O 작업을 재개하도록 할 수 있습니다.

1. 사후 스크립트를 실행하고 Systems Manager가 성공적으로 완료되었다고 표시하면 프로세스가 완료됩니다.

   사후 스크립트가 실패하면 Amazon Data Lifecycle Manager는 사전 및 사후 스크립트 옵션을 구성하는 방법에 따라 다음 작업 중 하나를 수행합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/ebs/latest/userguide/script-flow.html)

   단, 사후 스크립트가 실패하면 사전 스크립트(활성화된 경우)가 성공적으로 완료되어 스냅샷이 생성되었을 수 있다는 점에 유의하세요. 인스턴스가 예상대로 작동하는지 확인하기 위해 추가 조치를 취해야 할 수도 있습니다. 예를 들어, 사전 스크립트가 I/O를 일시 중지하고 플러시했지만 사후 스크립트가 I/O를 재개하지 못한 경우 I/O를 자동 재개하도록 데이터베이스를 구성하거나 I/O를 수동으로 재개해야 할 수 있습니다.

1. 사후 스크립트가 완료된 후 스냅샷 생성 프로세스가 완료될 수 있습니다. 스냅샷을 완료하는 데 걸리는 시간은 스냅샷 크기에 따라 다릅니다.

# Data Lifecycle Manager 사전 및 사후 스크립트로 생성된 스냅샷 식별
<a name="dlm-script-tags"></a>

Amazon Data Lifecycle Manager는 사전 및 사후 스크립트로 생성된 스냅샷에 다음과 같은 시스템 태그를 자동으로 할당합니다.
+ 키: `aws:dlm:pre-script`, 값: `SUCCESS`\$1`FAILED`

  태그 값이 `SUCCESS`이면 사전 스크립트가 성공적으로 실행된 것입니다. 태그 값이 `FAILED`이면 사전 스크립트가 성공적으로 실행되지 않은 것입니다.
+ 키: `aws:dlm:post-script`, 값: `SUCCESS`\$1`FAILED`

  태그 값이 `SUCCESS`이면 사후 스크립트가 성공적으로 실행된 것입니다. 태그 값이 `FAILED`이면 사후 스크립트가 성공적으로 실행되지 않은 것입니다.

사용자 지정 SSM 문서 및 SAP HANA 백업의 경우 스냅샷에 `aws:dlm:pre-script:SUCCESS`와 `aws:dlm:post-script:SUCCESS` 태그가 모두 지정된 경우 애플리케이션에 일관되게 적용되는 스냅샷이 성공적으로 생성되었는지 유추할 수 있습니다.

또한 VSS 백업을 사용하여 생성된 애플리케이션에 일관되게 적용되는 스냅샷에는 다음 태그가 자동으로 지정됩니다.
+ 키: `AppConsistent tag`, 값: `true`\$1`false`

  태그 값이 `true`이면 VSS 백업이 성공했고 스냅샷이 애플리케이션에 일관되게 적용되는 것입니다. 태그 값이 `false`이면 VSS 백업이 실패했고 스냅샷이 애플리케이션에 일관되게 적용되지 않는 것입니다.

# Amazon Data Lifecycle Manager 사전 및 사후 스크립트 모니터링
<a name="dlm-script-monitoring"></a>

**Amazon CloudWatch 지표**  
Amazon Data Lifecycle Manager는 사전/사후 스크립트가 실패하고 성공할 때와 VSS 백업이 실패하고 성공할 때 다음과 같은 CloudWatch 지표를 게시합니다.
+ `PreScriptStarted`
+ `PreScriptCompleted`
+ `PreScriptFailed`
+ `PostScriptStarted`
+ `PostScriptCompleted`
+ `PostScriptFailed`
+ `VSSBackupStarted`
+ `VSSBackupCompleted`
+ `VSSBackupFailed`

자세한 내용은 [CloudWatch를 사용하여 Data Lifecycle Manager 정책 모니터링](monitor-dlm-cw-metrics.md) 단원을 참조하십시오.

**Amazon EventBridge**  
Amazon Data Lifecycle Manager는 사전 또는 사후 스크립트가 시작, 성공 또는 실패할 때 다음과 같은 Amazon EventBridge 이벤트를 발생시킵니다.
+ `DLM Pre Post Script Notification`

자세한 내용은 [EventBridge를 사용하여 Data Lifecycle Manager 정책 모니터링](monitor-cloudwatch-events.md) 단원을 참조하십시오.

# EBS 지원 AMI에 대한 Amazon Data Lifecycle Manager 사용자 지정 정책 생성
<a name="ami-policy"></a>

다음 절차에서는 Amazon Data Lifecycle Manager를 사용하여 EBS 지원 AMI 수명 주기를 자동화하는 방법을 보여줍니다.

**Topics**
+ [AMI 수명 주기 정책 생성](#create-ami-policy)
+ [AMI 수명 주기 정책 고려 사항](#ami-considerations)
+ [추가 리소스](#ami-additional-resources)

## AMI 수명 주기 정책 생성
<a name="create-ami-policy"></a>

다음 절차 중 하나를 사용하여 AMI 수명 주기 정책을 생성합니다.

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

**AMI 정책을 생성하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 [**Elastic Block Store**], [**Lifecycle Manager**] 및 [**수명 주기 정책 생성**]을 차례로 선택합니다.

1. [**정책 유형 선택(Select policy type)**] 화면에서 [**EBS 지원 AMI 정책(EBS-backed AMI policy)**]을 선택한 후 [**다음(Next)**]을 선택합니다.

1. [**대상 리소스(Target resources)**] 섹션의 [**대상 리소스 태그(Target resource tags)**]에서 백업할 볼륨 또는 인스턴스를 식별하는 리소스 태그를 선택합니다. 지정한 태그 키 및 값 페어가 있는 리소스만 정책에 의해 백업됩니다.

1. [**설명(Description)**]에 정책에 대한 간략한 설명을 입력합니다.

1. [**IAM 역할(IAM role)**]에서 AMI 및 스냅샷을 관리하고 인스턴스를 설명할 권한이 있는 IAM 역할을 선택합니다. Amazon Data Lifecycle Manager가 제공하는 기본 역할을 사용하려면 [**기본 역할(Default role)**]을 선택합니다. 또는 이전에 생성한 사용자 지정 IAM 역할을 사용하려면 [**다른 역할 선택(Choose another role)**]을 선택하고 사용할 역할을 선택합니다.

1. [**정책 태그(Policy tags)**]에서 수명 주기 정책에 적용할 태그를 추가합니다. 이 태그를 사용하여 정책을 식별 및 분류할 수 있습니다.

1. [**생성 후 정책 상태(Policy status after creation)**]에서 [**정책 활성화(Enable policy)**]를 선택하여 다음 예약 시간에 정책 실행을 시작하거나, [**정책 비활성화(Disable policy)**]를 선택하여 정책을 실행하지 않습니다. 지금 정책을 활성화하지 않으면 생성 후 수동으로 활성화할 때까지 AMI 생성이 시작되지 않습니다.

1. [**인스턴스 재부팅(Instance reboot)**] 섹션에서 AMI 생성 전에 인스턴스를 재부팅해야 할지 여부를 지정합니다. 대상 인스턴스가 재부팅되지 않도록 하려면 [**아니요(No)**]를 선택합니다. [**아니요(No)**]를 선택하면 데이터 일관성 문제가 발생할 수 있습니다. AMI 생성 전에 인스턴스를 재부팅하려면 [**예(Yes)**]를 선택합니다. 이 옵션을 선택하면 데이터 일관성이 보장되지만 여러 대상 인스턴스가 동시에 재부팅될 수 있습니다.

1. [**다음(Next)**]을 선택합니다.

1. [**일정 구성(Configure schedule)**] 화면에서 정책 일정을 구성합니다. 정책에는 최대 4개의 일정을 구성할 수 있습니다. 일정 1은 필수입니다. 일정 2, 3, 4는 선택 사항입니다. 추가한 각 정책 일정에 대해 다음을 수행합니다.

   1. **일정 세부 정보(Schedule details)** 섹션에서 다음을 수행합니다.

      1. **일정 이름(Schedule name)**에 일정을 설명하는 이름을 지정합니다.

      1. **빈도(Frequency)** 및 관련 필드에서 정책 실행 간격을 구성합니다.

         매일, 매주, 매월 또는 매년 일정에 따라 정책 실행을 구성할 수 있습니다. 또는 **사용자 지정 cron 표현식(Custom cron expression)**을 선택하여 최대 1년의 간격을 지정합니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Cron 및 rate 표현식](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html)을 참조하세요.

      1. [**시작 시간(Starting at)**]에서 정책 실행을 시작할 시간을 지정합니다. 첫 번째 정책 실행은 예약하는 시간 후 한 시간 이내에 시작됩니다. 시간은 `hh:mm` UTC 형식으로 입력해야 합니다.

      1. [**보존 유형(Retention type)**]에서 일정에 따라 생성되는 AMI의 보존 정책을 지정합니다.

         총 수 또는 수명을 기준으로 AMI를 보존할 수 있습니다.

         개수 기반 보존의 경우 범위는 `1`에서 `1000`까지입니다. 최대 수에 도달한 후에는 새 AMI를 생성할 때 가장 오래된 AMI가 등록 해제됩니다.

         수명을 기준으로 보존하는 경우 범위는 `1`일에서 `100`년까지입니다. 각 AMI의 보존 기간이 만료되면 AMI가 등록 해제됩니다.
**참고**  
모든 일정은 동일한 보존 유형을 가져야 합니다. 일정 1에 대해서만 보존 유형을 지정할 수 있습니다. 일정 2, 3, 4는 일정 1에서 보존 유형을 상속합니다. 각 일정에는 고유한 보존 횟수 또는 기간이 있을 수 있습니다.

   1. AMI에 대한 태깅을 구성합니다.

      [**태깅(Tagging)**] 섹션에서 다음을 수행합니다.

      1. 일정에 따라 소스 인스턴스에서 사용자 정의 태그를 모두 AMI로 복사하려면 [**소스에서 태그 복사(Copy tags from source)**]를 선택합니다.

      1. 기본적으로 일정에 따라 생성되는 AMI에는 소스 인스턴스의 ID가 자동으로 태깅됩니다. 이 자동 태깅이 발생하지 않도록 하려면 [**가변 태그(Variable tags)**]를 선택한 다음 `instance-id:$(instance-id)` 타일을 선택합니다.

      1. 이 일정에 따라 생성된 AMI에 할당할 추가 태그를 지정하려면 [**태그 추가(Add tags)**]를 선택합니다.

   1. AMI 사용 중단을 구성합니다.

      더 이상 사용하지 않아야 할 AMI를 사용 중단하려면 **AMI 사용 중단(AMI deprecation)** 섹션에서 **이 일정에 대해 AMI 사용 중단 사용(Enable AMI deprecation for this schedule)**을 선택한 다음 AMI 사용 중단 규칙을 지정합니다. AMI 사용 중단 규칙은 AMI가 사용 중단되는 시점을 지정합니다.

      일정에 개수 기준 AMI 보존을 사용하는 경우 사용 중단할 가장 오래된 AMI 수를 지정해야 합니다. 사용 중단 수는 일정의 AMI 보존 수보다 작거나 같아야 하며 1,000보다 클 수 없습니다. 예를 들어 최대 5개의 AMI를 보존하도록 일정이 구성된 경우 가장 오래된 AMI를 최대 5개까지 사용 중단하도록 일정을 구성할 수 있습니다.

      일정에 경과 시간 기준 AMI 보존을 사용하는 경우 AMI가 사용 중단되기까지의 기간을 지정해야 합니다. 사용 중단 수는 일정의 AMI 보존 수보다 작거나 같아야 하며 10년(120개월, 520주 또는 3,650일)보다 클 수 없습니다. 예를 들어 10일 동안 AMI를 보존하도록 일정이 구성된 경우, 생성된 날로부터 최대 10일 후에 AMI를 사용 중단하도록 일정을 구성할 수 있습니다.

   1. 크로스 리전 복사를 구성합니다.

      일정에 따라 생성된 AMI를 다른 리전에 복사하려면 [**리전 간 복사(Cross-Region copy)**] 섹션에서 [**리전 간 복사 활성화(Enable cross-Region copy)**]를 선택합니다. 계정에서 최대 3개의 추가 리전에 AMI를 복사할 수 있습니다. 각 대상 리전에 대해 별도의 리전 간 복사 규칙을 지정해야 합니다.

      각 대상 리전에 대해 다음을 지정할 수 있습니다.
      + AMI 사본의 보존 정책. 이 보존 기간이 만료되면 대상 리전의 사본이 자동으로 등록 취소됩니다.
      + AMI 사본의 암호화 상태. 소스 AMI가 암호화되거나 암호화가 기본적으로 활성화된 경우 복사된 AMI가 항상 암호화됩니다. 소스 AMI가 암호화되어 있지 않고 암호화가 기본적으로 비활성화된 경우 선택적으로 암호화를 사용할 수 있습니다. KMS 키를 지정하지 않은 경우 AMI는 각 대상 리전에서 EBS 암호화의 기본 KMS 키를 사용하여 암호화됩니다. 대상 리전에 대한 KMS 키를 지정하는 경우 선택한 IAM 역할에 KMS 키에 대한 액세스 권한이 있어야 합니다.
      + AMI 사본의 사용 중단 규칙. 사용 중단 기간이 만료되면 AMI 사본은 자동으로 사용 중단됩니다. 사용 중단 기간은 사본 보존 기간보다 작거나 같아야 하며 10년보다 클 수 없습니다.
      + 소스 AMI에서 모든 태그를 복사할지 아니면 태그를 복사하지 않을지 여부.
**참고**  
리전당 동시 AMI 복사본 수를 초과해서는 안 됩니다.

   1. 일정을 더 추가하려면 화면 상단에서 [**다른 일정 추가(Add another schedule)**]를 선택합니다. 각 추가 일정에 대해, 이 주제의 앞부분에서 설명한 대로 필드를 작성합니다.

   1. 필요한 일정을 추가한 후 [**정책 검토(Review policy)**]를 선택합니다.

1. 정책 요약을 검토한 다음 **정책 생성(Create policy)**을 선택합니다.
**참고**  
`Role with name AWSDataLifecycleManagerDefaultRoleForAMIManagement already exists` 오류가 발생하는 경우 자세한 내용은 [Amazon Data Lifecycle Manager 문제 해결](dlm-troubleshooting.md) 섹션을 참조하세요.

------
#### [ Command line ]

[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용하여 AMI 수명 주기 정책을 생성합니다. `PolicyType`에 `IMAGE_MANAGEMENT`을 지정합니다.

**참고**  
구문을 단순화하기 위해 다음 예에서는 정책 세부 정보가 포함된 JSON 파일(`policyDetails.json`)을 사용합니다.

**예 1: 경과 시간 기준 보존 및 AMI 사용 중단**  
이 예제에서는 대상 인스턴스를 재부팅하지 않고 값이 `purpose`인 `production` 태그 키가 있는 모든 인스턴스의 AMI를 생성하는 AMI 수명 주기 정책을 만듭니다. 이 정책에는 매일 `01:00` UTC에 AMI를 생성하는 하나의 일정이 포함됩니다. 이 정책은 AMI를 `2`일 동안 보존하며 `1`일 후에 사용 중단합니다. 또한 소스 인스턴스의 태그를 생성하는 AMI에 복사합니다.

```
aws dlm create-lifecycle-policy \
    --description "My AMI policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRoleForAMIManagement \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "IMAGE_MANAGEMENT",
    "ResourceTypes": [
        "INSTANCE"
    ],
    "TargetTags": [{
        "Key": "purpose",
        "Value": "production"
    }],
    "Schedules": [{
            "Name": "DailyAMIs",
            "TagsToAdd": [{
                "Key": "type",
                "Value": "myDailyAMI"
            }],
            "CreateRule": {
                "Interval": 24,
                "IntervalUnit": "HOURS",
                "Times": [
                    "01:00"
                ]
            },
            RetainRule":{
                "Interval" : 2,
                "IntervalUnit" : "DAYS"
            },
            DeprecateRule": {
                "Interval" : 1,
                "IntervalUnit" : "DAYS"
            },
            "CopyTags": true
        }
    ],
    "Parameters" : {
        "NoReboot":true
    }
}
```

요청이 성공하면 명령은 새로 생성된 정책의 ID를 반환합니다. 다음은 예제 출력입니다.

```
{
   "PolicyId": "policy-9876543210abcdef0"
}
```

**예 2: 교차 리전 복사를 사용한 개수 기준 보존 및 AMI 사용 중단**  
이 예에서는 값이 `production`인 `purpose` 태그 키가 있는 모든 인스턴스의 AMI를 생성하고 대상 인스턴스를 재부팅하는 AMI 수명 주기 정책을 생성합니다. 이 정책에는 매일 `17:30` UTC에 `6`시간마다 AMI를 생성하는 하나의 일정이 포함됩니다. 이 정책은 `3`개의 AMI를 보존하며 가장 오래된 `2`개의 AMI를 자동으로 사용 중단합니다. 또한 AMI를 `us-east-1`에 복사하고, `2`개의 AMI 사본을 보존하며, 가장 오래된 AMI를 자동으로 사용 중단하는 교차 리전 복사 규칙이 포함되어 있습니다.

```
aws dlm create-lifecycle-policy \
    --description "My AMI policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRoleForAMIManagement \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 예입니다.

```
{
    "PolicyType": "IMAGE_MANAGEMENT",
    "ResourceTypes" : [
        "INSTANCE"
    ],
    "TargetTags": [{
        "Key":"purpose", 
        "Value":"production"
    }],
    "Parameters" : {
          "NoReboot": true
    },
    "Schedules" : [{
        "Name" : "Schedule1",
        "CopyTags": true,
        "CreateRule" : {
            "Interval": 6,
            "IntervalUnit": "HOURS",
            "Times" : ["17:30"]
        },
        "RetainRule":{
            "Count" : 3
        },
        "DeprecateRule":{
            "Count" : 2
        },
        "CrossRegionCopyRules": [{
            "TargetRegion": "us-east-1",
            "Encrypted": true,
            "RetainRule":{
                "IntervalUnit": "DAYS",
                "Interval": 2
            },
            "DeprecateRule":{
                "IntervalUnit": "DAYS",
                "Interval": 1
            },
            "CopyTags": true
        }]
    }]
}
```

------

## AMI 수명 주기 정책 고려 사항
<a name="ami-considerations"></a>

다음은 AMI 수명 주기 정책 생성에 적용되는 **일반적인 고려 사항**입니다.
+ AMI 수명 주기 정책은 정책과 동일한 리전에 있는 인스턴스만 대상으로 합니다.
+ 지정된 시작 시간 후 1시간 내에 첫 번째 AMI 생성 작업이 시작됩니다. 후속 AMI 생성 작업은 예약된 시간으로부터 1시간 이내에 시작됩니다.
+ Amazon Data Lifecycle Manager AMI의 등록을 취소하면 백업 스냅샷이 자동으로 삭제됩니다.
+ 대상 리소스 태그는 대소문자를 구분합니다.
+ 정책의 대상이 되는 인스턴스에서 대상 태그를 제거할 경우, Amazon Data Lifecycle Manager는 표준 티어의 기존 AMI를 더 이상 관리하지 않습니다. 따라서 더 이상 필요하지 않은 경우 수동으로 AMI를 삭제해야 합니다.
+ 인스턴스를 백업하도록 여러 정책을 생성할 수 있습니다. 인스턴스에 12시간마다 AMI를 만드는 정책 *A*의 대상 태그인 태그 *A*와 24시간마다 AMI를 만드는 정책 *B*의 대상 태그인 태그 *B*, 이렇게 2개의 태그가 있다면 Amazon Data Lifecycle Manager는 양쪽 정책의 일정에 따라 AMI를 생성합니다. 여러 일정이 있는 단일 정책을 생성해도 동일한 결과를 얻을 수 있습니다. 예를 들어 태그 *A*만 대상으로 지정하는 단일 정책을 생성하고 12시간 간격과 24시간 간격의 2개 일정을 지정할 수 있습니다.
+ 정책이 생성된 후 대상 인스턴스에 연결된 새 볼륨은 다음 정책 실행 시 백업에 자동으로 포함됩니다. 정책이 실행되면 인스턴스에 연결된 모든 볼륨이 포함됩니다.
+ 사용자 지정 cron 기반 예약이 있는 정책이 단일 AMI만 생성하도록 구성된 경우 이 정책은 보존 임계값에 도달할 때 AMI를 자동으로 등록 취소하지 않습니다. 더 이상 필요하지 않은 경우 마지막 AMI를 수동으로 등록 취소해야 합니다.
+ 보존 기간이 생성 빈도보다 짧은 경과 시간 기반 정책을 생성할 경우, Amazon Data Lifecycle Manager는 항상 다음 AMI가 생성될 때까지 마지막 AMI를 보존합니다. 예를 들어 경과 시간 기반 정책에서 보존 기간이 7일인 AMI를 매달 한 개씩 생성하는 경우, 보존 기간이 7일이더라도 Amazon Data Lifecycle Manager는 각 AMI를 한 달 동안 보존합니다.
+ 수량 기반 정책의 경우 Amazon Data Lifecycle Manager는 보존 정책에 따라 가장 오래된 AMI의 등록을 취소하기 전에 항상 생성 빈도에 따라 AMI를 생성합니다.
+ AMI를 등록 취소하고 관련 기반 스냅샷을 삭제하는 데 몇 시간이 걸릴 수 있습니다. 이전에 생성한 AMI의 등록이 취소되기 전에 Amazon Data Lifecycle Manager가 다음 AMI를 생성할 경우, 일시적으로 보존 수량보다 많은 AMI를 보존하게 될 수 있습니다.

다음은 **정책에 의해 대상으로 지정된 인스턴스 종료**에 적용되는 고려 사항입니다.
+ 개수 기반 보존 일정을 사용하는 정책에 의해 대상으로 지정된 인스턴스를 종료할 경우, 이전에 종료된 인스턴스에서 생성한 AMI는 더 이상 정책으로 관리되지 않습니다. 더 이상 필요하지 않은 이전의 AMI는 수동으로 등록 취소해야 합니다.
+ 연령 기반 보존 일정을 사용하는 정책에 의해 대상으로 지정된 인스턴스를 종료할 경우, 정책은 이전에 정의된 일정의 종료된 인스턴스에서 생성된 AMI를 계속 등록 취소합니다(마지막 AMI 제외). 더 이상 필요하지 않은 경우 마지막 AMI를 수동으로 등록 취소해야 합니다.

다음 고려 사항은 AMI 정책 및 **AMI 사용 중단**에 적용됩니다.
+ 개수 기준 보존이 적용된 일정에 대한 AMI 사용 중단 수를 늘리면 해당 일정에 의해 생성된 모든 AMI(기존 및 신규)에 변경 사항이 적용됩니다.
+ 경과 시간 기반 보존 일정에서 AMI 사용 중단 기간을 늘리면 변경 사항은 새 AMI에만 적용됩니다. 기존 AMI는 영향을 받지 않습니다.
+ 일정에서 AMI 사용 중단 규칙을 제거해도 Amazon Data Lifecycle Manager는 이전에 해당 일정에 의해 사용 중단된 AMI의 사용 중단을 취소하지 않습니다.
+ 일정의 AMI 사용 중단 수 또는 기간을 줄여도 Amazon Data Lifecycle Manager는 이전에 해당 일정에 의해 사용 중단된 AMI의 사용 중단을 취소하지 않습니다.
+ AMI 정책에 의해 생성된 AMI를 수동으로 사용 중단할 경우 Amazon Data Lifecycle Manager는 사용 중단을 재정의하지 않습니다.
+ AMI 정책에 의해 이전에 생성된 AMI의 사용 중단을 수동으로 취소할 경우 Amazon Data Lifecycle Manager는 취소를 재정의하지 않습니다.
+ 충돌하는 여러 일정에 의해 AMI가 생성되고 하나 이상의 일정에 AMI 사용 중단 규칙이 없는 경우 Amazon Data Lifecycle Manager는 해당 AMI를 사용 중단하지 않습니다.
+ 충돌하는 여러 일정에 의해 AMI가 생성되고 해당하는 모든 일정에 AMI 사용 중단 규칙이 있는 경우 Amazon Data Lifecycle Manager는 사용 중단 날짜가 가장 늦은 결과로 사용 중단 규칙을 사용합니다.

다음은 AMI 정책과 [휴지통](recycle-bin.md)에 적용되는 고려 사항입니다.
+ 정책의 보존 임계값에 도달하면 Amazon Data Lifecycle Manager가 AMI 등록을 취소하고 휴지통으로 보내고 사용자가 휴지통에서 해당 AMI를 수동으로 복원하는 경우 더 이상 필요하지 않을 때 AMI를 수동으로 등록 취소해야 합니다. Amazon Data Lifecycle Manager는 더 이상 AMI를 관리하지 않습니다.
+ 정책에 의해 생성된 AMI를 수동으로 등록 취소하고 정책의 보존 임계값에 도달했을 때 해당 AMI가 휴지통에 있는 경우 Amazon Data Lifecycle Manager는 AMI 등록을 취소하지 않습니다. Amazon Data Lifecycle Manager는 휴지통에 있는 AMI를 관리하지 않습니다.

  정책의 보존 임계값에 도달하기 전에 AMI가 휴지통에서 복원되는 경우 정책의 보존 임계값에 도달하면 Amazon Data Lifecycle Manager가 AMI 등록을 취소합니다.

  정책의 보존 임계값에 도달한 후 AMI가 휴지통에서 복원되면 Amazon Data Lifecycle Manager가 더 이상 AMI를 등록 취소하지 않습니다. 더 이상 필요하지 않은 AMI는 수동으로 삭제해야 합니다.

다음 고려 사항은 **오류** 상태인 AMI 정책에 적용됩니다.
+ 수명 기반 보존 일정이 포함된 정책의 경우 정책이 `error` 상태일 때 만료되도록 설정된 AMI는 무기한 보존됩니다. AMI는 수동으로 등록 취소해야 합니다. 정책을 다시 활성화하고 보존 기간이 만료되면 Amazon Data Lifecycle Manager가 AMI 등록 취소를 재개합니다.
+ 개수 기반 보존 일정이 있는 정책의 경우 `error` 상태인 동안 AMI 생성 및 등록 취소를 중단합니다. 정책을 다시 활성화하면 Amazon Data Lifecycle Manager가 AMI 생성을 재개하고 보존 임계값이 충족되면 AMI 등록 취소를 재개합니다.

다음은 AMI 정책 및 **[AMI 비활성화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disable-an-ami.html)**에 적용되는 고려 사항입니다.
+ Amazon Data Lifecycle Manager에서 생성한 AMI를 비활성화하고, 보존 임계값에 도달했을 때 해당 AMI가 비활성화되는 경우, Amazon Data Lifecycle Manager에서 AMI 등록을 취소하고 연결된 스냅샷을 삭제합니다.
+ Amazon Data Lifecycle Manager에서 생성한 AMI를 비활성화하고 연결된 스냅샷을 수동으로 보관하고, 보존 임계값에 도달했을 때 이러한 스냅샷이 보관되는 경우, Amazon Data Lifecycle Manager에서 이러한 스냅샷을 삭제하지 않으며 더 이상 관리하지 않습니다.

다음은 AMI 정책 및 **[AMI 등록 취소 보호](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html#ami-deregistration-protection)**에 적용되는 고려 사항입니다.
+ 사용자가 Amazon Data Lifecycle Manager에서 생성한 AMI에 대해 수동으로 등록 취소 보호를 활성화하고 AMI 보존 임계값에 도달해도 여전히 활성화되면 Amazon Data Lifecycle Manager는 더 이상 해당 AMI를 관리하지 않습니다. 더 이상 필요하지 않은 경우 AMI를 수동으로 등록 취소하고 기본 스냅샷을 삭제해야 합니다.

## 추가 리소스
<a name="ami-additional-resources"></a>

자세한 내용은 [ Amazon Data Lifecycle Manager 스토리지를 사용하여 Amazon EBS 스냅샷 및 AMI 관리 자동화](https://aws.amazon.com/blogs/storage/automating-amazon-ebs-snapshot-and-ami-management-using-amazon-dlm/) AWS 블로그를 참조하세요.

# Data Lifecycle Manager를 사용하여 교차 계정 스냅샷 복사 자동화
<a name="event-policy"></a>

교차 계정 스냅샷 복사를 자동화하면 Amazon EBS 스냅샷을 격리된 계정의 특정 리전으로 복사하고 암호화 키를 사용하여 해당 스냅샷을 암호화할 수 있습니다. 이렇게 하면 계정이 손상될 경우 데이터 손실로부터 보호할 수 있습니다.

교차 계정 스냅샷 복사를 자동화하려면 다음 두 개의 계정이 필요합니다.
+ **소스 계정**—소스 계정은 스냅샷을 생성하고 대상 계정과 공유하는 계정입니다. 이 계정에서는 설정된 간격으로 스냅샷을 생성한 다음 다른 AWS 계정과 공유하는 EBS 스냅샷 정책을 생성해야 합니다.
+ **대상 계정**—대상 계정은 스냅샷이 공유되는 대상 계정이 있는 계정이며 공유 스냅샷의 복사본을 생성하는 계정입니다. 이 계정에서는 하나 이상의 지정된 소스 계정에서 공유되는 스냅샷을 자동으로 복사하는 교차 계정 복사 이벤트 정책을 생성해야 합니다.

**참고**  
소스 계정 EBS 스냅샷 정책과 대상 계정 교차 계정 복사 이벤트 정책은 모두 동일한 AWS 리전에서 생성해야 합니다. 그러면 대상 계정은 필요에 따라 스냅샷을 다른 대상 리전으로 복사할 수 있습니다.

**Topics**
+ [교차 계정 스냅샷 복사 정책 생성](#create-cac-policy)
+ [스냅샷 설명 필터 지정](#snapshot-descr-filters)
+ [교차 계정 스냅샷 복사 정책 고려 사항](#event-policy-considerations)
+ [추가 리소스](#event-additional-resources)

## 교차 계정 스냅샷 복사 정책 생성
<a name="create-cac-policy"></a>

교차 계정 스냅샷 복사를 위한 소스 및 대상 계정을 준비하려면 다음 단계를 수행해야 합니다.

**Topics**

### 1단계: EBS 스냅샷 정책 생성(*소스 계정*)
<a name="create-snapshot-policy"></a>

소스 계정에서 스냅샷을 생성하고 필요한 대상 계정과 공유하는 EBS 스냅샷 정책을 생성합니다.

정책을 생성할 때 교차 계정 공유를 활성화하고 스냅샷을 공유할 대상 AWS 계정을 지정해야 합니다. 이러한 계정은 스냅샷이 공유되는 계정입니다. 암호화된 스냅샷을 공유하는 경우 선택한 대상 계정에 소스 볼륨을 암호화하는 데 사용된 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [2단계: 고객 관리형 키(*소스 계정*) 공유](#share-cmk) 단원을 참조하십시오.

**참고**  
3단계에서 대상 계정의 교차 계정 복사 이벤트 정책을 생성할 리전과 동일한 AWS 리전에서이 정책을 생성합니다. 교차 계정 스냅샷 공유가 제대로 작동하려면 두 정책이 동일한 리전에 있어야 합니다.
암호화되지 않았거나 고객 관리형 키를 사용하여 암호화된 스냅샷만 공유할 수 있습니다. 기본 EBS 암호화 KMS 키(으)로 암호화된 스냅샷은 공유할 수 없습니다. 암호화된 스냅샷을 공유하는 경우 소스 볼륨을 암호화하는 데 사용된 KMS 키도 대상 계정과 공유해야 합니다. 자세한 내용은 [AWS Key Management Service 개발자 안내서](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html)의 *다른 계정의 사용자가 CMK를 사용하도록 허용*을 참조하세요.

EBS 스냅샷 정책을 생성하는 방법에 대한 자세한 내용은 [EBS 스냅샷에 대한 Amazon Data Lifecycle Manager 사용자 지정 정책 생성](snapshot-ami-policy.md) 섹션을 참조하세요.

다음 방법 중 하나를 사용하여 EBS 스냅샷 정책을 생성합니다.

### 2단계: 고객 관리형 키(*소스 계정*) 공유
<a name="share-cmk"></a>

암호화된 스냅샷을 공유하는 경우 소스 볼륨을 암호화하는 데 사용된 고객 관리형 키를 사용할 수 있는 권한을 이전 단계에서 선택한 IAM 역할 및 대상 AWS 계정에 부여해야 합니다.

**참고**  
이 단계는 암호화된 스냅샷을 공유하는 경우에만 수행합니다. 암호화되지 않은 스냅샷을 공유하는 경우 이 단계를 건너뜁니다.

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

****

1. [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) AWS KMS 콘솔을 엽니다.

1. 를 변경하려면 페이지 오른쪽 상단에 있는 리전 선택기를 AWS 리전사용합니다.

1. 탐색 창에서 [**고객 관리형 키(Customer managed keys)**]를 선택한 다음 대상 계정과 공유해야 하는 KMS 키를 선택합니다.

   KMS 키 ARN을 기록해 두세요. 나중에 필요합니다.

1. [**키 정책(Key policy)**] 탭에서 [**키 사용자(Key users)**] 섹션까지 아래로 스크롤합니다. [**추가(Add)**]를 선택하고 이전 단계에서 선택한 IAM 역할의 이름을 입력한 다음 [**추가(Add)**]를 선택합니다.

1. **키 정책** 탭에서 **다른 AWS 계정** 단원까지 아래로 스크롤합니다. **다른 AWS 계정 추가**를 선택한 다음 이전 단계에서 스냅샷을 공유하도록 선택한 모든 대상 AWS 계정을 추가합니다.

1. **변경 사항 저장**을 선택합니다.

------
#### [ Command line ]

[ get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) 명령을 사용하여 현재 KMS 키에 연결된 키 정책을 다시 확인합니다.

예를 들어 다음 명령은 ID가 `9d5e2b3d-e410-4a27-a958-19e220d83a1e`인 KMS 키에 대한 키 정책을 검색하여 `snapshotKey.json`(이)라는 파일에 씁니다.

```
$ aws kms get-key-policy \
    --policy-name default \
    --key-id 9d5e2b3d-e410-4a27-a958-19e220d83a1e \
    --query Policy \
    --output text > snapshotKey.json
```

기본 텍스트 편집기를 사용하여 키 정책을 엽니다. 스냅샷 정책을 생성할 때 지정한 IAM 역할의 ARN과 KMS 키를 공유할 대상 계정의 ARN을 추가합니다.

예를 들어 다음 정책에서는 기본 IAM 역할의 ARN과 대상 계정 `222222222222.`에 대한 루트 계정의 ARN을 추가했습니다.

**작은 정보**  
최소 권한의 원칙을 따르려면 `kms:CreateGrant`에 대한 전체 액세스 권한을 허용하지 마세요. 대신 다음 예제와 AWS 같이 `kms:GrantIsForAWSResource` 조건 키를 사용하여 서비스가 사용자를 대신하여 권한 부여를 생성하는 경우에만 사용자가 KMS 키에 대한 권한 부여를 생성하도록 허용합니다.

```
{
    "Sid" : "Allow use of the key",
    "Effect" : "Allow",
    "Principal" : {
        "AWS" : [
            "arn:aws:iam::111111111111:role/service-role/AWSDataLifecycleManagerDefaultRole",
            "arn:aws:iam::222222222222:root"
        ]
    },
    "Action" : [ 
        "kms:Encrypt", 
        "kms:Decrypt", 
        "kms:ReEncrypt*", 
        "kms:GenerateDataKey*", 
        "kms:DescribeKey" 
    ],
    "Resource" : "*"
}, 
{
    "Sid" : "Allow attachment of persistent resources",
    "Effect" : "Allow",
    "Principal" : {
        "AWS" : [
            "arn:aws:iam::111111111111:role/service-role/AWSDataLifecycleManagerDefaultRole",
            "arn:aws:iam::222222222222:root"
        ]
    },
    "Action" : [ 
        "kms:CreateGrant", 
        "kms:ListGrants", 
        "kms:RevokeGrant"
    ],
    "Resource" : "*",
    "Condition" : {
        "Bool" : {
          "kms:GrantIsForAWSResource" : "true"
        }
    }
}
```

파일을 저장하고 닫습니다. 그런 다음 [ put-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html) 명령을 사용하여 업데이트된 키 정책을 KMS 키에 연결합니다.



```
$ aws kms put-key-policy \
    --policy-name default \
    --key-id 9d5e2b3d-e410-4a27-a958-19e220d83a1e \
    --policy file://snapshotKey.json
```

------

### 3단계: 교차 계정 복사 이벤트 정책 생성(*대상 계정*)
<a name="cac-policy"></a>

대상 계정에서는 필요한 소스 계정에서 공유하는 스냅샷을 자동으로 복사하는 교차 계정 복사 이벤트 정책을 생성해야 합니다.

이 정책은 지정된 소스 계정 중 하나가 계정과 스냅샷을 공유하는 경우에만 대상 계정에서 실행됩니다.

**참고**  
1단계에서 생성된 소스 계정의 EBS 스냅샷 정책과 동일한 AWS 리전에서이 정책을 생성합니다. 교차 계정 스냅샷 공유가 제대로 작동하려면 두 정책이 동일한 리전에 있어야 합니다. 그런 다음 필요에 따라 스냅샷을 다른 대상 리전에 복사하도록 이 정책을 구성할 수 있습니다.

교차 계정 복사 이벤트 정책을 생성하려면 다음 방법 중 하나를 사용합니다.

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

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 [**Elastic Block Store**], [**Lifecycle Manager**] 및 [**수명 주기 정책 생성**]을 차례로 선택합니다.

1. [**정책 유형 선택(Select policy type)**] 화면에서 [**계정 간 복사 이벤트 정책(Cross-account copy event policy)**]을 선택한 후 [**다음(Next)**]을 선택합니다.

1. [**정책 설명(Policy description)**]에 정책에 대한 간략한 설명을 입력합니다.

1. [**정책 태그(Policy tags)**]에서 수명 주기 정책에 적용할 태그를 추가합니다. 이 태그를 사용하여 정책을 식별 및 분류할 수 있습니다.

1. [**이벤트 설정(Event settings)**] 섹션에서 정책 실행을 트리거할 스냅샷 공유 이벤트를 정의합니다. 해결 방법:

   1. **계정 공유**에서 공유 스냅샷을 복사할 소스 AWS 계정을 지정합니다. **계정 추가**를 선택하고 12자리 AWS 계정 ID를 입력한 다음 **추가**를 선택합니다.

   1. [**설명으로 필터링(Filter by description)**]에 정규식을 사용하여 필요한 스냅샷 설명을 입력합니다. 지정된 소스 계정에서 공유되고 지정된 필터와 일치하는 설명이 있는 스냅샷만 정책에 의해 복사됩니다. 자세한 내용은 [스냅샷 설명 필터 지정](#snapshot-descr-filters) 섹션을 참조하세요.

1. [**IAM 역할(IAM role)**]에서 스냅샷 복사 작업을 수행할 권한이 있는 IAM 역할을 선택합니다. Amazon Data Lifecycle Manager가 제공하는 기본 역할을 사용하려면 [**기본 역할(Default role)**]을 선택합니다. 또는 이전에 생성한 사용자 지정 IAM 역할을 사용하려면 [**다른 역할 선택(Choose another role)**]을 선택하고 사용할 역할을 선택합니다.

   암호화된 스냅샷을 복사하는 경우 소스 볼륨을 암호화하는 데 사용되는 암호화 KMS 키를 사용할 수 있는 권한을 선택한 IAM 역할에 부여해야 합니다. 마찬가지로 다른 KMS 키를 사용하여 대상 리전의 스냅샷을 암호화하는 경우 IAM 역할에 대상 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [4단계: IAM 역할에서 필요한 KMS 키를 사용할 수 있도록 허용(*대상 계정*)](#target_iam-role) 섹션을 참조하세요.

1. [**복사 작업(Copy action)**] 섹션에서 정책이 활성화될 경우 수행할 스냅샷 복사 작업을 정의합니다. 이 정책은 스냅샷을 최대 3개의 리전에 복사할 수 있습니다. 각 대상 리전에 대해 별도의 복사 규칙을 지정해야 합니다. 추가하는 각 규칙 그룹에 대해 다음을 수행합니다.

   1. [**이름(Name)**]에 복사 작업을 설명하는 이름을 입력합니다.

   1. [**대상 리전(Target Region)**]에서 스냅샷을 복사할 리전을 선택합니다.

   1. [**만료(Expire)**]에서 스냅샷 복사본을 생성한 후 대상 리전에 보존할 기간을 지정합니다.

   1. 스냅샷 복사본을 암호화하려면 [**암호화(Encryption)**]에서 [**암호화 사용(Enable encryption)**]을 선택합니다. 소스 스냅샷이 암호화되거나 계정에서 기본적으로 암호화가 사용되는 경우 여기에서 암호화를 사용하지 않더라도 스냅샷 사본이 항상 암호화됩니다. 소스 스냅샷이 암호화되지 않았고 계정에서 암호화가 기본적으로 활성화되어 있지 않은 경우 암호화를 활성화하거나 비활성화하도록 선택할 수 있습니다. 암호화를 활성화하고 KMS 키를 지정하지 않으면 각 대상 리전의 기본 암호화 KMS 키를 사용하여 스냅샷이 암호화됩니다. 대상 리전에 대한 KMS 키를 지정하는 경우 KMS 키에 대한 액세스 권한이 있어야 합니다.

1. 스냅샷 복사 작업을 더 추가하려면 [**새 리전 추가(Add new Regions)**]를 선택합니다.

1. **생성 후 정책 상태(Policy status after creation)** - **정책 활성화(Enable policy)**를 선택하여 다음 예약 시간에 정책 실행을 시작하거나, **정책 비활성화(Disable policy)**를 선택하여 정책을 실행하지 않습니다. 지금 정책을 활성화하지 않으면 생성 후 수동으로 활성화할 때까지 스냅샷 복사가 시작되지 않습니다.

1. **정책 생성**을 선택합니다.

------
#### [ Command line ]

[create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 명령을 사용하여 정책을 생성합니다. 교차 계정 복사 이벤트 정책을 생성하려면 `PolicyType`에 `EVENT_BASED_POLICY`를 지정합니다.

예를 들어 다음 명령은 대상 계정 `222222222222`에서 교차 계정 복사 이벤트 정책을 생성합니다. 정책은 소스 계정 `111111111111`에서 공유하는 스냅샷을 복사합니다. 정책은 스냅샷을 `sa-east-1` 및 `eu-west-2`에 복사합니다. `sa-east-1`에 복사된 스냅샷은 암호화되지 않으며 3일 동안 보존됩니다. `eu-west-2`에 복사된 스냅샷은 KMS 키 `8af79514-350d-4c52-bac8-8985e84171c7`을(를) 사용하여 암호화되며 1개월 동안 보존됩니다. 정책은 기본 IAM 역할을 사용합니다.

```
$ aws dlm create-lifecycle-policy \
    --description "Copy policy" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::222222222222:role/service-role/AWSDataLifecycleManagerDefaultRole \
    --policy-details file://policyDetails.json
```

다음은 `policyDetails.json` 파일의 콘텐츠를 보여줍니다.

```
{
    "PolicyType" : "EVENT_BASED_POLICY",
    "EventSource" : {
        "Type" : "MANAGED_CWE",
        "Parameters": {
            "EventType" : "shareSnapshot",
            "SnapshotOwner": ["111111111111"]
        }
    },
    "Actions" : [{
        "Name" :"Copy Snapshot to Sao Paulo and London",
        "CrossRegionCopy" : [{
            "Target" : "sa-east-1",
             "EncryptionConfiguration" : {
                 "Encrypted" : false
             },
             "RetainRule" : {
             "Interval" : 3,
            "IntervalUnit" : "DAYS"
            }
        },
        {
            "Target" : "eu-west-2",
            "EncryptionConfiguration" : {
                 "Encrypted" : true,
                 "CmkArn" : "arn:aws:kms:eu-west-2:222222222222:key/8af79514-350d-4c52-bac8-8985e84171c7"
            },
            "RetainRule" : {
                "Interval" : 1,
                "IntervalUnit" : "MONTHS"
            }
        }]
    }]
}
```

요청이 성공하면 명령은 새로 생성된 정책의 ID를 반환합니다. 다음은 예제 출력입니다.

```
{
    "PolicyId": "policy-9876543210abcdef0"
}
```

------

### 4단계: IAM 역할에서 필요한 KMS 키를 사용할 수 있도록 허용(*대상 계정*)
<a name="target_iam-role"></a>

암호화된 스냅샷을 복사하는 경우 소스 볼륨을 암호화하는 데 사용된 고객 관리형 키를 사용할 수 있는 권한을 이전 단계에서 선택한 IAM 역할에 부여해야 합니다.

**참고**  
이 단계는 암호화된 스냅샷을 복사하는 경우에만 수행합니다. 암호화되지 않은 스냅샷을 복사하는 경우 이 단계를 건너뜁니다.

다음 방법 중 하나를 사용하여 필요한 정책을 IAM 역할에 추가합니다.

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

****

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 [**역할(Roles)**]을 선택합니다. 이전 단계에서 교차 계정 복사 이벤트 정책을 생성할 때 선택한 IAM 역할을 검색하고 선택합니다. 기본 역할을 사용하도록 선택한 경우 역할의 이름은 **AWSDataLifecycleManagerDefaultRole**로 지정됩니다.

1. [**인라인 정책 추가(Add inline policy)**]를 선택한 다음 [**JSON**] 탭을 선택합니다.

1. 기존 정책을 다음으로 바꾸고 소스 볼륨을 암호화하는 데 사용되었으며 2단계에서 소스 계정이 공유한 KMS 키의 ARN을 지정합니다.
**참고**  
여러 소스 계정에서 복사하는 경우 각 소스 계정에서 해당 KMS 키 ARN을 지정해야 합니다.

   다음 예에서 정책은 소스 계정 `1234abcd-12ab-34cd-56ef-1234567890ab`에서 공유한 KMS 키 `111111111111`와 대상 계정 `4567dcba-23ab-34cd-56ef-0987654321yz`에 있는 KMS 키 `222222222222`을(를) 사용할 권한을 IAM 역할에 부여합니다.
**작은 정보**  
최소 권한의 원칙을 따르려면 `kms:CreateGrant`에 대한 전체 액세스 권한을 허용하지 마세요. 대신 다음 예제와 AWS 같이 `kms:GrantIsForAWSResource` 조건 키를 사용하여 서비스가 사용자를 대신하여 권한 부여를 생성하는 경우에만 사용자가 KMS 키에 대한 권한 부여를 생성하도록 허용합니다.

------
#### [ JSON ]

****  

   ```
    {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kms:RevokeGrant",
                   "kms:CreateGrant",
                   "kms:ListGrants"
               ],
               "Resource": [
                   "arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                   "arn:aws:kms:us-east-1:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz"		
               ],
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": "true"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": [
                   "arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                   "arn:aws:kms:us-east-1:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz"
               ]
           }
       ]
   }
   ```

------

1. [**정책 검토(Review policy)**]를 선택합니다.

1. [**이름(Name)**]에 정책을 설명하는 이름을 입력한 다음 [**정책 생성(Create policy)**]을 선택합니다.

------
#### [ Command line ]

선호하는 텍스트 편집기를 사용하여 `policyDetails.json`이라는 새 JSON 파일을 생성합니다. 다음 정책을 추가하고 소스 볼륨을 암호화하는 데 사용되었으며 2단계에서 소스 계정이 공유한 KMS 키의 ARN을 지정합니다.

**참고**  
여러 소스 계정에서 복사하는 경우 각 소스 계정에서 해당 KMS 키 ARN을 지정해야 합니다.

다음 예에서 정책은 소스 계정 `1234abcd-12ab-34cd-56ef-1234567890ab`에서 공유한 KMS 키 `111111111111`와 대상 계정 `4567dcba-23ab-34cd-56ef-0987654321yz`에 있는 KMS 키 `222222222222`을(를) 사용할 권한을 IAM 역할에 부여합니다.

**작은 정보**  
최소 권한의 원칙을 따르려면 `kms:CreateGrant`에 대한 전체 액세스 권한을 허용하지 마세요. 대신 다음 예제와 AWS 같이 `kms:GrantIsForAWSResource` 조건 키를 사용하여 서비스가 사용자를 대신하여 권한 부여를 생성하는 경우에만 사용자가 KMS 키에 대한 권한 부여를 생성하도록 허용합니다.

------
#### [ JSON ]

****  

```
 {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:RevokeGrant",
                "kms:CreateGrant",
                "kms:ListGrants"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "arn:aws:kms:us-east-1:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz"		
            ],
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "arn:aws:kms:us-east-1:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz"
            ]
        }
    ]
}
```

------

파일을 저장하고 닫습니다. 그런 다음 [put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html) 명령을 사용하여 IAM 역할에 정책을 추가합니다.

예

```
$ aws iam put-role-policy \
    --role-name AWSDataLifecycleManagerDefaultRole \
    --policy-name CopyPolicy \
    --policy-document file://AdminPolicy.json
```

------

## 스냅샷 설명 필터 지정
<a name="snapshot-descr-filters"></a>

대상 계정에서 스냅샷 복사 정책을 생성할 때는 스냅샷 설명 필터를 지정해야 합니다. 스냅샷 설명 필터를 사용하면 정책에 의해 복사되는 스냅샷을 제어할 때 사용할 수 있는 추가 수준의 필터링을 지정할 수 있습니다. 즉, 지정된 소스 계정 중 하나에서 스냅샷을 공유하고 스냅샷 설명이 지정된 필터와 일치하는 경우에만 정책을 통해 스냅샷이 복사됩니다. 다시 말해, 지정된 소스 계정 중 하나에서 스냅샷을 공유하지만 지정된 필터와 일치하는 설명이 없는 경우에는 정책에 의해 복사되지 않습니다.

스냅샷 필터 설명은 정규 표현식을 사용하여 지정해야 합니다. 콘솔과 명령줄을 사용하여 교차 계정 복사 이벤트 정책을 생성하는 경우에는 필수 필드입니다. 다음은 사용할 수 있는 예제 정규 표현식입니다.
+ `.*`—이 필터는 모든 스냅샷 설명을 일치시킵니다. 이 식을 사용하면 지정된 소스 계정 중 하나가 공유하는 모든 스냅샷이 정책에 의해 복사됩니다.
+ `Created for policy: policy-0123456789abcdef0.*`—이 필터는 ID가 인 정책에 의해 생성된 스냅샷만 일치시킵니다.`policy-0123456789abcdef0` 이와 같은 식을 사용하는 경우 지정된 소스 계정 중 하나에서 계정과 공유하고 지정된 ID를 가진 정책에 의해 생성된 스냅샷만 정책에 의해 복사됩니다.
+ `.*production.*`—이 필터는 설명에 `production`이라는 단어가 있는 모든 스냅샷을 일치시킵니다. 이 식을 사용하는 경우 지정된 소스 계정 중 하나에서 공유되고 설명에 지정된 텍스트가 있는 모든 스냅샷이 정책에 의해 복사됩니다.

## 교차 계정 스냅샷 복사 정책 고려 사항
<a name="event-policy-considerations"></a>

교차 계정 복사 이벤트 정책에는 다음 고려 사항이 적용됩니다.
+ 소스 계정 EBS 스냅샷 정책과 대상 계정 교차 계정 복사 이벤트 정책은 동일한 AWS 리전에서 생성해야 합니다. 스냅샷이 공유된 후, 대상 계정 정책은 복사 작업에 지정된 대로 스냅샷을 다른 대상 리전에 복사할 수 있습니다.
+ 암호화되지 않았거나 고객 관리형 키를 사용하여 암호화된 스냅샷만 복사할 수 있습니다.
+ Amazon Data Lifecycle Manager 외부에서 공유되는 스냅샷을 복사하는 교차 계정 복사 이벤트 정책을 생성할 수 있습니다.
+ 대상 계정의 스냅샷을 암호화하려면 교차 계정 복사 이벤트 정책에 대해 선택한 IAM 역할에 필요한 KMS 키를 사용할 수 있는 권한이 있어야 합니다.

## 추가 리소스
<a name="event-additional-resources"></a>

자세한 내용은 [AWS 계정 스토리지 간에 암호화된 Amazon EBS 스냅샷 복사 자동화](https://aws.amazon.com/blogs/storage/automating-copying-encrypted-amazon-ebs-snapshots-across-aws-accounts/) AWS 블로그를 참조하세요.

# Amazon Data Lifecycle Manager 정책 수정
<a name="modify"></a>

Amazon Data Lifecycle Manager 정책을 수정할 때는 다음 사항을 유의해야 합니다.
+ 대상 태그를 변경하거나 삭제하여 AMI 또는 스냅샷 정책을 수정하면 그러한 태그가 연결된 볼륨 또는 인스턴스가 더 이상 해당 정책으로 관리되지 않습니다.
+ 일정 이름을 수정하면 예전의 일정 이름으로 생성된 스냅샷 또는 AMI에 더 이상 해당 정책이 적용되지 않습니다.
+ 새 시간 간격을 사용하도록 연령 기반 보존 일정을 수정할 경우, 변경 후 생성된 새 스냅샷 또는 AMI에만 새 간격이 사용됩니다. 새로운 일정은 변경 전에 생성된 스냅샷 또는 AMI의 보존 일정에 영향을 주지 않습니다.
+ 정책을 생성한 후에는 개수 기반에서 연령 기반으로 정책의 보존 일정을 변경할 수 없습니다. 이렇게 변경하려면 새 정책을 생성해야 합니다.
+ 수명 기반 보존 일정이 포함된 정책을 비활성화하면 만료되도록 설정된 스냅샷 또는 AMI가 정책이 비활성화된 동안 무기한 보존됩니다. 스냅샷을 삭제하거나 수동으로 AMI를 등록 취소해야 합니다. 정책을 다시 활성화하고 보존 기간이 만료되면 Amazon Data Lifecycle Manager가 스냅샷 삭제 또는 AMI 등록 취소를 재개합니다.
+ 개수 기반 보존 일정이 있는 정책을 비활성화하면 정책이 스냅샷 또는 AMI 생성 및 삭제를 중지합니다. 정책을 다시 활성화하면 Amazon Data Lifecycle Manager가 스냅샷 및 AMI 생성을 재개하고 보존 임계값이 충족되면 스냅샷 또는 AMI 삭제를 재개합니다.
+ 스냅샷 아카이빙이 활성화된 정책이 있는 정책을 비활성화하면 정책 비활성화 시 아카이브 계층에 있는 스냅샷은 더 이상 Amazon Data Lifecycle Manager Manager에서 관리되지 않습니다. 더 이상 필요하지 않은 스냅샷은 수동으로 삭제해야 합니다.
+ 개수 기반 일정에 따라 스냅샷 아카이빙을 활성화하면 일정에 따라 생성되고 아카이브되는 모든 새 스냅샷에 아카이빙 규칙이 적용되고 일정에 따라 이전에 생성 및 아카이브된 기존 스냅샷에도 적용됩니다.
+ 기간 기반 일정에 따라 스냅샷 아카이빙을 활성화하면 아카이빙 규칙은 스냅샷 아카이빙을 활성화한 후 생성된 새 스냅샷에만 적용됩니다. 스냅샷 아카이빙을 활성화하기 전에 생성된 기존 스냅샷은 해당 스냅샷이 원래 생성되고 아카이브될 때 설정된 일정에 따라 해당 스토리지 계층에서 계속 삭제됩니다.
+ 개수 기반 일정에 대해 스냅샷 아카이빙을 비활성화하면 일정이 즉시 스냅샷 아카이빙을 중지합니다. 일정에 따라 이전에 아카이브된 스냅샷은 아카이브 계층에 남아 있으며 Amazon Data Lifecycle Manager에 의해 삭제되지 않습니다.
+ 기간 기반 일정에 대해 스냅샷 아카이빙을 비활성화하면 정책에 의해 생성되고 아카이브되도록 예약된 스냅샷은 `aws:dlm:expirationTime` 시스템 태그로 표시된 예약된 아카이브 날짜 및 시간에 영구적으로 삭제됩니다.
+ 일정에 대해 스냅샷 아카이빙을 비활성화하면 일정이 즉시 스냅샷 아카이빙을 중지합니다. 일정에 따라 이전에 아카이브된 스냅샷은 아카이브 계층에 남아 있으며 Amazon Data Lifecycle Manager에 의해 삭제되지 않습니다.
+ 개수 기반 일정의 아카이브 보존 횟수를 수정하면 새 보존 횟수에 이전에 해당 일정에 따라 아카이브된 기존 스냅샷이 포함됩니다.
+ 기간 기반 일정의 아카이브 보존 기간을 수정하면 보존 규칙을 수정한 후 아카이브된 스냅샷에만 새 보존 기간이 적용됩니다.

다음 절차 중 하나를 사용하여 수명 주기 정책을 수정합니다.

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

**수명 주기 정책을 수정하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Elastic Block Store**, **Lifecycle Manager(수명 주기 관리자)**를 선택합니다.

1. 목록에서 수명 주기 정책을 선택합니다.

1. **작업**, **수명 주기 정책 수정**을 선택합니다.

1. 필요에 따라 정책 설정을 수정합니다. 예를 들어 일정을 수정하거나, 태그를 추가 또는 제거하거나, 정책을 활성화 또는 비활성화할 수 있습니다.

1. **정책 수정**을 선택합니다.

------
#### [ Command line ]

[update-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/update-lifecycle-policy.html) 명령을 사용하여 수명 주기 정책의 정보를 수정합니다. 구문을 간단히 하기 위해 이 예에서는 정책의 세부 정보가 들어 있는 JSON 파일(`policyDetailsUpdated.json`)을 참조합니다.

```
aws dlm update-lifecycle-policy \
    --state DISABLED \
    --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole" \
    --policy-details file://policyDetailsUpdated.json
```

다음은 `policyDetailsUpdated.json` 파일의 예입니다.

```
{
   "ResourceTypes":[
      "VOLUME"
   ],
   "TargetTags":[
      {
         "Key": "costcenter",
         "Value": "120"
      }
   ],
   "Schedules":[
      {
         "Name": "DailySnapshots",
         "TagsToAdd": [
            {
               "Key": "type",
               "Value": "myDailySnapshot"
            }
         ],
         "CreateRule": {
            "Interval": 12,
            "IntervalUnit": "HOURS",
            "Times": [
               "15:00"
            ]
         },
         "RetainRule": {
            "Count" :5
         },
         "CopyTags": false 
      }
   ]
}
```

업데이트된 정책을 보려면 `get-lifecycle-policy` 명령을 사용하십시오. 상태, 태그 값, 스냅샷 간격, 스냅샷 시작 시간이 변경된 것을 알 수 있습니다.

------

# Amazon Data Lifecycle Manager 정책 삭제
<a name="delete"></a>

Amazon Data Lifecycle Manager 정책을 삭제할 때는 다음 사항을 유의해야 합니다.
+ 정책을 삭제하는 경우 해당 정책에 의해 생성된 스냅샷 또는 AMI는 자동으로 삭제되지 않습니다. 스냅샷이나 AMI가 더 이상 필요하지 않은 경우에는 수동으로 삭제해야 합니다.
+ 스냅샷 아카이빙이 활성화된 정책이 있는 정책을 삭제하면 정책 삭제 시 아카이브 계층에 있는 스냅샷은 더 이상 Amazon Data Lifecycle Manager Manager에서 관리되지 않습니다. 더 이상 필요하지 않은 스냅샷은 수동으로 삭제해야 합니다.
+ 아카이브가 활성화된 기간 기반 일정이 있는 정책을 삭제하면 정책에 의해 생성되고 아카이브되도록 예약된 스냅샷은 `aws:dlm:expirationtime` 시스템 태그로 표시된 예약된 아카이브 날짜 및 시간에 영구적으로 삭제됩니다.

다음 절차 중 하나를 사용하여 수명 주기 정책을 삭제합니다.

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

**수명 주기 정책을 삭제하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Elastic Block Store**, **Lifecycle Manager(수명 주기 관리자)**를 선택합니다.

1. 목록에서 수명 주기 정책을 선택합니다.

1. **작업**, **수명 주기 정책 삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **정책 삭제**를 선택합니다.

------
#### [ Command line ]

[delete-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/delete-lifecycle-policy.html) 명령을 사용하여 수명 주기 정책을 삭제하고, 정책에 지정된 대상 태그를 해제하여 재사용할 수 있도록 합니다.

**참고**  
Amazon Data Lifecycle Manager에 의해 생성된 스냅샷만 삭제할 수 있습니다.

```
aws dlm delete-lifecycle-policy --policy-id policy-0123456789abcdef0
```

------

[Amazon Data Lifecycle Manager API 참조](https://docs.aws.amazon.com/dlm/latest/APIReference/)에 Amazon Data Lifecycle Manager 쿼리 API의 데이터 유형과 각 작업에 대한 설명 및 구문이 나와 있습니다.

또는 AWS SDKs 중 하나를 사용하여 사용 중인 프로그래밍 언어 또는 플랫폼에 맞게 조정된 방식으로 API에 액세스할 수 있습니다. 자세한 내용은 [AWS SDK](https://aws.amazon.com/developer/tools/)를 참조하십시오.

# IAM을 사용하여 Amazon Data Lifecycle Manager에 대한 액세스 제어
<a name="dlm-prerequisites"></a>

Amazon Data Lifecycle Manager에 액세스하려면 자격 증명이 필요합니다. 이러한 자격 증명에는 인스턴스, 볼륨, 스냅샷, AMI 등의 AWS 리소스에 액세스할 권한이 있어야 합니다.

Amazon Data Lifecycle Manager를 사용하려면 다음 IAM 권한이 필요합니다.

**참고**  
`ec2:DescribeAvailabilityZones`, `ec2:DescribeRegions`, `kms:ListAliases` 및 `kms:DescribeKey` 권한은 콘솔 사용자에게만 필요합니다. 콘솔 액세스가 필요하지 않은 경우 권한을 제거할 수 있습니다.
*AWSDataLifecycleManagerDefaultRole*의 ARN 형식은 콘솔을 사용하여 생성했는지 AWS CLI를 사용하여 생성했는지에 따라 다릅니다. 콘솔을 사용하여 역할을 생성한 경우 ARN 형식은 `arn:aws:iam::account_id:role/service-role/AWSDataLifecycleManagerDefaultRole`입니다. 를 사용하여 역할을 생성한 경우 AWS CLI ARN 형식은 입니다`arn:aws:iam::account_id:role/AWSDataLifecycleManagerDefaultRole`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dlm:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::111122223333:role/AWSDataLifecycleManagerDefaultRole",
                "arn:aws:iam::111122223333:role/AWSDataLifecycleManagerDefaultRoleForAMIManagement",
                "arn:aws:iam::111122223333:role/service-role/AWSDataLifecycleManagerDefaultRole",
                "arn:aws:iam::111122223333:role/service-role/AWSDataLifecycleManagerDefaultRoleForAMIManagement"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:ListRoles",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeRegions",
                "kms:ListAliases",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**암호화 권한**

Amazon Data Lifecycle Manager와 암호화된 리소스를 사용할 때는 다음 사항을 고려하세요.
+ 소스 볼륨이 암호화되는 경우 볼륨 암호화에 사용된 KMS 키를 사용할 권한이 Amazon Data Lifecycle Manager 기본 역할(**AWSDataLifecycleManagerDefaultRole** 및 **AWSDataLifecycleManagerDefaultRoleForAMIManagement**)에 있어야 합니다.
+ 암호화되지 않은 스냅샷 또는 암호화되지 않은 스냅샷 기반 AMI에 대해 **교차 리전 복사**를 활성화하고 대상 리전에서 암호화를 활성화하도록 선택하는 경우 대상 리전에서 암호화를 수행하는 데 필요한 KMS 키를 사용할 수 있는 권한이 기본 역할에 있어야 합니다.
+ 암호화된 스냅샷 또는 암호화된 스냅샷 기반 AMI에 대해 **교차 리전 복사**를 활성화하는 경우 소스 및 대상 KMS 키를 모두 사용할 수 있는 권한이 기본 역할에 있어야 합니다.
+ 암호화된 스냅샷에 대한 스냅샷 보관을 활성화하는 경우 Amazon Data Lifecycle Manager 기본 역할(**AWSDataLifecycleManagerDefaultRole**)에 스냅샷 암호화에 사용되는 KMS 키를 사용할 수 있는 권한이 있는지 확인하세요.

자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [다른 계정의 사용자가 CMK를 사용하도록 허용](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html)을 참조하세요.

자세한 내용은 **IAM 사용 설명서의 [사용자의 권한 변경](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html)을 참조하세요.

# AWS Amazon Data Lifecycle Manager에 대한 관리형 정책
<a name="managed-policies"></a>

 AWS 관리형 정책은에서 생성하고 관리하는 독립 실행형 정책입니다 AWS. AWS 관리형 정책은 많은 일반적인 사용 사례에 대한 권한을 제공하도록 설계되었습니다. AWS 관리형 정책은 정책을 직접 작성해야 하는 경우보다 사용자, 그룹 및 역할에 적절한 권한을 할당하는 것이 더 효율적입니다.

그러나 AWS 관리형 정책에 정의된 권한은 변경할 수 없습니다. AWS 는 때때로 AWS 관리형 정책에 정의된 권한을 업데이트합니다. 이 경우 정책이 연결되어 있는 모든 위탁자 엔터티(사용자, 그룹 및 역할)에도 업데이트가 적용됩니다.

Amazon Data Lifecycle Manager는 일반적인 사용 사례에 대한 AWS 관리형 정책을 제공합니다. 이러한 정책을 사용하면 리소스에 적절한 권한을 보다 효율적으로 정의하고 액세스를 제어할 수 있습니다. Amazon Data Lifecycle Manager에서 제공하는 AWS 관리형 정책은 Amazon Data Lifecycle Manager에 전달하는 역할에 연결되도록 설계되었습니다.

**Topics**
+ [AWSDataLifecycleManagerServiceRole](#AWSDataLifecycleManagerServiceRole)
+ [AWSDataLifecycleManagerServiceRoleForAMIManagement](#AWSDataLifecycleManagerServiceRoleForAMIManagement)
+ [AWSDataLifecycleManagerSSMFullAccess](#AWSDataLifecycleManagerSSMFullAccess)
+ [AWS 관리형 정책 업데이트](#policy-update)

## AWSDataLifecycleManagerServiceRole
<a name="AWSDataLifecycleManagerServiceRole"></a>

**AWSDataLifecycleManagerServiceRole** 정책은 Amazon EBS 스냅샷 정책 및 교차 계정 복사 이벤트 정책을 생성하고 관리할 수 있는 적절한 권한을 Amazon Data Lifecycle Manager에 제공합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSnapshot",
                "ec2:CreateSnapshots",
                "ec2:DeleteSnapshot",
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes",
                "ec2:DescribeSnapshots",
                "ec2:EnableFastSnapshotRestores",
                "ec2:DescribeFastSnapshotRestores",
                "ec2:DisableFastSnapshotRestores",
                "ec2:CopySnapshot",
                "ec2:ModifySnapshotAttribute",
                "ec2:DescribeSnapshotAttribute",
                "ec2:ModifySnapshotTier",
                "ec2:DescribeSnapshotTierStatus",
                "ec2:DescribeAvailabilityZones"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*::snapshot/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:DeleteRule",
                "events:DescribeRule",
                "events:EnableRule",
                "events:DisableRule",
                "events:ListTargetsByRule",
                "events:PutTargets",
                "events:RemoveTargets"
            ],
            "Resource": "arn:aws:events:*:*:rule/AwsDataLifecycleRule.managed-cwe.*"
        }
    ]
}
```

------

## AWSDataLifecycleManagerServiceRoleForAMIManagement
<a name="AWSDataLifecycleManagerServiceRoleForAMIManagement"></a>

**AWSDataLifecycleManagerServiceRoleForAMIManagement** 정책은 Amazon EBS 지원 AMI 정책을 생성하고 관리할 수 있는 적절한 권한을 Amazon Data Lifecycle Manager에 제공합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": [
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*::image/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeImages",
                "ec2:DescribeInstances",
                "ec2:DescribeImageAttribute",
                "ec2:DescribeVolumes",
                "ec2:DescribeSnapshots"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteSnapshot",
            "Resource": "arn:aws:ec2:*::snapshot/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ResetImageAttribute",
                "ec2:DeregisterImage",
                "ec2:CreateImage",
                "ec2:CopyImage",
                "ec2:ModifyImageAttribute"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:EnableImageDeprecation",
                "ec2:DisableImageDeprecation"
            ],
            "Resource": "arn:aws:ec2:*::image/*"
        }
    ]
}
```

------

## AWSDataLifecycleManagerSSMFullAccess
<a name="AWSDataLifecycleManagerSSMFullAccess"></a>

모든 Amazon EC2 인스턴스에서 사전 및 사후 스크립트를 실행하는 데 필요한 Systems Manager 작업을 수행할 수 있는 Amazon Data Lifecycle Manager 권한을 제공합니다.

**중요**  
이 정책은 사전 및 사후 스크립트를 사용할 때 `aws:ResourceTag` 조건 키를 사용하여 특정 SSM 문서에 대한 액세스를 제한합니다. Amazon Data Lifecycle Manager가 SSM 문서에 액세스할 수 있도록 하려면 SSM 문서에 `DLMScriptsAccess:true` 태그가 지정되어 있는지 확인해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSSMReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "ssm:GetCommandInvocation",
                "ssm:ListCommands",
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowTaggedSSMDocumentsOnly",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ssm:DescribeDocument",
                "ssm:GetDocument"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/DLMScriptsAccess": "true"
                }
            }
        },
        {
            "Sid": "AllowSpecificAWSOwnedSSMDocuments",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ssm:DescribeDocument",
                "ssm:GetDocument"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/AWSEC2-CreateVssSnapshot",
                "arn:aws:ssm:*:*:document/AWSSystemsManagerSAP-CreateDLMSnapshotForSAPHANA"
            ]
        },
        {
            "Sid": "AllowAllEC2Instances",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*"
            ]
        }
    ]
}
```

------

## AWS 관리형 정책 업데이트
<a name="policy-update"></a>

AWS 서비스는 AWS 관리형 정책을 유지 관리하고 업데이트합니다. AWS 관리형 정책에서는 권한을 변경할 수 없습니다. 서비스는 때때로 AWS 관리형 정책에 추가 권한을 추가하여 새 기능을 지원합니다. 이 유형의 업데이트는 정책이 연결된 모든 ID(사용자, 그룹 및 역할)에 적용됩니다. 서비스는 새 기능이 시작되거나 새 작업을 사용할 수 있게 될 때 AWS 관리형 정책을 업데이트할 가능성이 높습니다. 서비스는 AWS 관리형 정책에서 권한을 제거하지 않으므로 정책 업데이트로 인해 기존 권한이 손상되지 않습니다.

다음 표에는이 서비스가 이러한 변경 사항을 추적하기 시작한 이후 Amazon Data Lifecycle Manager의 AWS 관리형 정책 업데이트에 대한 세부 정보가 나와 있습니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 [Amazon EBS 사용 설명서에 대한 문서 이력](doc-history.md)에서 RSS 피드를 구독하세요.


| 변경 | 설명 | Date | 
| --- | --- | --- | 
| AWSDataLifecycleManagerServiceRole - 정책 권한을 업데이트했습니다. | Amazon Data Lifecycle Manager에 로컬 영역에 대한 정보를 가져올 수 있는 스냅샷 정책 권한을 부여하는 ec2:DescribeAvailabilityZones 작업을 추가했습니다. | 2024년 12월 16일 | 
| AWSDataLifecycleManagerSSMFullAccess - 정책 권한을 업데이트했습니다. | AWSSystemsManagerSAP-CreateDLMSnapshotForSAPHANA SSM 문서를 사용하여 SAP HANA에 대해 애플리케이션에 일관되게 적용되는 스냅샷을 지원하도록 정책을 업데이트했습니다. | 2023년 11월 17일 | 
| AWSDataLifecycleManagerSSMFullAccess - 새 AWS 관리형 정책을 추가했습니다. | Amazon Data Lifecycle Manager에 AWSDataLifecycleManagerSSMFullAccess AWS 관리형 정책이 추가되었습니다. | 2023년 11월 7일 | 
| AWSDataLifecycleManagerServiceRole - 스냅샷 아카이빙을 지원하는 권한이 추가되었습니다. | Amazon Data Lifecycle Manager는 스냅샷을 아카이브하고 스냅샷의 아카이브 상태를 확인할 수 있는 권한을 스냅샷 정책에 부여하기 위한 ec2:ModifySnapshotTier 및 ec2:DescribeSnapshotTierStatus 작업을 추가했습니다. | 2022년 9월 30일 | 
| AWSDataLifecycleManagerServiceRoleForAMIManagement - AMI 사용 중단을 지원하기 위한 권한이 추가되었습니다. | EBS 지원 AMI 정책에 AMI 사용 중단을 활성화하거나 비활성화할 권한을 부여하는 ec2:EnableImageDeprecation 및 ec2:DisableImageDeprecation 작업이 Amazon Data Lifecycle Manager에 추가되었습니다. | 2021년 8월 23일 | 
| Amazon Data Lifecycle Manager에서 변경 내용 추적 시작 | Amazon Data Lifecycle Manager가 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다. | 2021년 8월 23일 | 

# Amazon Data Lifecycle Manager를 위한 IAM 서비스 역할
<a name="service-role"></a>

 AWS Identity and Access Management (IAM) 역할은 자격 AWS 증명이 할 수 있는 것과 없는 것을 결정하는 권한 정책이 있는 자격 증명이라는 점에서 사용자와 유사합니다 AWS. 그러나 역할은 한 사람하고만 연관되지 않고 해당 역할이 필요한 사람이라면 누구든지 맡을 수 있어야 합니다. 서비스 역할은 AWS 서비스가 사용자를 대신하여 작업을 수행하기 위해 수임하는 역할입니다. 사용자 대신 백업 작업을 수행하는 서비스인 Amazon Data Lifecycle Manager에 사용자 대신 정책 작업을 수행할 때 맡아야 할 역할을 전달해야 합니다. IAM 역할에 대한 자세한 내용은 IAM 사용 설명서**의 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 섹션을 참조하세요.

Amazon Data Lifecycle Manager에 전달하는 역할에는 Amazon Data Lifecycle Manager가 스냅샷 및 AMI 생성, 스냅샷 및 AMI 복사, 스냅샷 삭제, AMI 등록 취소 등 정책 작업과 관련된 작업을 수행할 수 있는 권한이 부여된 IAM 정책이 있어야 합니다. Amazon Data Lifecycle Manager 정책 유형마다 서로 다른 권한이 필요합니다. 또한 Amazon Data Lifecycle Manager가 신뢰할 수 있는 엔터티로 역할에 나열되어 있어야 Amazon Data Lifecycle Manager가 해당 역할을 맡을 수 있습니다.

**Topics**
+ [Amazon Data Lifecycle Manager를 위한 기본 서비스 역할](#default-service-roles)
+ [Amazon Data Lifecycle Manager를 위한 사용자 지정 서비스 역할](#custom-role)

## Amazon Data Lifecycle Manager를 위한 기본 서비스 역할
<a name="default-service-roles"></a>

Amazon Data Lifecycle Manager는 다음 기본 서비스 역할을 사용합니다.
+ **AWSDataLifecycleManagerDefaultRole**—스냅샷 관리를 위한 기본 역할입니다. 역할을 수임할 대상으로 `dlm.amazonaws.com` 서비스만 신뢰하며, Amazon Data Lifecycle Manager가 사용자를 대신하여 스냅샷 및 교차 계정 스냅샷 복사 정책에 필요한 작업을 수행하도록 합니다. 이 역할은 ` AWSDataLifecycleManagerServiceRole` AWS 관리형 정책을 사용합니다.
**참고**  
역할의 ARN 형식은 콘솔을 사용하여 생성했는지 AWS CLI를 사용하여 생성했는지에 따라 다릅니다. 콘솔을 사용하여 역할을 생성한 경우 ARN 형식은 `arn:aws:iam::account_id:role/service-role/AWSDataLifecycleManagerDefaultRole`입니다. 를 사용하여 역할을 생성한 경우 AWS CLI ARN 형식은 입니다`arn:aws:iam::account_id:role/AWSDataLifecycleManagerDefaultRole`.
+ **AWSDataLifecycleManagerDefaultRoleForAMIManagement**—AMI 관리를 위한 기본 역할입니다. 역할을 수임할 대상으로 `dlm.amazonaws.com` 서비스만 신뢰하며, Amazon Data Lifecycle Manager가 사용자를 대신하여 EBS 지원 AMI 정책에 필요한 작업을 수행하도록 합니다. 이 역할은 `AWSDataLifecycleManagerServiceRoleForAMIManagement` AWS 관리형 정책을 사용합니다.

Amazon Data Lifecycle Manager 콘솔을 사용할 경우, 스냅샷 또는 교차 계정 스냅샷 복사 정책을 처음 생성할 때 Amazon Data Lifecycle Manager가 **AWSDataLifecycleManagerDefaultRole** 서비스 역할을 자동으로 생성하며, EBS 지원 AMI 정책을 처음 생성할 때 **AWSDataLifecycleManagerDefaultRoleForAMIManagement** 서비스 역할을 자동으로 생성합니다.

콘솔을 사용하지 않을 경우 [create-default-role](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-default-role.html) 명령을 사용하여 서비스 역할을 수동으로 생성할 수 있습니다. `--resource-type`에 `snapshot`을 지정하여 AWSDataLifecycleManagerDefaultRole을 생성하거나 `image`를 지정하여 AWSDataLifecycleManagerDefaultRoleForAMIManagement를 생성합니다.

```
$ aws dlm create-default-role --resource-type snapshot|image
```

기본 서비스 역할을 삭제한 다음 다시 생성해야 하는 경우 동일한 프로세스를 사용하여 계정에서 역할을 다시 생성할 수 있습니다.

## Amazon Data Lifecycle Manager를 위한 사용자 지정 서비스 역할
<a name="custom-role"></a>

기본 서비스 역할을 사용하는 것에 대한 대안으로, 필요한 권한이 있는 사용자 지정 IAM 역할을 생성한 다음, 수명 주기 정책을 생성할 때 이를 선택해도 됩니다.

**사용자 지정 IAM 역할을 생성하려면**

1. 다음 권한을 가진 역할을 생성합니다.
   + 스냅샷 수명 주기 정책을 관리하는 데 필요한 권한

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:CreateSnapshot",
                     "ec2:CreateSnapshots",
                     "ec2:DeleteSnapshot",
                     "ec2:DescribeInstances",
                     "ec2:DescribeVolumes",
                     "ec2:DescribeSnapshots",
                     "ec2:EnableFastSnapshotRestores",
                     "ec2:DescribeFastSnapshotRestores",
                     "ec2:DisableFastSnapshotRestores",
                     "ec2:CopySnapshot",
                     "ec2:ModifySnapshotAttribute",
                     "ec2:DescribeSnapshotAttribute",
                     "ec2:ModifySnapshotTier",
                     "ec2:DescribeSnapshotTierStatus",
                     "ec2:DescribeAvailabilityZones"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:CreateTags"
                 ],
                 "Resource": "arn:aws:ec2:*::snapshot/*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "events:PutRule",
                     "events:DeleteRule",
                     "events:DescribeRule",
                     "events:EnableRule",
                     "events:DisableRule",
                     "events:ListTargetsByRule",
                     "events:PutTargets",
                     "events:RemoveTargets"
                 ],
                 "Resource": "arn:aws:events:*:*:rule/AwsDataLifecycleRule.managed-cwe.*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ssm:GetCommandInvocation",
                     "ssm:ListCommands",
                     "ssm:DescribeInstanceInformation"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ssm:SendCommand",
                     "ssm:DescribeDocument",
                     "ssm:GetDocument"
                 ],
                 "Resource": [
                     "arn:aws:ssm:*:*:document/*"
                 ],
                 "Condition": {
                     "StringEquals": {
                         "aws:ResourceTag/DLMScriptsAccess": "true"
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ssm:SendCommand",
                     "ssm:DescribeDocument",
                     "ssm:GetDocument"
                 ],
                 "Resource": [
                     "arn:aws:ssm:*::document/*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ssm:SendCommand"
                 ],
                 "Resource": [
                     "arn:aws:ec2:*:*:instance/*"
                 ],
                 "Condition": {
                     "StringNotLike": {
                         "aws:ResourceTag/DLMScriptsAccess": "false"
                     }
                 }
             }
         ]
     }
     ```

------
   + AMI 수명 주기 정책을 관리하는 데 필요한 권한

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateTags",
                 "Resource": [
                     "arn:aws:ec2:*::snapshot/*",
                     "arn:aws:ec2:*::image/*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeImages",
                     "ec2:DescribeInstances",
                     "ec2:DescribeImageAttribute",
                     "ec2:DescribeVolumes",
                     "ec2:DescribeSnapshots"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteSnapshot",
                 "Resource": "arn:aws:ec2:*::snapshot/*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:ResetImageAttribute",
                     "ec2:DeregisterImage",
                     "ec2:CreateImage",
                     "ec2:CopyImage",
                     "ec2:ModifyImageAttribute"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:EnableImageDeprecation",
                     "ec2:DisableImageDeprecation"
                 ],
                 "Resource": "arn:aws:ec2:*::image/*"
             }
         ]
     }
     ```

------

   자세한 내용은 IAM 사용 설명서**의 [역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

1. 역할에 신뢰 관계를 추가합니다.

   1. IAM 콘솔에서 **역할**을 선택합니다.

   1. 생성한 역할을 선택하고 **신뢰 관계(Trust relationships)**를 선택합니다.

   1. **신뢰 관계 편집**을 선택하고 다음 정책을 추가한 뒤 **신뢰 정책 업데이트**를 선택합니다.

------
#### [ JSON ]

****  

      ```
      {
      	"Version":"2012-10-17",		 	 	 
      	"Statement": [{
      		"Effect": "Allow",
      		"Principal": {
      			"Service": "dlm.amazonaws.com"
      		},
      		"Action": "sts:AssumeRole"
      	}]
      }
      ```

------

      [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 자신을 보호하기 위하여 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 사용할 것을 권장합니다. 예를 들어 이전 신뢰 정책에 다음 조건 블록을 추가할 수 있습니다. `aws:SourceAccount`는 수명 주기 정책의 소유자이고, `aws:SourceArn`은 수명 주기 정책의 ARN입니다. 수명 주기 정책 ID를 모르는 경우 ARN의 해당 부분을 와일드카드(`*`)로 바꾼 다음 수명 주기 정책을 만든 후 신뢰 정책을 업데이트할 수 있습니다.

      ```
      "Condition": {
          "StringEquals": {
              "aws:SourceAccount": "account_id"
          },
          "ArnLike": {
              "aws:SourceArn": "arn:partition:dlm:region:account_id:policy/policy_id"
          }
      }
      ```

# Amazon Data Lifecycle Manager 정책 모니터링
<a name="dlm-monitor-lifecycle"></a>

다음 기능을 사용하여 스냅샷 및 AMI의 수명 주기를 모니터링할 수 있습니다.

**Topics**
+ [콘솔 및 AWS CLI](#monitor-console-cli)
+ [AWS CloudTrail](#monitor-lifecycle-cloudtrail)
+ [EventBridge를 사용하여 Data Lifecycle Manager 정책 모니터링](monitor-cloudwatch-events.md)
+ [CloudWatch를 사용하여 Data Lifecycle Manager 정책 모니터링](monitor-dlm-cw-metrics.md)

## 콘솔 및 AWS CLI
<a name="monitor-console-cli"></a>

Amazon EC2 콘솔 또는 AWS CLI를 사용하여 수명 주기 정책을 볼 수 있습니다. 정책에 따라 생성된 각 스냅샷 및 AMI에는 타임스탬프 및 해당 정책과 관련된 태그가 있습니다. 이 태그로 스냅샷 및 AMI를 필터링하여 백업이 의도대로 생성되고 있는지 확인할 수 있습니다.

## AWS CloudTrail
<a name="monitor-lifecycle-cloudtrail"></a>

를 사용하면 사용자 활동 및 API 사용량을 추적하여 내부 정책 및 규제 표준 준수를 입증 AWS CloudTrail할 수 있습니다. 자세한 내용은 [AWS CloudTrail 사용 설명서](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)를 참조하십시오.

# EventBridge를 사용하여 Data Lifecycle Manager 정책 모니터링
<a name="monitor-cloudwatch-events"></a>

Amazon EBS 및 Amazon Data Lifecycle Manager는 수명 주기 정책 작업과 관련된 이벤트를 발생시킵니다. AWS Lambda 및 Amazon CloudWatch Events를 사용하여 이벤트 알림을 프로그래밍 방식으로 처리할 수 있습니다. 이벤트는 최선의 작업을 기반으로 발생됩니다. 자세한 내용은 [Amazon EventBridge 사용 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/)를 참조하세요.

다음과 같은 이벤트를 사용할 수 있습니다.

**참고**  
AMI 수명 주기 정책 작업의 경우 이벤트가 생성되지 않습니다.
+ `createSnapshot` - `CreateSnapshot` 작업이 성공하거나 실패할 때 발생하는 Amazon EBS 이벤트입니다. 자세한 내용은 [Amazon EBS용 Amazon EventBridge 이벤트](ebs-cloud-watch-events.md) 단원을 참조하십시오.
+ `DLM Policy State Change` - 수명 주기 정책이 오류 상태가 될 때 발생하는 Amazon Data Lifecycle Manager 이벤트입니다. 이 이벤트에는 오류의 원인에 대한 설명이 포함되어 있습니다.

  다음은 IAM 역할에서 부여한 권한이 충분하지 않을 때 나타나는 이벤트의 예입니다.

  ```
  {
      "version": "0",
      "id": "01234567-0123-0123-0123-0123456789ab",
      "detail-type": "DLM Policy State Change",
      source": "aws.dlm",
      "account": "123456789012",
      "time": "2018-05-25T13:12:22Z",
      "region": "us-east-1",
      "resources": [
          "arn:aws:dlm:us-east-1:123456789012:policy/policy-0123456789abcdef"
      ],
      "detail": {
          "state": "ERROR",
          "cause": "Role provided does not have sufficient permissions",
          "policy_id": "arn:aws:dlm:us-east-1:123456789012:policy/policy-0123456789abcdef"
      }
  }
  ```

  다음은 한도를 초과할 때 발생하는 이벤트의 예입니다.

  ```
  {
      "version": "0",
      "id": "01234567-0123-0123-0123-0123456789ab",
      "detail-type": "DLM Policy State Change",
      "source": "aws.dlm",
      "account": "123456789012",
      "time": "2018-05-25T13:12:22Z",
      "region": "us-east-1",
      "resources": [
          "arn:aws:dlm:us-east-1:123456789012:policy/policy-0123456789abcdef"
      ],
      "detail":{
          "state": "ERROR",
          "cause": "Maximum allowed active snapshot limit exceeded",
          "policy_id": "arn:aws:dlm:us-east-1:123456789012:policy/policy-0123456789abcdef"
      }
  }
  ```
+ `DLM Pre Post Script Notification` - 사전 또는 사후 스크립트가 시작되거나 성공하거나 실패할 때 발생하는 이벤트입니다.

  다음은 VSS 백업이 성공한 경우의 예시 이벤트입니다.

  ```
  {
      "version": "0",
      "id": "12345678-1234-1234-1234-123456789012",
      "detail-type": "DLM Pre Post Script Notification",
      "source": "aws.dlm",
      "account": "123456789012",
      "time": "2023-10-27T22:04:52Z",
      "region": "us-east-1",
      "resources": ["arn:aws:dlm:us-east-1:123456789012:policy/policy-01234567890abcdef"],
      "detail": {
          "script_stage": "",
          "result": "success",
          "cause": "",
          "policy_id": "arn:aws:dlm:us-east-1:123456789012:policy/policy-01234567890abcdef",
          "execution_handler": "AWS_VSS_BACKUP",
          "source": "arn:aws:ec2:us-east-1:123456789012:instance/i-01234567890abcdef",
          "resource_type": "EBS_SNAPSHOT",
          "resources": [{
              "status": "pending",
              "resource_id": "arn:aws:ec2:us-east-1::snapshot/snap-01234567890abcdef",
              "source": "arn:aws:ec2:us-east-1:123456789012:volume/vol-01234567890abcdef"
          }],
          "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6",
          "start_time": "2023-10-27T22:03:29.370Z",
          "end_time": "2023-10-27T22:04:51.370Z",
          "timeout_time": ""
      }
  }
  ```

# CloudWatch를 사용하여 Data Lifecycle Manager 정책 모니터링
<a name="monitor-dlm-cw-metrics"></a>

원시 데이터를 수집하여 실시간에 가까운 읽기 쉬운 지표로 처리하는 CloudWatch를 사용하여 Amazon Data Lifecycle Manager 수명 주기 정책을 모니터링할 수 있습니다. 이러한 지표를 사용하여 정책 및 시간 경과에 따라 생성, 삭제 및 복사되는 Amazon EBS 스냅샷 개수 및 EBS 지원 AMI 개수를 정확히 확인할 수 있습니다. 특정 임계값을 주시하다가 해당 임계값이 충족될 때 알림을 전송하거나 조치를 취하도록 경보를 설정할 수도 있습니다.

지표는 15개월 동안 보관되므로 기간별 정보에 액세스하고 수명 주기 정책이 장기간 어떻게 실행되는지 더 잘 이해할 수 있습니다.

Amazon CloudWatch에 대한 자세한 내용은 [Amazon CloudWatch 사용 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)를 참조하십시오.

**Topics**
+ [지원되는 지표](#metrics)
+ [정책에 대한 CloudWatch 지표 보기](#view-metrics)
+ [그래프 지표](#graph-metrics)
+ [정책에 대한 CloudWatch 경보 만들기](#create-alarm)
+ [사용 사례 예시](#use-cases)
+ [실패한 작업을 보고하는 정책 관리](#manage)

## 지원되는 지표
<a name="metrics"></a>

`AWS/EBS` 네임스페이스에는 다음과 같은 Amazon Data Lifecycle Manager 지표가 포함됩니다. 지표는 정책 유형에 따라 다릅니다.

모든 지표는 `DLMPolicyId` 차원에 따라 측정됩니다. 가장 유용한 통계는 `sum` 및 `average`이고 측정 단위는 `count`입니다.

탭을 선택하여 해당 정책 유형에서 지원하는 지표를 봅니다.

------
#### [ EBS snapshot policies ]


| 지표 | 설명 | 
| --- | --- | 
|  `ResourcesTargeted`  |  스냅샷 또는 EBS 지원 AMI 정책에서 지정한 태그의 대상이 되는 리소스 수입니다.  | 
|  `SnapshotsCreateStarted`  |  스냅샷 정책을 통해 시작한 스냅샷 생성 작업의 수입니다. 재시도를 여러 번 연속으로 수행한 경우에도 각 작업은 한 번만 기록됩니다. 스냅샷 생성 작업이 실패할 경우 Amazon Data Lifecycle Manager는 `SnapshotsCreateFailed` 지표를 전송합니다.  | 
|  `SnapshotsCreateCompleted`  |  스냅샷 정책에서 생성한 스냅샷 수입니다. 여기에는 예약된 시간으로부터 60분 이내에 성공한 재시도를 포함합니다.  | 
|  `SnapshotsCreateFailed`  |  스냅샷 정책에서 생성할 수 없는 스냅샷 수입니다. 여기에는 예약된 시간으로부터 60분 이내에 실패한 재시도를 포함합니다.  | 
|  `SnapshotsSharedCompleted`  |  스냅샷 정책을 통해 계정 간에 공유되는 스냅샷 수입니다.  | 
|  `SnapshotsDeleteCompleted`  |  스냅샷 또는 EBS 지원 AMI 정책을 통해 삭제한 스냅샷 수입니다. 이 지표는 정책을 통해 생성한 스냅샷에만 적용됩니다. 정책을 통해 생성한 교차 리전 스냅샷 복사본에는 적용되지 않습니다. 이 지표에는 EBS 지원 AMI 정책이 AMI를 등록 취소할 때 삭제되는 스냅샷을 포함합니다.  | 
|  `SnapshotsDeleteFailed`  |  스냅샷 또는 EBS 지원 AMI 정책을 통해 삭제할 수 없는 스냅샷 수입니다. 이 지표는 정책을 통해 생성한 스냅샷에만 적용됩니다. 정책을 통해 생성한 교차 리전 스냅샷 복사본에는 적용되지 않습니다. 이 지표에는 EBS 지원 AMI 정책이 AMI를 등록 취소할 때 삭제되는 스냅샷을 포함합니다.  | 
|  `SnapshotsCopiedRegionStarted`  |  스냅샷 정책을 통해 시작한 교차 리전 스냅샷 복사 작업의 수입니다.  | 
|  `SnapshotsCopiedRegionCompleted`  |  스냅샷 정책을 통해 생성한 교차 리전 스냅샷 복사본 수입니다. 여기에는 예약된 시간으로부터 24시간 이내에 성공한 재시도를 포함합니다.  | 
|  `SnapshotsCopiedRegionFailed`  |  스냅샷 정책을 통해 생성할 수 없는 교차 리전 스냅샷 복사본 수입니다. 여기에는 예약된 시간으로부터 24시간 이내에 실패한 재시도를 포함합니다.  | 
|  `SnapshotsCopiedRegionDeleteCompleted`  |  보존 규칙에서 지정한 대로 스냅샷 정책을 통해 삭제한 교차 리전 스냅샷 복사본의 수입니다.  | 
|  `SnapshotsCopiedRegionDeleteFailed`  |  보존 규칙에서 지정한 대로 스냅샷 정책을 통해 삭제할 수 없는 교차 리전 스냅샷 복사본의 수입니다.  | 
|  `snapshotsArchiveDeletionFailed`  |  스냅샷 정책에 따라 아카이브 티어에서 삭제할 수 없었던 아카이빙된 스냅샷 수입니다.  | 
|  `snapshotsArchiveScheduled`  |  스냅샷 정책에 따라 아카이빙이 예약된 스냅샷 수입니다.  | 
|  `snapshotsArchiveCompleted`  |  스냅샷 정책에 따라 아카이빙된 스냅샷 수입니다.  | 
|  `snapshotsArchiveFailed`  |  스냅샷 정책 따라 아카이빙할 수 없었던 스냅샷 수입니다.  | 
|  `snapshotsArchiveDeletionCompleted`  |  스냅샷 정책에 따라 아카이브 티어에서 삭제된 아카이빙된 스냅샷 수입니다.  | 
|  `PreScriptStarted`  |  사전 스크립트가 성공적으로 시작된 인스턴스 수입니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `PreScriptCompleted`  |  사전 스크립트가 성공적으로 완료된 인스턴스 수입니다. 사전 스크립트가 지정된 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `PreScriptFailed`  |  사전 스크립트가 성공적으로 완료되지 못한 인스턴스 수입니다. 사전 스크립트가 지정된 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `PostScriptStarted`  |  사후 스크립트가 성공적으로 시작된 인스턴스 수입니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  PostScriptCompleted  |  사후 스크립트가 성공적으로 완료된 인스턴스 수입니다. 사후 스크립트가 지정된 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  PostScriptFailed  |  사후 스크립트가 성공적으로 완료되지 못한 인스턴스 수입니다. 사후 스크립트가 지정된 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `VSSBackupStarted`  |  VSS 백업이 성공적으로 시작된 인스턴스 수입니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `VSSBackupCompleted`  |  VSS 백업이 성공적으로 완료된 인스턴스 수입니다. VSS 백업이 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 
|  `VSSBackupFailed`  |  VSS 백업이 성공적으로 완료되지 못한 인스턴스 수입니다. VSS 백업이 제한 시간을 벗어나 완료되는 경우에도 지표가 내보내집니다. 스크립트 재시도가 활성화된 경우 정책 실행당 이 지표가 여러 번 내보내질 수 있습니다.  | 

------
#### [ EBS-backed AMI policies ]

EBS 지원 AMI 정책과 함께 사용할 수 있는 지표는 다음과 같습니다.


| 지표 | 설명 | 
| --- | --- | 
|  `ResourcesTargeted`  |  스냅샷 또는 EBS 지원 AMI 정책에서 지정한 태그의 대상이 되는 리소스 수입니다.  | 
|  `SnapshotsDeleteCompleted`  |  스냅샷 또는 EBS 지원 AMI 정책을 통해 삭제한 스냅샷 수입니다. 이 지표는 정책을 통해 생성한 스냅샷에만 적용됩니다. 정책을 통해 생성한 교차 리전 스냅샷 복사본에는 적용되지 않습니다. 이 지표에는 EBS 지원 AMI 정책이 AMI를 등록 취소할 때 삭제되는 스냅샷을 포함합니다.  | 
|  `SnapshotsDeleteFailed`  |  스냅샷 또는 EBS 지원 AMI 정책을 통해 삭제할 수 없는 스냅샷 수입니다. 이 지표는 정책을 통해 생성한 스냅샷에만 적용됩니다. 정책을 통해 생성한 교차 리전 스냅샷 복사본에는 적용되지 않습니다. 이 지표에는 EBS 지원 AMI 정책이 AMI를 등록 취소할 때 삭제되는 스냅샷을 포함합니다.  | 
|  `SnapshotsCopiedRegionDeleteCompleted`  |  보존 규칙에서 지정한 대로 스냅샷 정책을 통해 삭제한 교차 리전 스냅샷 복사본의 수입니다.  | 
|  `SnapshotsCopiedRegionDeleteFailed`  |  보존 규칙에서 지정한 대로 스냅샷 정책을 통해 삭제할 수 없는 교차 리전 스냅샷 복사본의 수입니다.  | 
|  `ImagesCreateStarted`  |  EBS 지원 AMI 정책을 통해 시작한 **CreateImage** 작업 수입니다.  | 
|  `ImagesCreateCompleted`  |  EBS 지원 AMI 정책을 통해 생성한 AMI 수입니다.  | 
|  `ImagesCreateFailed`  |  EBS 지원 AMI 정책을 통해 생성할 수 없는 AMI 수입니다.  | 
|  `ImagesDeregisterCompleted`  |  EBS 지원 AMI 정책을 통해 등록 취소된 AMI 수입니다.  | 
|  `ImagesDeregisterFailed`  |  EBS 지원 AMI 정책을 통해 등록 취소할 수 없는 AMI 수입니다.  | 
|  `ImagesCopiedRegionStarted`  |  EBS 지원 AMI 정책을 통해 시작한 교차 리전 복사 작업의 수입니다.  | 
|  `ImagesCopiedRegionCompleted`  |  EBS 지원 AMI 정책을 통해 생성한 교차 리전 AMI 복사본 수입니다.  | 
|  `ImagesCopiedRegionFailed`  |  EBS 지원 AMI 정책을 통해 생성할 수 없는 교차 리전 AMI 복사본 수입니다.  | 
|  `ImagesCopiedRegionDeregisterCompleted`  |  보존 규칙에서 지정한 대로 EBS 지원 AMI 정책을 통해 등록 취소된 교차 리전 AMI 복사본의 수입니다.  | 
|  `ImagesCopiedRegionDeregisteredFailed`  |  보존 규칙에서 지정한 대로 EBS 지원 AMI 정책을 통해 등록 취소할 수 없는 교차 리전 AMI 복사본의 수입니다.  | 
|  `EnableImageDeprecationCompleted`  |  EBS 지원 AMI 정책에 의해 사용 중단으로 표시된 AMI 수입니다.  | 
|  `EnableImageDeprecationFailed`  |  EBS 지원 AMI 정책에 의해 사용 중단으로 표시될 수 없는 AMI 수입니다.  | 
|  `EnableCopiedImageDeprecationCompleted`  |  EBS 지원 AMI 정책에 의해 사용 중단으로 표시된 교차 리전 AMI 사본의 수입니다.  | 
|  `EnableCopiedImageDeprecationFailed`  |  EBS 지원 AMI 정책에 의해 사용 중단으로 표시될 수 없는 교차 리전 AMI 사본의 수입니다.  | 

------
#### [ Cross-account copy event policies ]

다음 지표는 교차 계정 복사 이벤트 정책과 함께 사용할 수 있습니다.


| 지표 | 설명 | 
| --- | --- | 
|  `SnapshotsCopiedAccountStarted`  |  교차 계정 복사 이벤트 정책을 통해 시작한 교차 계정 스냅샷 복사 작업의 수입니다.  | 
|  `SnapshotsCopiedAccountCompleted`  |  교차 계정 복사 이벤트 정책을 통해 다른 계정에서 복사된 스냅샷 수입니다. 여기에는 예약된 시간으로부터 24시간 이내에 성공한 재시도를 포함합니다.  | 
|  `SnapshotsCopiedAccountFailed`  |  교차 계정 복사 이벤트 정책을 통해 다른 계정에서 복사할 수 없는 스냅샷 수입니다. 여기에는 예약된 시간으로부터 24시간 이내에 실패한 재시도를 포함합니다.  | 
|  `SnapshotsCopiedAccountDeleteCompleted`  |  교차 계정 복사 이벤트 정책을 통해 보존 규칙에서 지정된 대로 삭제한 교차 리전 스냅샷 복사본의 수입니다.  | 
|  `SnapshotsCopiedAccountDeleteFailed`  |  교차 계정 복사 이벤트 정책을 통해 보존 규칙에서 지정된 대로 삭제할 수 없는 교차 리전 스냅샷 복사본의 수입니다.  | 

------

## 정책에 대한 CloudWatch 지표 보기
<a name="view-metrics"></a>

 AWS Management Console 또는 명령줄 도구를 사용하여 Amazon Data Lifecycle Manager가 Amazon CloudWatch로 보내는 지표를 나열할 수 있습니다.

------
#### [ Amazon EC2 console ]

**Amazon EC2 콘솔을 사용하여 지표를 보려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **수명 주기 관리자(Lifecycle Manager)**를 선택합니다.

1. 그리드에서 정책을 선택한 다음 **모니터링(Monitoring)** 탭을 선택합니다.

------
#### [ CloudWatch console ]

**Amazon CloudWatch 콘솔을 사용한 지표 확인**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **지표**를 선택합니다.

1. **EBS** 네임스페이스를 선택한 다음 [**Data Lifecycle Manager 지표(Data Lifecycle Manager metrics)**]를 선택합니다.

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

**Amazon Data Lifecycle Manager에 대해 사용 가능한 모든 지표를 나열하려면**  
[list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 명령을 사용합니다.

```
$ C:\> aws cloudwatch list-metrics \
    --namespace AWS/EBS
```

**특정 정책에 대한 모든 지표를 나열하려면**  
[list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 명령을 사용하여 `DLMPolicyId` 차원을 지정합니다.

```
$ C:\> aws cloudwatch list-metrics \
    --namespace AWS/EBS \
    --dimensions Name=DLMPolicyId,Value=policy-abcdef01234567890
```

**모든 정책에서 단일 지표를 나열하려면**  
[list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 명령을 사용하여 `--metric-name` 옵션을 지정합니다.

```
$ C:\> aws cloudwatch list-metrics \
    --namespace AWS/EBS \
    --metric-name SnapshotsCreateCompleted
```

------

## 정책에 대한 그래프 지표
<a name="graph-metrics"></a>

정책을 생성한 후 Amazon EC2 콘솔을 열고 **모니터링(Monitoring)** 탭에서 정책에 대한 모니터링 그래프를 볼 수 있습니다. 각 그래프는 사용 가능한 Amazon EC2 측정치 중 하나를 기반으로 합니다.

다음과 같은 그래프 지표를 사용할 수 있습니다.
+ 대상 리소스(`ResourcesTargeted` 기준)
+ 스냅샷 생성이 시작됨(`SnapshotsCreateStarted` 기준)
+ 스냅샷 생성이 완료됨(`SnapshotsCreateCompleted` 기준)
+ 스냅샷 생성 실패(`SnapshotsCreateFailed` 기준)
+ 스냅샷 공유가 완료됨(`SnapshotsSharedCompleted` 기준)
+ 스냅샷 삭제가 완료됨(`SnapshotsDeleteCompleted` 기준)
+ 스냅샷 삭제 실패(`SnapshotsDeleteFailed` 기준)
+ 스냅샷 교차 리전 복사가 시작됨(`SnapshotsCopiedRegionStarted` 기준)
+ 스냅샷 교차 리전 복사가 완료됨(`SnapshotsCopiedRegionCompleted` 기준)
+ 스냅샷 교차 리전 복사 실패(`SnapshotsCopiedRegionFailed` 기준)
+ 스냅샷 교처 리전 사본 삭제가 완료됨(`SnapshotsCopiedRegionDeleteCompleted` 기준)
+ 스냅샷 교차 리전 사본 삭제 실패(`SnapshotsCopiedRegionDeleteFailed` 기준)
+ 스냅샷 교차 계정 복사가 시작됨(`SnapshotsCopiedAccountStarted` 기준)
+ 스냅샷 교차 계정 복사가 완료됨(`SnapshotsCopiedAccountCompleted` 기준)
+ 스냅샷 교차 계정 복사 실패(`SnapshotsCopiedAccountFailed` 기준)
+ 스냅샷 교차 계정 사본 삭제가 완료됨(`SnapshotsCopiedAccountDeleteCompleted` 기준)
+ 스냅샷 교차 계정 사본 삭제 실패(`SnapshotsCopiedAccountDeleteFailed` 기준)
+ AMI 생성이 시작됨(`ImagesCreateStarted` 기준)
+ AMI 생성이 완료됨(`ImagesCreateCompleted` 기준)
+ AMI 생성 실패(`ImagesCreateFailed` 기준)
+ AMI 등록 취소가 완료됨(`ImagesDeregisterCompleted` 기준)
+ AMI 등록 취소 실패(`ImagesDeregisterFailed` 기준)
+ AMI 교차 리전 복사가 시작됨(`ImagesCopiedRegionStarted` 기준)
+ AMI 교차 리전 복사가 완료됨(`ImagesCopiedRegionCompleted` 기준)
+ AMI 교차 리전 복사 실패(`ImagesCopiedRegionFailed` 기준)
+ AMI 교차 리전 사본 등록 취소가 완료됨(`ImagesCopiedRegionDeregisterCompleted` 기준)
+ AMI 교차 리전 사본 등록 취소 실패(`ImagesCopiedRegionDeregisteredFailed` 기준)
+ AMI 사용 중단 활성화가 완료됨(`EnableImageDeprecationCompleted` 기준)
+ AMI 사용 중단 활성화 실패(`EnableImageDeprecationFailed` 기준)
+ AMI 교차 리전 사본 사용 중단 활성화가 완료됨(`EnableCopiedImageDeprecationCompleted` 기준)
+ AMI 교차 리전 사본 사용 중단 활성화 실패(`EnableCopiedImageDeprecationFailed` 기준)

## 정책에 대한 CloudWatch 경보 만들기
<a name="create-alarm"></a>

정책에 대한 CloudWatch 지표를 모니터링하는 CloudWatch 경보를 생성할 수 있습니다. 지표가 지정한 임계값에 도달하면 CloudWatch에서 자동으로 알림을 보냅니다. CloudWatch 콘솔을 이용하여 CloudWatch 경보를 생성할 수 있습니다.

CloudWatch 콘솔을 사용하여 경보를 생성하는 방법에 대한 정보는 Amazon CloudWatch 사용 설명서**에서 다음 주제를 참조하세요.
+ [정적 임계점을 기반으로 CloudWatch 경보 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)
+ [이상 탐지를 기반으로 CloudWatch 경보 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_Anomaly_Detection_Alarm.html)

## 사용 사례 예시
<a name="use-cases"></a>

다음은 사용 사례의 예입니다.

**Topics**
+ [예제 1: ResourcesTargeted 지표](#case1)
+ [예제 2: SnapshotDeleteFailed 지표](#case2)
+ [예제 3: SnapshotsCopiedRegionFailed 지표](#case3)

### 예제 1: ResourcesTargeted 지표
<a name="case1"></a>

`ResourcesTargeted` 지표를 사용하여 특정 정책이 실행될 때마다 대상이 되는 총 리소스 수를 모니터링할 수 있습니다. 이렇게 하면 대상 리소스 수가 예상 임계값보다 작거나 초과할 때 경보를 트리거할 수 있습니다.

예를 들어 일일 정책에 따라 `50` 볼륨 이하의 백업을 생성할 것으로 예상하는 경우, `ResourcesTargeted`에 대한 `sum`이 `1` 시간의 기간에 대해 `50`보다 클 때 이메일 알림을 보내는 경보를 생성할 수 있습니다. 이렇게 하면 태그가 잘못 지정된 볼륨에서 예기치 않게 스냅샷이 생성되지 않았는지 확인할 수 있습니다.

다음 명령을 사용하여 이 경보를 생성할 수 있습니다.

```
$ C:\> aws cloudwatch put-metric-alarm \
    --alarm-name resource-targeted-monitor \
    --alarm-description "Alarm when policy targets more than 50 resources" \
    --metric-name ResourcesTargeted \
    --namespace AWS/EBS \
    --statistic Sum \
    --period 3600 \
    --threshold 50 \
    --comparison-operator GreaterThanThreshold \
    --dimensions "Name=DLMPolicyId,Value=policy_id" \
    --evaluation-periods 1 \
    --alarm-actions sns_topic_arn
```

### 예제 2: SnapshotDeleteFailed 지표
<a name="case2"></a>

`SnapshotDeleteFailed` 지표를 사용하여 정책의 스냅샷 보존 규칙에 따라 스냅샷 삭제 실패를 모니터링할 수 있습니다.

예를 들어, 스냅샷을 12시간마다 자동으로 삭제하는 정책을 작성한 경우, `SnapshotDeletionFailed`의 `sum`이 `1` 시간의 기간에 대해 `0`보다 클 때 엔지니어링 팀에 알리는 경보를 만들 수 있습니다. 이렇게 하면 부적절한 스냅샷 보존을 조사하고 불필요한 스냅샷으로 인해 스토리지 비용이 증가하지 않는지 확인하는 데 도움이 될 수 있습니다.

다음 명령을 사용하여 이 경보를 생성할 수 있습니다.

```
$ C:\> aws cloudwatch put-metric-alarm \
    --alarm-name snapshot-deletion-failed-monitor \
    --alarm-description "Alarm when snapshot deletions fail" \
    --metric-name SnapshotsDeleteFailed \
    --namespace AWS/EBS \
    --statistic Sum \
    --period 3600 \
    --threshold 0 \
    --comparison-operator GreaterThanThreshold \
    --dimensions "Name=DLMPolicyId,Value=policy_id" \
    --evaluation-periods 1 \
    --alarm-actions sns_topic_arn
```

### 예제 3: SnapshotsCopiedRegionFailed 지표
<a name="case3"></a>

`SnapshotsCopiedRegionFailed` 지표를 사용하여 정책이 스냅샷을 다른 리전으로 복사하지 못하는 시기를 식별할 수 있습니다.

예를 들어 정책이 여러 리전에 걸쳐 매일 스냅샷을 복사하는 경우, `SnapshotCrossRegionCopyFailed`의 `sum`이 `1` 시간의 기간에 대해 `0`보다 클 때 엔지니어링 팀에 SMS를 보내는 경보를 만들 수 있습니다. 이 기능은 계통의 후속 스냅샷이 정책을 통해 성공적으로 복사되었는지 확인하는 데 유용할 수 있습니다.

다음 명령을 사용하여 이 경보를 생성할 수 있습니다.

```
$ C:\> aws cloudwatch put-metric-alarm \
    --alarm-name snapshot-copy-region-failed-monitor \
    --alarm-description "Alarm when snapshot copy fails" \
    --metric-name SnapshotsCopiedRegionFailed \
    --namespace AWS/EBS \
    --statistic Sum \
    --period 3600 \
    --threshold 0 \
    --comparison-operator GreaterThanThreshold \
    --dimensions "Name=DLMPolicyId,Value=policy_id" \
    --evaluation-periods 1 \
    --alarm-actions sns_topic_arn
```

## 실패한 작업을 보고하는 정책 관리
<a name="manage"></a>

정책 중 하나에서 실패한 작업 지표에 대해 0이 아닌 값을 예기치 않게 보고할 경우 수행할 작업에 대한 자세한 내용은 문서 [Amazon Data Lifecycle Manager가 CloudWatch 지표에서 실패한 작업을 보고할 경우 어떻게 해야 합니까?](https://repost.aws/knowledge-center/cloudwatch-metrics-dlm)를 참조하세요. 

# Amazon Data Lifecycle Manager를 위한 서비스 엔드포인트
<a name="dlm-service-endpoints"></a>

*엔드포인트*는 AWS 웹 서비스의 진입점 역할을 하는 URL입니다. Amazon Data Lifecycle Manager는 다음과 같은 엔드포인트 유형을 지원합니다.
+ IPv4 엔드포인트
+ IPv4 및 IPv6를 모두 지원하는 이중 스택 엔드포인트
+ FIPS 엔드포인트

요청 시에, 사용할 엔드포인트와 리전을 지정할 수 있습니다. 엔드포인트를 지정하지 않으면 기본적으로 IPv4 엔드포인트가 사용됩니다. 다른 엔드포인트 유형을 사용하려면 요청에서 이를 지정해야 합니다. 이렇게 하는 방법의 예제는 [엔드포인트 지정](#dlm-endpoint-examples) 섹션을 참조하세요.

Amazon Data Lifecycle Manager의 경우 *Amazon Web Services 일반 참조*의 [Amazon Data Lifecycle Manager 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/dlm.html)를 참조하세요

**Topics**
+ [IPv4 엔드포인트](#dlm-ipv4)
+ [이중 스택(IPv4 및 IPv6) 엔드포인트](#dlm-ipv6)
+ [FIPS 엔드포인트](#dlm-fips)
+ [엔드포인트 지정](#dlm-endpoint-examples)

## IPv4 엔드포인트
<a name="dlm-ipv4"></a>

IPv4 엔드포인트는 IPv4 트래픽만 지원합니다. IPv4 엔드포인트는 모든 리전에 사용할 수 있습니다.

엔드포인트 이름의 일부로 리전을 지정해야 합니다. 엔드포인트 이름에는 다음 명명 규칙이 사용됩니다.
+ dlm.*region*.amazonaws.com

예를 들어 미국 동부(버지니아 북부) 리전의 IPv4 엔드포인트는 `dlm.us-east-1.amazonaws.com`입니다.

## 이중 스택(IPv4 및 IPv6) 엔드포인트
<a name="dlm-ipv6"></a>

이중 스택 엔드포인트는 IPv4 트래픽과 IPv6 트래픽을 모두 지원합니다. 이중 스택 엔드포인트는 모든 리전에 사용할 수 있습니다.

IPv6를 사용하려면 이중 스택 엔드포인트를 사용해야 합니다. 이중 스택 엔드포인트에 요청하는 경우, 엔드포인트 URL이 네트워크 및 클라이언트에서 사용하는 프로토콜에 따라 IPv6 또는 IPv4 주소로 확인됩니다.

엔드포인트 이름의 일부로 리전을 지정해야 합니다. 이중 스택 엔드포인트 이름에는 다음 명명 규칙이 사용됩니다.
+ `dlm.region.api.aws`

예를 들어 미국 동부(버지니아 북부) 리전의 듀얼 스택 엔드포인트는 `dlm.us-east-1.api.aws`입니다.

## FIPS 엔드포인트
<a name="dlm-fips"></a>

Amazon Data Lifecycle Manager는 다음 리전에 대해 FIPS 검증 듀얼 스택(IPv4 및 IPv6) 엔드포인트를 제공합니다.
+ `us-east-1` - 미국 동부(버지니아 북부)
+ `us-east-2` - 미국 동부(오하이오)
+ `us-west-1` - 미국 서부(캘리포니아 북부)
+ `us-west-2` - 미국 서부(오레곤)
+ `ca-central-1` - 캐나다(중부)
+ `ca-west-1` - 캐나다 서부(캘거리)

FIPS 듀얼 스택 엔드포인트는 명명 규칙을 사용합니다`dlm-fips.region.api.aws`. 예를 들어 미국 동부(버지니아 북부) 리전의 FIPS 듀얼 스택 엔드포인트는 `dlm-fips.us-east-1.api.aws`입니다.

## 엔드포인트 지정
<a name="dlm-endpoint-examples"></a>

다음 예는 AWS CLI를 사용하여 `US East (N. Virginia)` 리전의 엔드포인트를 지정하는 방법을 보여줍니다.
+ **이중 스택**

  ```
  aws dlm create-default-role \
  --resource-type snapshot \
  --endpoint-url https://dlm.us-east-2.api.aws
  ```
+ **IPv4**

  ```
  aws dlm create-default-role \
  --resource-type snapshot \
  --endpoint-url https://dlm.us-east-2.amazonaws.com
  ```

# VPC와 Amazon EBS 간에 프라이빗 연결 생성
<a name="dlm-vpc-endpoints"></a>

[AWS PrivateLink](https://aws.amazon.com/privatelink/)에서 제공되는 *인터페이스 VPC 엔드포인트*를 생성하여 VPC와 Amazon EBS 간에 프라이빗 연결을 설정할 수 있습니다. 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결을 사용하지 않고 VPC에 있는 것처럼 Amazon EBS에 액세스할 수 있습니다. VPC의 인스턴스는 Amazon EBS와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다.

인터페이스 엔드포인트에 대해 사용 설정하는 각 서브넷에서 엔드포인트 네트워크 인터페이스를 생성합니다.

자세한 내용은 *AWS PrivateLink 가이드*의를 [AWS 서비스 통한 액세스를 AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html) 참조하세요.

**참고**  
Amazon Data Lifecycle Manager는 모든 상용 및 AWS GovCloud (US) 리전에 대해 IPv4 인터페이스 VPC 엔드포인트를 지원하고 상용 리전에 대해서만 IPv6 인터페이스 VPC 엔드포인트를 지원합니다.

## Amazon EBS VPC 엔드포인트에 대한 고려 사항
<a name="dlm-vpc-endpoint-considerations"></a>

Amazon EBS에 대한 인터페이스 VPC 엔드포인트를 설정하려면 먼저 *AWS PrivateLink 가이드*의 [고려 사항](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#considerations-interface-endpoints)을 검토합니다.

기본적으로 엔드포인트를 통해 Amazon EBS에 대한 전체 액세스가 허용됩니다. VPC 엔드포인트 정책을 사용하여 인터페이스 엔드포인트에 대한 액세스를 제어할 수 있습니다. Amazon EBS에 대한 액세스를 제어하는 VPC 엔드포인트에 엔드포인트 정책을 연결할 수 있습니다. 이 정책은 다음 정보를 지정합니다.
+ 작업을 수행할 수 있는 **위탁자**.
+ 수행할 수 있는 **작업**.
+ 작업을 수행할 수 있는 **리소스**.

자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 종단점을 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

다음은 Amazon EBS에 대한 엔드포인트 정책의 예입니다. 이 정책은 엔드포인트에 연결되면 모든 사용자에게 Amazon Data Lifecycle Manager 정책에 대한 요약 정보를 가져올 수 있는 권한을 부여합니다.

```
{
  "Statement": [{
    "Action": "dlm:GetLifecyclePolicies",
    "Effect": "Allow",
    "Principal": "*",
    "Resource": "*"
  }]
}
```

## Amazon EBS에 대한 인터페이스 VPC 엔드포인트를 생성합니다.
<a name="dlm-vpc-endpoint-create"></a>

Amazon VPC 콘솔 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon EBS에 대한 VPC 엔드포인트를 생성할 수 있습니다. 자세한 정보는 *AWS PrivateLink 가이드*의 [VPC 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)을 참조하세요.

다음 서비스 이름을 사용하여 Amazon EBS에 대한 VPC 엔드포인트를 생성합니다.
+ `com.amazonaws.region.dlm`

엔드포인트에 프라이빗 DNS를 사용하도록 설정하는 경우 리전에 대한 기본 DNS 이름(예: `dlm.us-east-1.amazonaws.com`)을 사용하여 Amazon EBS에 API 요청을 할 수 있습니다.

# Amazon Data Lifecycle Manager 문제 해결
<a name="dlm-troubleshooting"></a>

다음 설명서는 발생 가능한 문제를 해결하는 데 도움이 됩니다.

**Topics**
+ [오류: `Role with name already exists`](#dlm-role-arn-issue)

## 오류: `Role with name already exists`
<a name="dlm-role-arn-issue"></a>

**설명**  
콘솔을 사용하여 정책을 생성하려고 하면 `Role with name AWSDataLifecycleManagerDefaultRole already exists` 또는 `Role with name AWSDataLifecycleManagerDefaultRoleForAMIManagement already exists` 오류가 발생합니다.

**원인**  
기본 역할의 ARN 형식은 콘솔을 사용하여 생성했는지 AWS CLI를 사용하여 생성했는지에 따라 다릅니다. ARN은 다르지만 역할은 동일한 역할 이름을 사용하므로 콘솔과 AWS CLI간에 역할 이름 지정 충돌이 발생합니다.

**Solution**  
이 문제를 해결하려면 다음과 같이 실행합니다.

1. (*사전 및 사후 스크립트에 대해 활성화된 스냅샷 정책의 경우에만 해당*) **AWSDataLifecycleManagerSSMFullAccess** AWS 관리형 정책을 **AWSDataLifecycleManagerDefaultRole** IAM 역할에 수동으로 연결합니다. 자세한 내용은 [IAM ID 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)를 참조하세요.

1. Amazon Data Lifecycle Manager 정책을 생성할 때 **IAM 역할**에서 **다른 역할 선택**을 선택하고 **AWSDataLifecycleManagerDefaultRole**(스냅샷 정책의 경우) 또는 **AWSDataLifecycleManagerDefaultRoleForAMIManagement**(AMI 정책의 경우)를 선택합니다.

1. 평소와 같이 정책을 계속 생성합니다.