InfoGrab Docs

튜토리얼: Amazon ECR에서 GitLab으로 컨테이너 이미지 마이그레이션

요약

레지스트리 간에 컨테이너 이미지를 수동으로 마이그레이션하는 것은 시간이 많이 걸립니다. ECR에서 컨테이너 이미지를 마이그레이션하려면: 모든 것을 합치면 .gitlab-ci.yml은 이 튜토리얼 끝에 제공된 샘플 구성과 비슷해야 합니다.

레지스트리 간에 컨테이너 이미지를 수동으로 마이그레이션하는 것은 시간이 많이 걸립니다. 이 튜토리얼에서는 Amazon Elastic Container Registry (ECR)에서 GitLab 컨테이너 레지스트리로 컨테이너 이미지를 대량 마이그레이션하는 작업을 자동화하는 CI/CD 파이프라인을 설정하는 방법을 설명합니다.

ECR에서 컨테이너 이미지를 마이그레이션하려면:

  1. AWS 권한 구성
  2. UI에서 AWS 자격 증명을 변수로 추가
  3. 마이그레이션 파이프라인 생성
  4. 마이그레이션 실행 및 검증

모든 것을 합치면 .gitlab-ci.yml은 이 튜토리얼 끝에 제공된 샘플 구성과 비슷해야 합니다.

시작하기 전에#

다음이 필요합니다:

  • GitLab 프로젝트에서 Maintainer 또는 Owner 역할
  • IAM 사용자를 생성할 권한이 있는 AWS 계정 액세스
  • AWS 계정 ID
  • ECR 저장소가 위치한 AWS 리전
  • GitLab 컨테이너 레지스트리의 충분한 스토리지 공간

AWS 권한 구성#

AWS IAM에서 ECR에 대한 읽기 전용 액세스를 가진 새 정책과 사용자를 생성합니다:

  1. AWS Management Console에서 IAM으로 이동합니다.

  2. 새 정책을 생성합니다:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:DescribeRepositories",
                    "ecr:ListImages",
                    "ecr:DescribeImages",
                    "ecr:BatchGetImage"
                ],
                "Resource": "*"
            }
        ]
    }
    
  3. 새 IAM 사용자를 생성하고 정책을 연결합니다.

  4. IAM 사용자의 액세스 키를 생성하고 저장합니다.

UI에서 AWS 자격 증명을 변수로 추가#

GitLab 프로젝트에 필요한 AWS 자격 증명을 변수로 구성합니다:

  1. 왼쪽 사이드바에서 설정 > CI/CD를 선택합니다.
  2. 변수를 확장합니다.
  3. 변수 추가를 선택하고 다음을 추가합니다:
    • AWS_ACCOUNT_ID: AWS 계정 번호.
    • AWS_DEFAULT_REGION: ECR 리전. 예: us-east-1.
    • AWS_ACCESS_KEY_ID: IAM 사용자의 액세스 키 ID.
      • 변수 마스킹을 선택합니다.
    • AWS_SECRET_ACCESS_KEY: IAM 사용자의 시크릿 액세스 키.
      • 변수 마스킹을 선택합니다.

마이그레이션 파이프라인 생성#

다음 구성으로 저장소에 새 .gitlab-ci.yml 파일을 생성합니다:

이미지 및 서비스 설정#

컨테이너 작업을 처리하기 위해 Docker-in-Docker를 사용합니다:

image: docker:20.10
services:
  - docker:20.10-dind

파이프라인 변수 정의#

파이프라인에 필요한 변수를 설정합니다:

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  BULK_MIGRATE: "true"

마이그레이션 작업 구성#

전송을 처리하는 마이그레이션 작업을 생성합니다:

