LoginSignup
0
1

More than 3 years have passed since last update.

AWS上でDockerを使ったプロジェクトの構造と各サービスの役割から関係性を理解する。複数のAWSサービスの連携

Last updated at Posted at 2021-03-02

AWS上でDockerを使ったプロジェクトについて。ECR・ECS・EC2・ELB・Route53など多数のサービスが必要になる。

そもそも、Docker関連のECR・ECSの繋がりや、ECS内のタスク、コンテナ、クラスター、サービスの違いがイマイチ分からなかったので図で理解してみる。

目次

  1. アプリケーションの概要
  2. ECSとECRの関係
  3. ECS
  4. ネットワーキング
  5. AWSのサービスとの関係
  6. プロジェクト作成の流れ
  7. 参考リンク(一部)


アプリケーションの概要

ECRにプッシュしたイメージからECSでコンテナを起動する。コンテナはEC2のサービスと結びついており、ELBでサービスを割り振る構造になっている。

ネットワーキングは、ユーザーが入力したFQDN/URLを、設定したエイリアスレコードで識別し、ロードバランサー(ELB)でサービスにつなぐ。

ECSとECRの関係

ECRはイメージを保存するレポジトリ。DockerのDocker hubに該当する。

ECSがDockerに該当する。コンテナの要件定義にあたる、docker-compose.ymlをECS(のタスク定義)に記述する。

image.png

流れとしては、ローカル(自分のPC)でイメージを作成してECRにプッシュ。ECSでそのイメージを拾ってきてコンテナを起動する。

プロジェクトによって他のAWSサービス(S3, EC2, CloudFrontなど)が必要な場合はIAMで設定する。


ECS

ECSはdocker-compose.ymlの用件定義をするだけでなく、AWS上で複数のサービス(プロジェクト)を実行するためにプラットホームとなる仮想サーバーをサービスとして定義する。

アプリケーションを更新した場合のデプロイ(展開)方法や、ロードバランサーでEC2とコンテナを接続する設定もここで行う。



▼ECSの構造

image.png

クラスターはプロジェクトを管理しやすくするためのグループといった位置付け。その中に例えば、productionやstagingといった環境の異なるサービスを作成する。

実際のサービスの根幹となるコンテナはタスクの中に定義する。このタスクをサービスの上に乗っける。


ネットワーキング

例えば、エディタアプリケーション(EC2)が複数のサービス(ECS)につながっている場合など、

ユーザーがURLを叩いて、このコンテナにアクセスするまでの流れは以下のようになる。

image.png

FQDN/URLはユーザーが入力した内容
(sub.example.com)
 ↓
エイリアスレコードで識別
(example.comのエイリアス)
 ↓
セキュリティグループ
(許可されたIPアドレスか確認)
 ↓
ロードバランサー
(sub.example.comに対応するサービスに割り振る)
 ↓
コンテナ
(Dockerのアプリケーションに入る)
 ↓
必要に応じてDBなどのコンテナにアクセス


AWSのサービスとの関係

このネットワークとサービスを、AWSのサービス毎にまとめると以下のようになる。

image.png

さらに、EC2がS3など他のAWSサービスとも連携していることが多い。

デプロイの自動化

上記では、手動デプロイになっているため、ローカルで更新があったら、イメージをECRにプッシュ、タスク定義の更新(対象のイメージの変更)、サービスの更新(対象のタスクのリビジョンの変更)をする必要がある。

この一連の更新作業を自動化するためにCodePipelineを使う

CodePipelineはmasterとなるgithubやCodeCommitのレポジトリ/ブランチを指定して、変更があった場合に自動検知して更新をかける。

モニタリング

CloudWatchというAWSのサービスを使うと、CPUやタスクの使用状況などをモニタリングすることができる。

サービスからCloud Watchにログを送る設定をすればすぐに使える。



▼アプリケーションとAWSサービスの関係
image.png



AWSの難解さはこのサービスの多さだと思う。。そして、一つ一つのサービスが結構複雑で専門用語も多い。

まずは、各サービスの役割と関係性を覚えるのが導入としてはわかりやすい。


プロジェクト作成の流れ

様々なサービスが必要になるが、例えばECSのクラスターの作成など、事前にEC2でサービスを作成し、Route53のエイリアスレコードやELB、ECSのタスク定義などをしておく必要がある。

絶対にコレという手順はなく後から変更できるものも多い。(名前は変更できない場合が多い)



▼大まかな作成の流れ

  1. EC2インスタンス
  2. セキュリティグループ
  3. ロードバランサー
  4. IAM
  5. Route53
  6. ECR
  7. ECS(タスク定義)
  8. ECS(クラスター・サービス)
  9. CodePipeline


参考リンク(一部)

・ロードバランサー



・Route53 エイリアスレコードの作成



・ECRにイメージをプッシュする方法



・ECSのタスク定義手順



・Fargateとは何か?



・ECSのクラスター作成手順



・Blue/Greenデプロイとは何か?



・CodeCommitとGithubの違い



・更新したイメージをビルドした後のECRとECSの作業手順

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