#はじめに
ECSクラスターの構築に慣れてきたので、今回はタスク(コンテナ)イメージをECRにプッシュして、そこからイメージを読み込むようにタスク定義を新しく作成してみることにしました。
#ECRとは
AWS上でDockerコンテナイメージを管理するサービスです。
ECSに統合されているため、開発から本稼働までのワークフローを簡略化することができたりします。
#実装
今回はDockerHubから取得したコンテナイメージsimplehttp
をECRにプッシュして、タスク定義を修正(イメージの読込先の修正)した後に新しくサービスをつくってみることにしました。
##リポジトリの作成
マネジメントコンソールとAWS CLIから、それぞれリポジトリを作成してみます。
###マネジメントコンソール
ECS画面の左側にあるリポジトリを押すと以下の画面になります。
"リポジトリを作成"を押すと以下の画面になるので、リポジトリ名を指定します。
###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"
}
}
}
##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
作成したリポジトリを選択して"プッシュコマンドを表示"を選択します。
まず、認証トークンを取得して、レジストリに対して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
成功していればプッシュされたイメージが以下のように表示されます。
ECRにプッシュしたイメージからコンテナを起動させるように、タスク定義を修正します。
タスク定義名をチェックして、"新しいリビジョンの作成"を選択します。
td-simplehttp-ec2-2
というリビジョンが新しく作成されます。
最新リビジョンのタスク定義を指定したサービスを新しく作成して、タスクが実行されるかどうか確かめます。
ELBのDNS名をコピーしてアクセスすると、ページが表示され、タスクが実行されていることを確認できます。
#参考資料