LoginSignup
0
2

More than 1 year has passed since last update.

【AWS】ECS構築の基礎 −ECR編−

Last updated at Posted at 2021-07-06

はじめに

ECSクラスターの構築に慣れてきたので、今回はタスク(コンテナ)イメージをECRにプッシュして、そこからイメージを読み込むようにタスク定義を新しく作成してみることにしました。

ECRとは

AWS上でDockerコンテナイメージを管理するサービスです。
ECSに統合されているため、開発から本稼働までのワークフローを簡略化することができたりします。

実装

今回はDockerHubから取得したコンテナイメージsimplehttpをECRにプッシュして、タスク定義を修正(イメージの読込先の修正)した後に新しくサービスをつくってみることにしました。

リポジトリの作成

マネジメントコンソールとAWS CLIから、それぞれリポジトリを作成してみます。

マネジメントコンソール

ECS画面の左側にあるリポジトリを押すと以下の画面になります。
スクリーンショット 2021-07-06 20.06.37.png

"リポジトリを作成"を押すと以下の画面になるので、リポジトリ名を指定します。
スクリーンショット 2021-07-06 20.08.45.png

以下のようにリポジトリが作成されます。
スクリーンショット 2021-07-06 20.18.40.png

AWS CLI

aws-cliで作成する場合は以下のようなコマンドを打ちます。
--image-scanning-configuration scanOnPush=trueの部分でイメージスキャンの設定を行っています。
イメージスキャンはコンテナイメージ内のソフトウェアの脆弱性を解析するものです。

$ aws ecr create-repository --repository-name ecr-simplehttp --region ap-northeast-1 --image-scanning-configuration scanOnPush=true
{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-northeast-1:338233790232:repository/ecr-simplehttp",
        "registryId": "338233790232",
        "repositoryName": "ecr-simplehttp",
        "repositoryUri": "338233790232.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-simplehttp",
        "createdAt": "2021-07-06T20:12:56+09:00",
        "imageTagMutability": "MUTABLE",
        "imageScanningConfiguration": {
            "scanOnPush": true
        },
        "encryptionConfiguration": {
            "encryptionType": "AES256"
        }
    }
}

このようにリポジトリが作成されます。
スクリーンショット 2021-07-06 20.14.01.png

ECRへのコンテナイメージのプッシュ

DockerHubからECRへプッシュしたいイメージをプルします。

$ docker pull gkoenig/simplehttp
Using default tag: latest
latest: Pulling from gkoenig/simplehttp
12dc4b9ba0e4: Pull complete
Digest: sha256:1f0c62b20a6718a42d5e6f06c6f4df37c0b52d0fc3e64b431889bb5d492b08ee
Status: Downloaded newer image for gkoenig/simplehttp:latest
docker.io/gkoenig/simplehttp:latest

以下のコマンドでプルしたイメージを確認することができます。

$ docker images
REPOSITORY                    TAG              IMAGE ID       CREATED         SIZE
gkoenig/simplehttp            latest           66cd53172aac   14 months ago   7.43MB

作成したリポジトリを選択して"プッシュコマンドを表示"を選択します。
スクリーンショット 2021-07-06 20.35.12.png

これらのコマンドを順に実行します。
スクリーンショット 2021-07-06 20.36.37.png

まず、認証トークンを取得して、レジストリに対してDockerクライアントを認証します。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 338233790232.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

すでにイメージをpullしているので、ステップ2(イメージビルド)はスキップしてイメージへのタグ付けを行います。

$ docker tag gkoenig/simplehttp 338233790232.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-simplehttp:latest

docker imagesを実行すると、タグ付けができていることを確認することができます。

REPOSITORY                    TAG              IMAGE ID       CREATED         SIZE
338233790232.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-simplehttp   latest           66cd53172aac   14 months ago   7.43MB

最後に、リポジトリへイメージをプッシュします。

$ docker push 338233790232.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-simplehttp:latest
The push refers to repository [338233790232.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-simplehttp]
22cfb2031743: Pushed
latest: digest: sha256:1f0c62b20a6718a42d5e6f06c6f4df37c0b52d0fc3e64b431889bb5d492b08ee size: 528

成功していればプッシュされたイメージが以下のように表示されます。
スクリーンショット 2021-07-06 21.04.00.png

ECRにプッシュしたイメージからコンテナを起動させるように、タスク定義を修正します。

タスク定義名をチェックして、"新しいリビジョンの作成"を選択します。
スクリーンショット 2021-07-06 21.08.57.png

イメージにタグ名を記述して更新します。
スクリーンショット 2021-07-06 21.10.30.png

td-simplehttp-ec2-2というリビジョンが新しく作成されます。
スクリーンショット 2021-07-06 21.11.23.png

最新リビジョンのタスク定義を指定したサービスを新しく作成して、タスクが実行されるかどうか確かめます。
スクリーンショット 2021-07-06 21.13.29.png
スクリーンショット 2021-07-06 21.14.23.png
スクリーンショット 2021-07-06 21.15.23.png

ELBのDNS名をコピーしてアクセスすると、ページが表示され、タスクが実行されていることを確認できます。
スクリーンショット 2021-07-06 21.19.57.png

参考資料

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2