Amazon RDS for Oracle를 Amazon S3와 통합할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?

5분 분량
0

Oracle용 Amazon Relational Database Service(RDS)를 Amazon Simple Storage Service(S3)와 통합할 때 발생하는 문제와 오류를 해결하고 싶습니다.

간략한 설명

Amazon RDS for Oracle DB 인스턴스와 Amazon S3 버킷 간에 파일을 전송할 때는 다음 조건을 충족하는지 확인하세요.

  • DB 인스턴스와 S3 버킷이 같은 AWS 리전에 있습니다.
  • DB 인스턴스에 S3 버킷 액세스 권한이 있습니다.
  • DB 인스턴스가 S3_INTEGRATION 옵션을 포함하는 그룹 옵션과 연결되어 있습니다.
  • Oracle 디렉토리 개체에만 파일을 업로드하고 있습니다. 이 디렉터리는 사용자 생성 디렉터리나 DATA_PUMP_DIR 디렉터리일 수 있습니다.
  • 사용자 생성 디렉터리일 경우, 업로드 및 다운로드를 하는 사용자는 디렉터리를 읽고 쓸 수 있는 권한이 반드시 있어야 합니다. 자세한 내용은 Amazon RDS for Oracle DB 인스턴스에서 사용자 권한 및 역할을 관리하려면 어떻게 해야 하나요?를 참고하세요.
  • 하위 디렉터리 내에서 데이터를 복사하는 경우, rdsadmin 패키지를 사용할 때 하위 디렉터리의 이름을 명시적으로 지정하세요. S3_INTEGRATION 옵션을 사용해 하위 디렉토리를 복사할 수 없습니다.

해결 방법

DB 인스턴스에 S3 버킷 액세스 권한이 있는지 확인하세요.

S3에서 업로드하고 다운로드할 수 있는 최소 권한이 DB 인스턴스의 AWS Identity and Access Management(AWS IAM) 역할에 있는지 확인하세요.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 확인하려는 DB 인스턴스를 선택합니다.
  4. 연결 및 보안 탭을 선택합니다.
  5. 아래로 내려가 IAM 역할 관리 섹션에 다음 권한이 있는 활성 IAM 역할이 있는지 확인합니다.
    S3:ListBucket
    S3:PutObject
    S3:GetObject

또는 AWS Command Line Interface(AWS CLI) 명령 describe-db-instances를 사용해 DB 인스턴스에 다음과 같은 최소 권한을 가진 IAM 역할이 있는지 확인할 수 있습니다.

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'

**참고:**AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

IAM 역할이 있는지 확인한 후에는 조사 결과에 따라 다음의 하나를 실행하세요.

