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

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

Amazon Elasticsearch Service 로 마이그레이션

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

  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.9 \ --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 의 최신 버전을 선택하는 것이 좋습니다.

S3 버킷에 권한 제공

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

권한

{ "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" } ] }

그런 다음 AWS CLI 를 구성하는 데 사용한 개인 IAM 사용자 또는 역할에AmazonESSnapshotRole를 선택합니다. 다음 정책을 만들고첨부를 사용자의 신원에 추가합니다.

권한

{ "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 메인 메뉴에서보안,Roles, 및관리 스냅샷를 선택합니다. 선택매핑된 사용자,매핑 관리를 선택합니다. 그런 다음 해당 필드에 개인 IAM 사용자 또는 역할에 대한 ARN을 지정합니다. 사용자 ARN은 Users(사용자) 섹션으로 이동합니다. 역할 ARN은 Backend roles(백엔드 역할) 섹션으로 이동합니다. 이 단계에서는 세분화된 액세스 제어를 사용하여 스냅샷으로 작업할 수 있는 권한을 자격 증명에 부여합니다.

스냅샷을 복원합니다.

이때 Amazon ES 도메인에 액세스하는 두 가지 방법이 있습니다. 마스터 사용자 자격 증명을 사용한 HTTP 기본 인증 또는 IAM 자격 증명을 사용한 AWS 인증입니다. 스냅샷에서는 마스터 사용자에 대한 개념이 없는 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 대시보드를 빌드할 수 있습니다.