Amazon Elasticsearch Service로 마이그레이션 - Amazon Elasticsearch Service

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

Amazon Elasticsearch Service로 마이그레이션

인덱스 스냅샷은 자체 관리형 Elasticsearch 클러스터에서 Amazon Elasticsearch Service로 마이그레이션하는 데 널리 사용되는 방법입니다. 대체로 프로세스는 다음 단계로 구성됩니다.

  1. 기존 클러스터의 스냅샷을 만들고 스냅샷을 Amazon S3 버킷에 업로드합니다.

  2. Amazon ES 도메인을 생성합니다.

  3. 버킷에 액세스할 수 있는 Amazon ES 권한을 부여하고 사용자 계정에 스냅샷 작업 권한을 부여합니다.

  4. Amazon ES 도메인에서 스냅샷을 복원합니다.

이 연습에서는 자세한 단계와 대체 옵션(해당되는 경우)을 다룹니다.

스냅샷 생성 및 업로드

repository-s3 플러그인을 사용하여 스냅샷을 S3에 직접 만들 수 있지만, 모든 노드에 플러그인을 설치하고 elasticsearch.yml을 수정하고 각 노드를 다시 시작하고 AWS 자격 증명을 추가한 다음 마지막으로 스냅샷을 작성해야 합니다. 플러그인은 지속적으로 사용하거나 더 큰 클러스터를 마이그레이션하기 위한 좋은 옵션입니다.

소규모 클러스터에서 일회성 접근 방식은 공유 파일 시스템 스냅샷을 만든 다음 AWS CLI를 사용하여 S3에 업로드하는 것입니다. 이미 스냅샷이 있는 경우 4단계로 건너뜁니다.

스냅샷을 생성하여 Amazon S3에 업로드

  1. 모든 노드에서 elasticsearch.ymlpath.repo 설정을 추가한 다음 각 노드를 다시 시작합니다.

    path.repo: ["/my/shared/directory/snapshots"]
  2. 스냅샷 리포지토리 등록:

    PUT _snapshot/migration-repository { "type": "fs", "settings": { "location": "/my/shared/directory/snapshots" } }
  3. 스냅샷 생성:

    PUT _snapshot/migration-repository/migration-snapshot { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }
  4. AWS CLI를 설치하고 aws configure를 실행하여 자격 증명을 추가합니다.

  5. 스냅샷 디렉터리로 이동합니다. 다음 명령을 실행하여 새 S3 버킷을 생성하고 스냅샷 디렉터리의 콘텐츠를 해당 버킷에 업로드합니다.

    aws s3 mb s3://migration-bucket --region us-west-2 aws s3 sync . s3://migration-bucket --sse AES256

    스냅샷의 크기와 인터넷 연결 속도에 따라 이 작업을 실행할 때 시간이 걸릴 수 있습니다.

도메인 만들기

콘솔은 도메인을 만드는 가장 쉬운 방법이지만, 이미 터미널이 열려 있고 AWS CLI가 설치되어 있습니다. 다음 명령을 수정하여 필요에 맞게 도메인을 만듭니다.

aws es create-elasticsearch-domain \ --domain-name migration-domain \ --elasticsearch-version 7.7 \ --elasticsearch-cluster-config InstanceType=c5.large.elasticsearch,InstanceCount=2 \ --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \ --node-to-node-encryption-options Enabled=true \ --encryption-at-rest-options Enabled=true \ --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-user-password}' \ --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["*"]},"Action":["es:ESHttp*"],"Resource":"arn:aws:es:us-west-2:123456789012:domain/migration-domain/*"}]}' \ --region us-west-2

마찬가지로 이 명령은 각각 100GiB의 스토리지가 있는 두 개의 데이터 노드를 갖춘 인터넷 액세스 가능 도메인을 만듭니다. 또한 HTTP 기본 인증 및 모든 암호화 설정으로 세분화된 액세스 제어가 가능합니다. VPC와 같은 고급 보안 구성이 필요한 경우, Amazon ES 콘솔을 사용합니다.

명령을 실행하기 전에 도메인 이름, 마스터 사용자 자격 증명 및 계정 번호를 변경합니다. S3 버킷에 사용한 것과 동일한 리전 및 Elasticsearch 스냅샷과 호환되는 버전을 지정합니다.

중요