migration:
  stage: deploy
  script:
    # Install required tools
    - apk add --no-cache aws-cli jq

    # Verify AWS credentials
    - aws sts get-caller-identity

    # Log in to registries
    - aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}

    # Get list of ECR repositories
    - REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)

    # Process each repository
    - |
      for repo in $REPOS; do
        echo "Processing repository: $repo"

        # Get all tags for this repository
        TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)

        # Process each tag
        for tag in $TAGS; do
          echo "Processing tag: $tag"

          # Pull image from ECR
          docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}

          # Tag for GitLab registry
          docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}

          # Push to GitLab
          docker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}
        done
      done

마이그레이션 실행 및 검증#

파이프라인을 설정한 후:

  1. .gitlab-ci.yml 파일을 저장소에 커밋하고 푸시합니다.
  2. CI/CD > 파이프라인으로 이동하여 마이그레이션 진행 상황을 모니터링합니다.
  3. 완료 후 마이그레이션을 검증합니다:
    • 패키지 및 레지스트리 > 컨테이너 레지스트리로 이동합니다.
    • 모든 저장소와 태그가 있는지 확인합니다.
    • 마이그레이션된 이미지 일부를 가져와 테스트합니다.

.gitlab-ci.yml 구성 예시#

이전 모든 단계를 따르면 .gitlab-ci.yml 파일은 다음과 같아야 합니다:

image: docker:20.10
services:
  - docker:20.10-dind

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  BULK_MIGRATE: "true"

migration:
  stage: deploy
  script:
    # Install required tools
    - apk add --no-cache aws-cli jq

    # Verify AWS credentials
    - aws sts get-caller-identity

    # Log in to registries
    - aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}

    # Get list of ECR repositories
    - REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)

    # Process each repository
    - |
      for repo in $REPOS; do
        echo "Processing repository: $repo"

        # Get all tags for this repository
        TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)

        # Process each tag
        for tag in $TAGS; do
          echo "Processing tag: $tag"

          # Pull image from ECR
          docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}

          # Tag for GitLab registry
          docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}

          # Push to GitLab
          docker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}
        done
      done
  rules:
    - if: $BULK_MIGRATE == "true"

튜토리얼: Amazon ECR에서 GitLab으로 컨테이너 이미지 마이그레이션

원문 보기
요약

레지스트리 간에 컨테이너 이미지를 수동으로 마이그레이션하는 것은 시간이 많이 걸립니다. ECR에서 컨테이너 이미지를 마이그레이션하려면: 모든 것을 합치면 .gitlab-ci.yml은 이 튜토리얼 끝에 제공된 샘플 구성과 비슷해야 합니다.

레지스트리 간에 컨테이너 이미지를 수동으로 마이그레이션하는 것은 시간이 많이 걸립니다. 이 튜토리얼에서는 Amazon Elastic Container Registry (ECR)에서 GitLab 컨테이너 레지스트리로 컨테이너 이미지를 대량 마이그레이션하는 작업을 자동화하는 CI/CD 파이프라인을 설정하는 방법을 설명합니다.

ECR에서 컨테이너 이미지를 마이그레이션하려면:

  1. AWS 권한 구성
  2. UI에서 AWS 자격 증명을 변수로 추가
  3. 마이그레이션 파이프라인 생성
  4. 마이그레이션 실행 및 검증

모든 것을 합치면 .gitlab-ci.yml은 이 튜토리얼 끝에 제공된 샘플 구성과 비슷해야 합니다.

시작하기 전에#

다음이 필요합니다:

  • GitLab 프로젝트에서 Maintainer 또는 Owner 역할
  • IAM 사용자를 생성할 권한이 있는 AWS 계정 액세스
  • AWS 계정 ID
  • ECR 저장소가 위치한 AWS 리전
  • GitLab 컨테이너 레지스트리의 충분한 스토리지 공간

AWS 권한 구성#

