0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWSのECSハンズオンやってみた

0
Posted at

以下ハンズオンのリンク
https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-ECS-2022-confirmation_012.html

全体像

image.png

流れ

  1. cloud9でコンテナイメージを作成
  2. ECRのリポジトリを作成
  3. コンテナイメージをECRにアップロード
  4. クラスターを作成
  5. タスク定義を作成
  6. サービスを作成(サービスの中にALBとタスクが含まれる)
  7. 稼働確認

image.png

作業内容

#1. cloud9で作業用の環境を作成

  • amazonlinux2023
  • 設定は特に気にしなくて良い

#2. cloud9でインスタンスのコンソールに入り、Dockerfileを作成

ec2-user:~ $ echo > Dockerfile              
ec2-user:~ $ ll
total 4
-rw-r--r--. 1 ec2-user ec2-user  1 Apr 22 13:52 Dockerfile
drwxr-xr-x. 3 ec2-user ec2-user 34 Apr 22 13:44 environment
drwxr-xr-x. 3 ec2-user ec2-user 17 Apr 17 22:01 go

#3. Dockerfileを開いて中に以下のコンテナイメージを記載

FROM ubuntu:18.04
​
# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2
​
# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html
​
# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh
​
EXPOSE 80
​
CMD /root/run_apache.sh

中身の詳細は以下

  • 作成するコンテナイメージの基となるベースイメージは DockerHub で公開されている Ubuntu 18.04
  • Web サーバーとして Apache HTTP Server をインストール
  • 実際の Web ページに表示するために index.html を作成
  • EXPOSE で、このコンテナは 80 ポート(HTTP) を利用することを宣言

#4. コンテナイメージをビルド

# イメージが他にないか確認
ec2-user:~/environment $ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

# ビルド(-tオプションはタグ)
ec2-user:~/environment $ docker build -t hello-world .

# 数十秒でコンテナイメージの作成が終わる

# コンテナイメージが作成されていることを確認
ec2-user:~/environment $ docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
hello-world   latest    3ecb0bbd7483   About a minute ago   205MB

# 他にコンテナが動作していないことを確認
ec2-user:~/environment $ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# コンテナを起動
ec2-user:~/environment $ docker run -d -p 8080:80 --name h4b-local-run hello-world
e0298b0d68ad7bbc579344590f66f72fbd632728346b2c8b4bb1db4d6eec073e

docker runコマンドの補足

  • -p : Cloud9 の Linux 環境の 8080 ポートを、コンテナ側の 80 番ポートと接続する指定。これによって、Cloud9 の画面上から、動かしているコンテナにアクセスするのが簡単になる
  • -d : バックグラウンド実行
  • --name : 名前の指定

#5. 動作を確認

# コンテナが動作していることを確認
ec2-user:~/environment $ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                                   NAMES
e0298b0d68ad   hello-world   "/bin/sh -c /root/ru…"   4 minutes ago   Up 4 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   h4b-local-run

# ローカルホストの8080にアクセスするとコンテナの80へ行くことを確認
ec2-user:~/environment $ curl localhost:8080
Hello World!

#6. コンテナの中身を確認

# docker execコマンドによりサーバにログインしたかのようにbashが使える
ec2-user:~ $ docker exec -i -t h4b-local-run bash
root@e0298b0d68ad:/# cd /var/www/html
root@e0298b0d68ad:/var/www/html# cat index.html 
Hello World!

#7. ECRにコンテナイメージをアップロード

# ECRでプライベートリポジトリを作成しURIをコピー
# 再度cloud9のコンソールに戻る
ec2-user:~/environment $ ll
total 8
-rw-r--r--. 1 ec2-user ec2-user 535 Apr 22 13:56 Dockerfile
-rw-r--r--. 1 ec2-user ec2-user 569 Apr 17 20:27 README.md

# buildを実行(-t <ECR の URL>:<バージョン Tag> )
ec2-user:~/environment $ docker build -t 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/h4b-ecs-helloworld:0.0.1 .

# 再度コンテナイメージを確認
ec2-user:~/environment $ docker images
REPOSITORY                                                             TAG       IMAGE ID       CREATED             SIZE
000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/h4b-ecs-helloworld   0.0.1     3ecb0bbd7483   About an hour ago   205MB
hello-world                                                            latest    3ecb0bbd7483   About an hour ago   205MB

#8. コンテナイメージをECRにアップロード

# リポジトリにログイン
ec2-user:~/environment $ aws ecr get-login-password | docker login --username AWS --password-stdin 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# コンテナイメージをアップロード
ec2-user:~/environment $ docker push 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/h4b-ecs-helloworld:0.0.1     
The push refers to repository [000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/h4b-ecs-helloworld]
a61a92ef202d: Pushed 
19dcff01c4a2: Pushed 
de44312c12b2: Pushed 
548a79621a42: Pushed 
0.0.1: digest: sha256:ee0af1933cdde643be42b8353757268b9245f21efc34e5258f2bb0637d3771fc size: 1155

アップロードされていることを確認
image.png

#9. コンテナを動かすためのVPCやサブネット周りを作成

#10. ECSサービス画面に移動し、クラスターを作成
image.png
image.png

#11. タスク定義を作成
image.png
image.png

#12. サービスを作成
今回はサービスに使用するタスク定義を#11で作成したものにし、必要タスクを2にしてALBを作成するように設定した。
1つのサービスにつきタスク定義は1つのみなのでWebサーバとAppサーバだったらサービスは2つとかになるはず
image.png

間違えてSGインバウンドで80を許可していなかったのでヘルスチェックに失敗し、タスクの停止、新規起動が繰り返されてた
image.png

#13. 確認
ALBのドメインをブラウザで見ると下記ページが表示されたので成功!
image.png

振り返り

初めてなのでページを公開するまで時間がかかったが、運用面を考えるとEC2で構築するのと比べてECSはすごい楽になるんだろうなと感じた。

まだ、仕組み的に分かっていない部分が多いので勉強します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?