스냅샷은 하나의 주 버전에서만 호환됩니다. 예를 들어, 2에서 스냅샷을 복구할 수 없습니다.x 클러스터를 1에 설치합니다.x 클러스터 또는 6.x 클러스터, 2.x 또는 5.x 클러스터. 마이너 버전도 중요합니다. 5.3.2 Amazon ES 도메인의 자체 관리형 5.3.3 클러스터에서는 스냅샷을 복원할 수 없습니다. 스냅샷에서 지원하는 Elasticsearch의 최신 버전을 선택하는 것이 좋습니다.

사용 권한 제공

AWS Identity and Access Management(IAM) 콘솔에 다음과 같은 권한 및 신뢰 관계를 가진 역할을 만듭니다. 쉽게 찾을 수 있도록 AmazonESSnapshotRole 역할 이름을 지정합니다.

Permissions

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

신뢰 관계

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

그런 다음 개인 IAM 사용자 또는 역할을—무엇을 구성하든 AWS CLI 이전—사용 권한 AmazonESSnapshotRole. 다음 정책 및 첨부 귀하의 신원을 확인할 수 있습니다.

Permissions

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/AmazonESSnapshotRole" } ] }

그런 다음 Amazon ES 도메인을 만들 때 지정한 마스터 사용자 자격 증명을 사용하여 Kibana에 로그인합니다. Amazon ES 콘솔에서 Kibana URL을 찾을 수 있습니다. https://domain-endpoint/_plugin/kibana/ 형식을 사용합니다.

Kibana에서 Security(보안), Role Mappings(역할 매핑)Add(추가)를 선택합니다. Role(역할)에서 manage_snapshots을 선택합니다. 그런 다음 해당 필드에 개인 IAM 사용자 또는 역할에 대한 ARN을 지정합니다. 사용자 ARN은 Users(사용자) 섹션으로 이동합니다. 역할 ARN은 Backend roles(백엔드 역할) 섹션으로 이동합니다. 이 단계에서는 세분화된 액세스 제어를 사용하여 스냅샷으로 작업할 수 있는 권한을 자격 증명에 부여합니다.

스냅샷 복원

이 시점에서 귀하는 Amazon ES 도메인: IAM 자격 증명을 사용하여 마스터 사용자 자격 증명 또는 AWS 인증을 사용하는 HTTP 기본 인증. 스냅샷에서는 마스터 사용자에 대한 개념이 없는 Amazon S3를 사용하므로, IAM 자격 증명을 사용하여 Amazon ES 도메인에 스냅샷 리포지토리를 등록해야 합니다.

대부분의 프로그래밍 언어에는 서명 요청에 도움이 되는 라이브러리가 있지만, 더 간단한 방법은 Postman과 같은 도구를 사용하여 IAM 자격 증명을 Authorization(권한 부여) 섹션에 넣는 것입니다.

스냅샷을 복원하려면

  1. 요청에 서명하는 방법에 관계없이 첫 번째 단계는 리포지토리를 등록하는 것입니다.

    PUT _snapshot/migration-repository { "type": "s3", "settings": { "bucket": "migration-bucket", "region": "us-west-2", "role_arn": "arn:aws:iam::123456789012:role/AmazonESSnapshotRole" } }
  2. 그런 다음 리포지토리에 있는 스냅샷을 나열하고 복원할 스냅샷을 찾습니다. 이 시점에서 Postman을 계속 사용하거나 curl과 같은 도구로 전환할 수 있습니다.

    간편

    GET _snapshot/migration-repository/_all

    curl

    curl -XGET -u master-user:master-user-password https://domain-endpoint/_snapshot/migration-repository/_all
  3. 스냅샷을 복원합니다.

    간편

    POST _snapshot/migration-repository/migration-snapshot/_restore { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }

    curl

    curl -XPOST -u master-user:master-user-password https://domain-endpoint/_snapshot/migration-repository/migration-snapshot/_restore \ -H 'Content-Type: application/json' \ -d '{"indices":"migration-index1,migration-index2,other-indices-*","include_global_state":false}'
  4. 마지막으로 인덱스가 예상대로 복원되었는지 확인합니다.

    간편

    GET _cat/indices?v

    curl

    curl -XGET -u master-user:master-user-password https://domain-endpoint/_cat/indices?v

이 시점에서 마이그레이션이 완료됩니다. 새 Amazon ES 엔드포인트를 사용하도록 클라이언트를 구성하거나, 워크로드에 맞게 도메인 크기를 조정하거나, 인덱스의 샤드 수를 확인하거나, IAM 마스터 사용자로 전환하거나, Kibana 대시보드 빌드를 시작할 수 있습니다.