AWS IAM에서 ECR에 대한 읽기 전용 액세스를 가진 새 정책과 사용자를 생성합니다:

  1. AWS Management Console에서 IAM으로 이동합니다.

  2. 새 정책을 생성합니다:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:DescribeRepositories",
                    "ecr:ListImages",
                    "ecr:DescribeImages",
                    "ecr:BatchGetImage"
                ],
                "Resource": "*"
            }
        ]
    }
    
  3. 새 IAM 사용자를 생성하고 정책을 연결합니다.

  4. IAM 사용자의 액세스 키를 생성하고 저장합니다.

UI에서 AWS 자격 증명을 변수로 추가#

GitLab 프로젝트에 필요한 AWS 자격 증명을 변수로 구성합니다:

  1. 왼쪽 사이드바에서 설정 > CI/CD를 선택합니다.
  2. 변수를 확장합니다.
  3. 변수 추가를 선택하고 다음을 추가합니다:
    • AWS_ACCOUNT_ID: AWS 계정 번호.
    • AWS_DEFAULT_REGION: ECR 리전. 예: us-east-1.
    • AWS_ACCESS_KEY_ID: IAM 사용자의 액세스 키 ID.
      • 변수 마스킹을 선택합니다.
    • AWS_SECRET_ACCESS_KEY: IAM 사용자의 시크릿 액세스 키.
      • 변수 마스킹을 선택합니다.

마이그레이션 파이프라인 생성#

다음 구성으로 저장소에 새 .gitlab-ci.yml 파일을 생성합니다:

이미지 및 서비스 설정#

컨테이너 작업을 처리하기 위해 Docker-in-Docker를 사용합니다:

image: docker:20.10
services:
  - docker:20.10-dind

파이프라인 변수 정의#

파이프라인에 필요한 변수를 설정합니다:

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  BULK_MIGRATE: "true"

마이그레이션 작업 구성#

전송을 처리하는 마이그레이션 작업을 생성합니다:

migration:
  stage: deploy
  script:
    # Install required tools
    - apk add --no-cache aws-cli jq

    # Verify AWS credentials
    - aws sts get-caller-identity

    # Log in to registries
    - aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}

    # Get list of ECR repositories
    - REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)

    # Process each repository
    - |
      for repo in $REPOS; do
        echo "Processing repository: $repo"

        # Get all tags for this repository
        TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)

        # Process each tag
        for tag in $TAGS; do
          echo "Processing tag: $tag"

          # Pull image from ECR
          docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}

          # Tag for GitLab registry
          docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}

          # Push to GitLab
          docker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}
        done
      done

마이그레이션 실행 및 검증#

파이프라인을 설정한 후:

  1. .gitlab-ci.yml 파일을 저장소에 커밋하고 푸시합니다.
  2. CI/CD > 파이프라인으로 이동하여 마이그레이션 진행 상황을 모니터링합니다.
  3. 완료 후 마이그레이션을 검증합니다:
    • 패키지 및 레지스트리 > 컨테이너 레지스트리로 이동합니다.
    • 모든 저장소와 태그가 있는지 확인합니다.
    • 마이그레이션된 이미지 일부를 가져와 테스트합니다.

.gitlab-ci.yml 구성 예시#

이전 모든 단계를 따르면 .gitlab-ci.yml 파일은 다음과 같아야 합니다:

image: docker:20.10
services:
  - docker:20.10-dind

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  BULK_MIGRATE: "true"

migration:
  stage: deploy
  script:
    # Install required tools
    - apk add --no-cache aws-cli jq

    # Verify AWS credentials
    - aws sts get-caller-identity

    # Log in to registries
    - aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}

    # Get list of ECR repositories
    - REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)

    # Process each repository
    - |
      for repo in $REPOS; do
        echo "Processing repository: $repo"

        # Get all tags for this repository
        TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)

        # Process each tag
        for tag in $TAGS; do
          echo "Processing tag: $tag"

          # Pull image from ECR
          docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}

          # Tag for GitLab registry
          docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}

          # Push to GitLab
          docker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}
        done
      done
  rules:
    - if: $BULK_MIGRATE == "true"