AWS入門:AWSコマンドを利用してECRにイメージを登録する方法

スポンサーリンク
AWS入門:AWSコマンドを利用してECRにイメージを登録する方法 ノウハウ
AWS入門:AWSコマンドを利用してECRにイメージを登録する方法
この記事は約10分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Terrafromを利用して構築したECRにイメージをプッシュする方法についてご紹介します。

スポンサーリンク

前提

Terraformを利用したECRの構築方法は下記の記事にあります。

背景

ECS環境を構築するにあたり、ECRの作成が必要だったので、前回の記事ではECR環境の構築をご紹介しました。本記事では、その環境にイメージをプッシュする方法をご紹介します。

作業ディレクトリの作成

下記のコマンドで作業ディレクトリを作成します。

mkdir push_image
cd push_image

使用するコマンドのバージョン指定

下記のコマンドを実行します。

asdf local awscli 2.13.7

もし、指定のバージョンがインストールされていなければ、下記の手順でインストールできます。

# awscli
asdf install awscli 2.13.7

詳しくは下記のサイトをご覧ください。

下記のコマンドで指定のバージョンが利用できることを確認します。

% aws --version   
aws-cli/2.13.7 Python/3.11.4 Darwin/22.5.0 exe/x86_64 prompt/off

イメージ作成

本記事では、nginxのイメージを作成します。

まず、下記の内容でDockerfileを新規作成します。

FROM nginx:1.24-alpine

下記のコマンドを実行します。

docker build --platform linux/amd64 -t learn_ecs_nginx:latest .

下記のコマンドを実行して、イメージが作成されていることを確認します。

% docker images learn_ecs_nginx
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
learn_ecs_nginx   latest    9b1e1f0d8b2a   13 hours ago   40.6MB

このイメージを使用して、ローカルで起動確認をします。

下記のコマンドを実行します。

docker run --rm --name learn_ecs_nginx -p 80:80 -d -it learn_ecs_nginx

下記のコマンドを実行し、同じような出力になっていれば成功です。

% curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

下記のコマンドを実行して、起動したイメージを停止します。

docker stop learn_ecs_nginx 

ECRにイメージを登録する

ECRの作成

下記の記事を参考にECRを作成します。

AWSコマンドの準備

下記の記事を参考にAWS CLIの準備をします。

イメージのタグ付け

下記のコマンドを実行します。プロファイルにterraformを使用していますが、ご自身の環境に合わせて読み替えてください。

#  アカウントIDの取得
AID=$(aws --profile terraform sts get-caller-identity --query Account --output text)

# ECRへログイン
aws ecr get-login-password --region ap-northeast-1 --profile terraform | docker login --username AWS --password-stdin $AID.dkr.ecr.ap-northeast-1.amazonaws.com

下記のコマンドを実行します。

 aws ecr describe-repositories --output json --profile terraform | jq -r '.repositories[].repositoryName'

意図したリポジトリ名が表示されていることを確認します。

% aws ecr describe-repositories --output json --profile terraform | jq -r '.repositories[].repositoryName'
learn_aws_ecr

下記のコマンドを実行します。

docker tag learn_ecs_nginx:latest $AID.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr:0.0.1

イメージの登録

下記のコマンドを実行します。このコマンドで、ECRにイメージが登録されます。

docker push $AID.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr:0.0.1

下記のコマンドを実行して、イメージが登録されていることを確認します。

% aws ecr list-images --repository-name learn_aws_ecr --output json --profile terraform --query "imageIds[].imageTag" 
[
    "0.0.1",
    "latest"
]

これで、RCRへのイメージ登録は完了になります。このイメージを使用して、ECS環境を構築したいと思います。その内容は次回以降の記事になります。

解説

この記事で使用したコマンドは、Amazon Web Services(AWS)を使用して、DockerコンテナをAmazon Elastic Container Registry(ECR)にアップロードするための一連のステップを表しています。以下、各コマンドの説明です。

  1. AID=$(aws --profile terraform sts get-caller-identity --query Account --output text)
    • AWSのSecurity Token Service(STS)を使用して、アクセスしているAWSアカウントのID(Account ID)を取得しています。
    • --profile terraform は、AWS CLIが使用するプロファイルを指定しており、設定された認証情報を使用してコマンドを実行します。
  2. aws ecr get-login-password --region ap-northeast-1 --profile terraform | docker login --username AWS --password-stdin $AID.dkr.ecr.ap-northeast-1.amazonaws.com
    • ECRリポジトリにDockerイメージをアップロードするために、DockerクライアントをECRにログインさせます。
    • get-login-password コマンドは、DockerクライアントがECRにログインするためのトークン(パスワード)を取得します。このトークンは docker login コマンドに渡されます。
    • --region ap-northeast-1 は、リージョンを指定しています。
    • --username AWS は、ログインするユーザー名として “AWS” を指定しています。
    • --password-stdin は、パスワードを標準入力から渡すことを示しています。
    • $AID.dkr.ecr.ap-northeast-1.amazonaws.com は、ECRリポジトリのURIを指定しています。
  3. aws ecr describe-repositories --output json --profile terraform | jq -r '.repositories[].repositoryName'
    • AWS CLIを使用して、ECR内のすべてのリポジトリの情報を取得します。
    • jq コマンドを使用して、取得したJSONデータから各リポジトリの名前を抽出して表示します。
  4. docker tag learn_ecs_nginx:latest $AID.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr:0.0.1
    • ローカルの Docker イメージをタグ付けして、ECRリポジトリにアップロードする準備をします。
    • learn_ecs_nginx:latest は、ローカルのDockerイメージの名前とタグです。
    • $AID.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr:0.0.1 は、ECRリポジトリにアップロードするためのタグ付けされた名前とタグです。
  5. docker push $AID.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr:0.0.1
    • タグ付けされたDockerイメージをECRリポジトリにアップロードします。
  6. aws ecr list-images --repository-name learn_aws_ecr --output json --profile terraform --query "imageIds[].imageTag"
    • 特定のECRリポジトリ内のイメージのタグ一覧を表示します。
    • --repository-name learn_aws_ecr は、操作するリポジトリの名前を指定します。
    • --query "imageIds[].imageTag" は、取得するデータのクエリを指定しています。

おわりに

今日は、Terrafromを利用して構築したECR環境にイメージをプッシュする方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました