見出し画像

ECS&ECR

現在業務でECSを利用したマイクロサービスアーキテクチャで構築されたシステム開発を行っているため、忘れないようにメモしておきたいと思います。。。


ECSとは

ECSはAWSが提供するDockerコンテナ環境

Cluster(EC2)上で動くTask(コンテナ)があります

Cluster上で複数のTaskを起動するようなことも可能です

Cluster上でどのようにTaskを起動させるかを記述したルールをTask Definitionといいます

同じTaskを複数用意してCluster上で起動したいという場合にServiceを利用できます

セキュリティ面としてはTaskごとにIAMロールを付与することが可能です


ECRとは

Dockerイメージを管理するリポジトリで、Dockerhub・Githubのようにイメージを管理することができます


まずはECRから・準備

AWS CLI : 公式見ながら準備します

k@MacBook-Pro demo % aws --version
aws-cli/2.1.13 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off


Docker : 公式見ながら準備します

k@MacBook-Pro demo % docker --version
Docker version 20.10.0, build 7287ab3


準備するファイル類は以下のものを用意します

k@MacBook-Pro demo % tree
.
├── Dockerfile
└── src
   └── index.html


Dockerfileの中身

nginxイメージをDockerhubから引っ張ってきてドキュメントルートにHello WorldするHTMLを置く内容となっています

k@MacBook-Pro demo % cat Dockerfile
FROM nginx:alpine

COPY ./src/index.html /usr/share/nginx/html

index.htmlの中身

k@MacBook-Pro demo % cat src/index.html
<h1>Hello World!!!</h1>

準備するものは以上となります


ECRへDockerイメージのPush

AWSマネージメントコンソールにログインして以下のように進めていきます

トップからECR(Elastic Container Service)を検索して以下の画面を開きます

Amazon ECR -> リポジトリ(赤枠部分)があるのでそれを選択します

画像1


選択すると下記のような画面に遷移しますが、まだリポジトリを作成していないので何も表示されません

リポジトリの作成(赤枠部分)を選択して次に進みます

画像2


リポジトリ名を赤枠の部分に入力します

今回はesc-demoとしておきます

画像3


リポジトリの作成を選択し、次に進みます

画像4


無事ecs-demoリポジトリが作成されました

このリポジトリに準備で用意したDockerfileから生成されるイメージをプッシュしていきます

赤枠のプッシュコマンドの表示を選択し、次に進みます

画像5


下記のような画面が表示されるので、赤枠の部分を全て実行します

画像6


まずはAWS CLIでECRを操作するためにログインします

k@MacBook-Pro demo % aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 898168548179.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded


次にDockerイメージのビルドを行います

k@MacBook-Pro demo % docker build -t ecs-demo .
Sending build context to Docker daemon  3.584kB
Step 1/2 : FROM nginx:alpine
alpine: Pulling from library/nginx
801bfaa63ef2: Pull complete
b1242e25d284: Pull complete
7453d3e6b909: Pull complete
07ce7418c4f8: Pull complete
e295e0624aa3: Pull complete
Digest: sha256:c2ce58e024275728b00a554ac25628af25c54782865b3487b11c21cafb7fabda
Status: Downloaded newer image for nginx:alpine
---> 629df02b47c8
Step 2/2 : COPY ./src/index.html /usr/share/nginx/html
---> 23b777908a88
Successfully built 23b777908a88
Successfully tagged ecs-demo:latest

成功したのでついでにローカルで動作確認をしておきます

k@MacBook-Pro demo % docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ecs-demo     latest    23b777908a88   6 minutes ago   22.3MB
nginx        alpine    629df02b47c8   2 days ago      22.3MB
k@MacBook-Pro demo % docker run -it -d -p 8080:80 ecs-demo
2067208ab5f46647083472e9e08d77d4400b1d5a4323f0ab4fe09f9f7b51d678
k@MacBook-Pro demo % docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                  NAMES
2067208ab5f4   ecs-demo   "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->80/tcp   angry_bartik

アクセスしてみます

画像7

良さそうですね


先ほどのイメージにタグ付けするコマンドを実行します

k@MacBook-Pro demo % docker tag ecs-demo:latest 898168548179.dkr.ecr.ap-northeast-1.amazonaws.com/ecs-demo:latest


最後にイメージをECRにプッシュします

k@MacBook-Pro demo % docker push 898168548179.dkr.ecr.ap-northeast-1.amazonaws.com/ecs-demo:latest
The push refers to repository [898168548179.dkr.ecr.ap-northeast-1.amazonaws.com/ecs-demo]
7027ab5e292b: Pushed
3633e038dbe3: Pushed
e8f8cd3583be: Pushed
0614f8d14b89: Pushed
029c325415ee: Pushed
777b2c648970: Pushed
latest: digest: sha256:8f184924565f91c1a78603a157a63bed1132491d1fd6fe28790a401313cf7d7d size: 1567


ちゃんとプッシュが成功しているかマネージメントコンソールで確認します

画像8

イメージがプッシュされました


ECRの手順は終了

次回はECSでコンテナを起動し、ローカルで行ったようにHello Worldする手順を書いていきたいと思います

いいなと思ったら応援しよう!