BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GitLabがECRイメージの移行とプル遅延を自動化した方法

GitLabがECRイメージの移行とプル遅延を自動化した方法

原文リンク(2025-03-12)

GitLabは最近、Amazon Elastic Container Registry(ECR)からGitLabのContainer Registryへのコンテナイメージの移行を自動化するソリューションについて議論した。チームは、Amazon ECRからGitLabのContainer Registryへのコンテナイメージの発見、再タグ付け、転送のプロセスを自動化するCI/CDパイプラインを作成した。

GitLabのプリンシパルプロダクトマネージャーであるTim Rizzi氏は、ブログ投稿でこの機能を要約している。このパイプラインは、エンジニアが手動で介入することなく設定し、プロセスを実行できるようにすることで、移行タスクを簡単にする。Rizzi氏は、プラットフォームエンジニアが直面している課題の背景を説明した。GitLabを使って DevSecOpsツールチェーンを近代化する際、プラットフォームエンジニアは、複数のリポジトリとタグにまたがる何百ものコンテナイメージを手動で繰り返し転送することに関する問題を報告した。

新しく作成された CI/CD パイプラインは、読み取り専用の Identity and Access Management (IAM) ポリシーを通じて AWS ECR へのセキュアなアクセスを確立することから始まり、セキュリティ標準を順守しながらイメージのメタデータを取得し、コンテナレイヤーをダウンロードするために必要な権限を提供する。

アクセスが設定されたら、次のステップはGitLab CI/CD変数の設定だ。これには、AWSの資格情報(アカウントID、リージョン、アクセスキー、シークレットキー)と、自動マイグレーションを可能にするために "true"に設定したBULK_MIGRATEフラグが含まれる。これらの設定により、パイプラインはDocker-in-Dockerサービスを使用してイメージ操作を確実に実行する。

パイプラインは、シームレスな移行プロセスを確実にするために、それぞれが前のフェーズに基づいて構築された、相互に関連した3つのフェーズで動作する。ディスカバリーでは、リポジトリ名のリストを取得することで、ECR内のすべてのリポジトリをスキャンして特定する。リポジトリが特定されると、Tag Enumeration(タグ列挙)が各リポジトリを調査し、関連するすべての画像タグをリストアップする。

REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}docker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}

最後に、Transferは各画像を ECRから取得し、タグをGitLabのレジストリに合わせて更新し、新しい保存先にアップロードする。このパイプラインはさらに、エラー処理の仕組みと包括的なロギングを組み込んでおり、チームが進捗を追跡し、実行中に発生した問題をトラブルシュートできるようになっている。

私たちはRedditでこの議論に出くわした。そこでは、技術コミュニティがコンテナイメージの処理における手動または低速のプロセスの非効率性に関連する課題について議論していた。また、Kubernetes subredditへのクロスポストもあり、そこでユーザーは自分の考えを共有するよう招待されていた。

しかし、上記のRedditのスレッドでは、事前に作成されたAMIや、Spegelのような代替ツールなど、遅延を軽減するための戦略に焦点が当てられていたのに対し、GitLabのソリューションでは、イメージ移行のための自動化されたパイプラインと手作業の削減が提案されている。

この自動化されたアプローチの利点については、移行中に手動でスクリプトを作成したり監視したりする必要がなく、ECRとGitLab間でイメージの命名に一貫性が保たれる。さらに、この自動化ソリューションは、進捗状況の監視や失敗した移行のトラブルシューティングのための明確なログを提供する。

このソリューションを始めるには、ユーザーは提供された.gitlab-ci.ymlファイルをリポジトリにコピーし、GitLab CI/CD設定で必要な変数を設定する必要がある。

Rizzi氏はブログ投稿の中で、マイグレーションを成功させるための実践的なアドバイスも提供している。チームのワークフローへの影響を最小限に抑えるためにパイプラインをオフピーク時に実行すること、潜在的な問題がないかログを注意深く監視すること、ECRを廃止する前に全てのイメージを検証すること、ネットワークの混雑を避けるために非常に大規模な移行にはレート制限を導入することが挙げられている。

作者について

関連するコンテンツ

BT