AWS 初心者が Amazon Elastic Container Service 入門 を体験してみた
はじめに
私のチームでは オンプレのシステムを AWS 上にリフト & シフトしたものを 運用、開発しています。
その中で、Amazon Elastic Container Service(ECS) を使用していて、私自身が構築したわけではなく、自分がこれまであまり AWS に触れる機会がなかったため、
Amazon Elastic Container Service 入門 - コンテナイメージを作って動かしてみようを体験してみました。
Cloud9 構築
最初に ECS での作業に便利な Cloud9 環境を構築します。
Cloud9 は Webベースの IDE であり、手軽に開発環境をセットアップできます。
- Cloud9を開く
- 環境を作成を選択 下記のように設定し作成(記載がない項目はデフォルト)
- 名前: h4b-ecs (任意)
- インスタンスタイプ: t3.small
コンテナイメージを作成
コンテナイメージはアプリケーションとその依存関係をパッケージ化するものです。
Cloud9 を使用して、Docker を使いながらコンテナイメージを作成する手順を詳細に解説します。
- Cloud9を開いて、開く を選択
- Dockerfile を生成
touch Dockerfile
- 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
コンテナイメージを格納するリポジトリを作成
今回のハンズオンでは ECR にリポジトリにアップしたコンテナイメージを使用します。
このセクションでは、適切なリポジトリを作成し、イメージをアップロードする手順を紹介します。
- ECR を開く
-
Repositories を選択
- リポジトリの作成 を選択
- 可視性: private
-
リポジトリ名: h4b-ecr (任意)
コンテナイメージをアップロード
作成したコンテナイメージを作成したリポジトリにアップロードします。
ECS で利用するための準備が整います。
- Cloud9 を開きます
- docker イメージを作成
- 実行例
docker build -t 077986094693.dkr.ecr.ap-northeast-3.amazonaws.com/h4b-ecr:0.0.1 .
- ECR にログイン
- 書式
aws ecr get-login-password | docker login --username AWS --password-stdin 638182392525.dkr.ecr.ap-northeast-1.amazonaws.com
- 実行例
Admin:~/environment $ aws ecr get-login-password | docker login --username AWS --password-stdin 638182392525.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
- ECR にコンテナイメージをアップロード
- コマンド例
docker push 077986094693.dkr.ecr.ap-northeast-3.amazonaws.com/h4b-ecr:0.0.1
- ECR にアップロードされていることを確認
VPC の作成
ECS クラスターを構築するために、Amazon Virtual Private Cloud(VPC)を設定します。
VPC はネットワークリソースを効果的に管理するための重要な要素です。
- サービスで VPC を開く
- VPC を作成 下記のように設定し、VPC を作成 を選択 (下記に記載がない設定値はデフォルト)
- 作成するリソース: VPC など
- 名前タグの自動生成: h4b (任意)
- プライベートサブネットの数: 0
セキュリティグループ の編集
セキュリティグループはネットワークトラフィックの制御に役立ちます。
ECS で使用するセキュリティグループの設定方法を解説します。
- サービスでVPCを開く
-
VPC でフィルタリングの作成した VPC を選択
- セキュリティグループを選択
- セキュリティグループの Security group ID を選択
-
インバウンドのルールを編集 を選択
- ルールを追加を選択し、ルールを下記のように編集
- タイプ: HTTP
-
ソース: Anywhere-IPv4
-
ECS の作成
ECS クラスターを作成し、コンテナを実行するための準備を整えます。
- サービスでElastic Container Serviceを開く
- クラスターの作成を選択 下記のように設定し作成(記載がない項目はデフォルト)
- 名前: h4b-ecs-cluster-test
タスク定義
ECS はタスク定義を使用してコンテナの設定を管理します。
タスク定義の作成方法に焦点を当てます。
- タスク定義を選択
-
新しいタスク定義の作成を押下し、新しいタスク定義の作成を選択
- 新しいタスク定義の作成 下記のように設定し作成(記載がない項目はデフォルト)
- タスク定義の設定
-
タスク定義ファミリー: h4b-ecs-task-definition (任意)
- コンテナの詳細 - 名前: apache-helloworld (任意)
- イメージURI : 077986094693.dkr.ecr.ap-northeast-3.amazonaws.com/h4b-ecr:0.0.1 (ECR にアップしたイメージ URL)
-
タスク定義ファミリー: h4b-ecs-task-definition (任意)
サービス作成
ECS サービスを作成し、コンテナをデプロイします。
コンテナのスケールアウトやアプリケーションの冗長性を確保します。
- 作成した クラスターを選択し、作成を選択
- 作成
- デプロイ設定
- ファミリー: h4b-ecs-task-definition (タスク定義で作成したタスク)
- サービス名: h4b-ecs-service (任意)
-
必要なタスク数: 2 (任意)
- ネットワーキング
- VPC: h4b-vpc
- サブネット: 作成した VPC のサブネット (VPCを変更すると自動的に選択される)
-
セキュリティグループ: 既存のセキュリティグループを使用 (デフォルト)
-
- ロードバランシング
- ロードバランサーの種類: Application Load Balancer
- ロードバランサー名: h4b-ecs-alb
-
ターゲットグループ名: h4b-ecs-targetgroup
-
- ブラウザからアクセス
- h4b-ecs-serviceを選択
- Configuration and networkingを選択
-
オープンアドレスを選択
まとめ
一部、AWS がコンソールをアップデートしているため、ハンズオン資材と画面が少し異なっていて混乱しましたが、ハンズオンの動画や資材がわかりやすく、手順通り進めていけば、ちゃんと作れました。
興味があるけど、ECR や ECS を作ったことがない方や、既に自分が所属しているチームでは利用しているけど、自分では構築したことがない方などは、勉強になるハンズオンだと思いました。
(私自身が後者の状態でしたので、非常に勉強になりました!)
Discussion