버킷 권한에 문제가 지속되는 경우 S3 버킷에 전체 액세스 권한을 부여하도록 IAM 역할을 수정하세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/*",
        "arn:aws:s3:::example-bucket"
      ]
    }
  ]
}

중요: 이렇게 하면 문제가 IAM 권한으로 인한 것인지 테스트하기 위해 전체 액세스 권한을 부여하도록 IAM 역할을 수정할 수 있습니다. 문제 해결 후 필요에 따라 사용자 지정 권한을 조정하세요.

S3의 특정 폴더에 파일을 업로드하려면 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 절차에서 p_s3_prefix 파라미터를 사용하세요. 파일을 업로드하기 전에 필요한 권한이 있는지 확인하세요.

예를 들어 파일을 S3 버킷 example-bucket에 있는 example-folder 폴더에 업로드하려면 다음 IAM 정책을 연결합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/example-folder/*"
      ]
    }
  ]
}

DB 인스턴스가 S3_INTEGRATION 옵션을 포함하는 그룹 옵션과 연결되어 있는지 확인하세요.

RDS DB 인스턴스에 옵션 그룹이 연결되어 있는지 확인합니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 확인하려는 DB 인스턴스를 선택합니다.
  4. 구성 탭을 선택합니다.
  5. 옵션 그룹 파라미터를 기록해 둡니다.

이 옵션 그룹이 in-sync 상태가 아닌데 S3_INTEGRATION 옵션을 추가하는 경우에는 옵션이 성공적으로 추가되지 않습니다. 따라서 옵션 그룹이 in-sync 상태인지 확인하세요.

이 옵션 그룹이 in-sync 상태인지 확인하려면 다음 AWS CLI 명령을 실행합니다.

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

옵션 그룹이 in-sync 상태가 아닌 경우 데이터베이스에서 로그 및 이벤트 탭을 선택하고 화면을 아래로 이동해 최근 이벤트 섹션으로 이동합니다. 옵션 그룹이 in-sync 상태가 되는 데 방해가 되는 구성 요소를 찾아내고 데이터베이스에서 해당 구성 요소를 제거합니다.

옵션 그룹이 in-sync 상태인 경우, S3_INTEGRATION 옵션이 옵션 그룹 내에 포함되어 있는지 확인하세요. 자세한 내용은 옵션 그룹의 옵션과 옵션 설정 목록을 참고하세요. S3_INTEGRATION 옵션이 옵션 그룹에 포함되지 않은 경우 옵션을 추가하세요. 자세한 내용은 Amazon S3 통합 옵션 추가를 참고하세요.

참고: S3_INTEGRATION 옵션이 DB 인스턴스에 추가되지 않으면 ORA-00904: “RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3”: 잘못된 식별자” 오류가 발생합니다. 이 오류는 업로드 및 다운로드에 필요한 절차가 DB 인스턴스에 생성되지 않았음을 나타냅니다.

Amazon RDS에 S3_INTEGRATION을 추가해도 다운타임이 발생하지 않습니다. 즉시 적용 옵션을 사용하려면 보류 중인 유지 관리 작업이 없도록 하세요. 보류 중인 작업이 있으면 해당 작업이 Amazon S3 통합을 통해 적용됩니다. 자세한 내용은 DB 인스턴스 유지 관리를 참고하세요.

사용자가 생성한 Oracle 디렉토리 개채나 DATA_PUMP_DIR 디렉토리에서만 파일을 업로드/다운로드해야 합니다.

데이터베이스 인스턴스에서는 S3 파일에 직접 액세스할 수 없습니다. 이 파일에 액세스하려면 파일을 RDS 호스트 디렉터리에 복사해서 액세스해야 합니다. DB 인스턴스에서 S3 버킷으로 파일을 업로드하거나 다운로드하려면 다음 단계를 완료하세요.

  1. Amazon RDS의 내보내기 파일을 S3로 복사하려면 먼저 덤프 파일을 생성합니다. 이 작업을 실행하려면 expdp 명령을 사용하거나, DATA_DUMP_DIR이나 사용자 지정 디렉터리에 있는 dbms_datapump API를 사용하세요. 그런 다음 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 절차를 사용해 파일을 S3에 업로드합니다. 이 절차의 파라미터 및 파일 업로드와 관련한 예제 쿼리를 자세히 보려면 Oracle DB 인스턴스에서 Amazon S3 버킷으로 파일 업로드를 참고하세요
  2. rdsadmin. rdsadmin_s3_tasks.download_from_s3 절차를 사용해 S3 버킷에서 DATA_PUMP_DIR 폴더나 사용자가 만든 디렉터리로 파일을 다운로드합니다. 이 절차의 파라미터 및 파일 다운로드와 관련한 예제 쿼리를 자세히 보려면 Amazon S3 버킷에서 Oracle DB 인스턴스로 파일 다운로드를 참고하세요

파일 전송 상태를 모니터링하려면 rdsadmin 패키지를 업로드하거나 다운로드 중에 생성되는 로그를 확인하세요.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 로그를 보려는 DB 인스턴스를 선택합니다.
  4. 로그 및 이벤트 탭을 선택합니다.
  5. 로그 섹션에서 절차에서 반환된 작업 ID를 검색 필터에 입력합니다.
  6. 반환된 파일을 선택합니다.
  7. 로그를 보려면 보기를 선택합니다.
    -또는-
    다운로드를 선택하고 로그를 다운로드합니다.

다음 명령을 실행하여 업로드 또는 다운로드 절차 중에 생성된 로그 파일을 읽을 수도 있습니다.

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

참고:****task-id를 절차 중에 반환된 태스크 ID로 교체합니다.

관련 정보

Amazon S3 통합

Amazon RDS for Oracle DB 인스턴스가 예상보다 많은 스토리지를 사용하는 이유는 무엇인가요?