복제 인스턴스에서 스토리지가 가득 차지 않도록 AWS DMS 오류 로그 삭제 프로세스를 자동화하려면 어떻게 해야 하나요?
최종 업데이트 날짜: 2021년 6월 4일
AWS Database Migration Service(AWS DMS) 오류 로그 삭제 프로세스를 자동화하여 더 자주 삭제하고 싶습니다. 어떻게 해야 하나요?
간략한 설명
AWS DMS 오류 로그가 DMS 복제 인스턴스에서 많은 공간을 차지하는 경우 복제 인스턴스가 스토리지 가득 참 상태가 될 수 있습니다. 이 문제를 해결하려면 DMS 태스크에 대한 DMS 태스크 오류 로그를 삭제하세요.
다음 방법 중 하나를 사용하여 AWS DMS 태스크에 대한 오류 로그를 삭제할 수 있습니다.
- AWS DMS 콘솔 사용
- AWS 명령줄 인터페이스(AWS CLI) 사용
- API 사용(이 예제에서 Python으로 구현됨)
참고: 스토리지 가득 참이 발생할 수 있는 다른 여러 가지 이유가 있습니다. AWS DMS의 스토리지 가득 참 문제 해결에 대한 자세한 내용은 AWS DMS 복제 DB 인스턴스가 스토리지가 가득 참 상태인 이유는 무엇인가요?를 참조하세요.
해결 방법
참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.
AWS DMS 콘솔을 사용하여 오류 로그 삭제
DMS 태스크의 오류 로그를 수동으로 삭제하려면 AWS DMS에 대한 Amazon CloudWatch Logs를 활성화, 액세스 및 삭제하려면 어떻게 해야 하나요?를 참조하세요.
AWS CLI를 사용하여 오류 로그 삭제
다음 AWS CLI 명령으로 태스크 설정을 수정하여 DMS 태스크 로그를 삭제할 수 있습니다.
aws dms modify-replication-task --replication-task-arn <DMS task ARN> --replication-task-settings '{"Logging": { "DeleteTaskLogs": true}}'
이 명령은 "DeleteTaskLogs": true 파라미터를 변경하여 태스크를 수정합니다. 이 파라미터와 값을 사용하여 태스크 설정을 추가하면 이 태스크에 대해 존재하는 모든 로그가 복제 인스턴스에서 삭제됩니다. 로그가 삭제되면 태스크 설정에 의해 "DeleteTaskLogs": true 파라미터가 제거됩니다. 이 명령을 실행한 후 복제 인스턴스에서 로그가 삭제되었는지 확인합니다.
로그를 주기적으로 삭제하려면 매번 "DeleteTaskLogs": true 파라미터를 사용하여 태스크 설정을 수정합니다. cronjob을 사용하여 주기적으로 실행되도록 이 AWS CLI 명령을 예약할 수 있습니다. 태스크 설정 수정에 대한 자세한 내용은 AWS CLI 참조의 modify-replication-task를 참조하세요.
API(Lambda)를 사용하여 태스크 로그 삭제 프로세스 자동화
AWS DMS 태스크 로그는 모든 복제 인스턴스에 대해 7일마다 삭제됩니다. 로그를 더 자주 삭제하려면 스크립트를 만들고 매일 또는 원하는 빈도로 실행되도록 프로세스를 자동화할 수 있습니다. 이 예제에서는 간단한 Python 코드로 AWS Lambda를 사용하여 제공된 태스크 ARN에 대한 태스크 오류 로그 삭제를 자동화합니다.
Lambda 함수 설정
Lambda 함수를 설정하려면 다음 단계를 수행합니다.
1. Lambda 콘솔을 열고 DMS 리소스가 포함된 AWS 리전을 선택합니다.
2. [함수(Functions)] 패널에서 [함수 생성(Create function)]을 선택합니다
3. [함수 이름(Function name)]을 입력합니다.
4. [런타임(Runtime)]에서 [python 3.8]을 선택합니다.
5. [기본 실행 역할 변경(Change default execution role)]에서 [기본 Lambda 권한을 가진 새 역할 생성(Create a new role with basic Lambda permissions)]을 선택합니다. Lambda가 생성하는 AWS Identity and Access Management(IAM) 역할 이름을 확인합니다.
6. [함수 생성]을 선택합니다.
7. AWS IAM 콘솔을 열고 Lambda 함수에 의해 생성된 IAM 역할을 엽니다.
8. 다음 JSON을 사용하여IAM 정책을 생성합니다. 리소스에 대한 태스크 ARN을 바꿔야 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dms:ModifyReplicationTask"
],
"Resource": "arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
]
}
9. 새로 생성된 정책을 Lambda 함수에 의해 생성된 역할에 연결합니다.
10. Lambda 콘솔을 열고 생성한 Lambda 함수를 선택합니다.
11. [함수 코드(Function code)]에 다음 코드를 입력하고 [배포(Deploy)]를 클릭합니다.
import boto3
import json
client = boto3.client('dms')
def lambda_handler(event, context):
# specific task ARN
taskarn = 'arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
# modify the DMS task
response = client.modify_replication_task(
ReplicationTaskArn=taskarn,
ReplicationTaskSettings='{"Logging": { "DeleteTaskLogs": true}}'
)
12. [테스트(Test)]를 선택하고 기본 템플릿과 함께 [이벤트 이름(Event name)]을 입력합니다.
13. [생성(Create)]을 선택합니다.
14. [테스트(Test)]를 다시 선택하면 코드가 오류 없이 실행됩니다.
이러한 단계를 수행하면 DMS 태스크 상태가 [수정 중(Modifying)]으로 변경됩니다. 동시에 복제 인스턴스 아래의 DMS 태스크 오류 로그가 삭제되는 것을 확인할 수 있습니다.
Lambda 스케줄러를 사용하여 자동화
Lambda Scheduler를 사용하여 DMS 태스크 오류 로그의 삭제를 자동화하려면 다음 단계를 수행합니다.
1. Lambda 콘솔을 열고 생성한 Lambda 함수를 선택합니다.
2. [디자이너(Designer)]에서 [트리거 추가(Add trigger)]를 선택합니다.
3. 드롭다운 목록에서 [EventBridge(Cloudwatch 이벤트)(EventBridge (Cloudwatch Events))]를 선택합니다.
4. [규칙(Rule)]에서 [새 규칙 생성(Create a new rule)]을 선택합니다.
5. [규칙 이름(Rule name)]과 [규칙 설명(Rule description)]을 입력합니다.
6. 7일마다 코드를 실행하려면 [예약 표현식(schedule expression)]에 [rate(7일)(rate (7 days))]을 입력합니다. 보다 유연한 표현식은 rate 또는 cron을 사용하는 예약 표현식을 참조하세요.
7. [추가(Add)]를 선택합니다.
이 단계를 완료하면 7일에 한 번씩 지정된 DMS 로그를 삭제하도록 자동화가 설정됩니다.
참고: 비즈니스 요구 사항에 따라 이 코드를 변경하고 최적화할 수 있습니다. cronjob 또는 Lambda 스케줄러를 사용하여 주기적으로 실행되도록 이 스크립트를 예약할 수도 있습니다.