Slide 1

Slide 1 text

AWSコンテナサービス入門
 NDS第60回 JAWS-UG長岡第3回
 
 


Slide 2

Slide 2 text

自己紹介
 ● @hayajo (id:hayajo_77)
 ● 株式会社はてな
 ● Mackerelチーム SRE


Slide 3

Slide 3 text

今日のゴール
 ● コンテナとは何かを理解する
 ● AWSのコンテナサービスの特性を理解する


Slide 4

Slide 4 text

話すこと
 ● コンテナの基礎知識
 ● コンテナ運用の課題
 ● AWSコンテナサービスの紹介


Slide 5

Slide 5 text

話さないこと
 ● アプリケーションのコンテナ化の手順
 ● コンテナ実行環境の構築、運用方法


Slide 6

Slide 6 text

コンテナとは?


Slide 7

Slide 7 text

コンテナ
 ● OSリソースを隔離・制限したプロセス
 ● 仮想マシンのようなサンドボックスを実現


Slide 8

Slide 8 text

コンテナが隔離・制限するもの
 ● PID、マウントテーブル、ネットワークなどを隔離
 ● CPU、メモリ、I/Oなどを制限
 ● 権限を細分化して制限
 see also. 「コンテナ技術入門 - 仮想化との違いを知り、要素技術を触って学ぼう」 
 https://employment.en-japan.com/engineerhub/entry/2019/02/05/103000 


Slide 9

Slide 9 text

Docker
 ● 複数コンテナのライフサイクル管理
 ● Dockerイメージの管理
 ○ アプリケーションと依存関係をパッケージ化
 ○ コンテナのルートファイルシステムとして利用
 ○ 環境の一貫性、再現性を実現


Slide 10

Slide 10 text

プロセス コンテナ VM 仮想化 メモリ OS ハードウェア Isolation 低 高 フットプリント 小 大 プロセス・コンテナ・VM


Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

なぜコンテナか
 ● Consistency
 ● Portability
 ● Isolation
 ● Efficiency


Slide 13

Slide 13 text

コンテナの運用


Slide 14

Slide 14 text

Dockerのスコープ
 ● シングルホストのコンテナ
 ○ ホストがダウンしたらそれまで
 ● 冗長性、可用性を高めるには
 ○ 複数ホストでのコンテナ運用が必要
 ○ Dockerのスコープ外


Slide 15

Slide 15 text

コンテナの運用
 ● ライフサイクル管理
 ● デプロイ
 ● ヘルスチェック
 ● モニタリング
 ● スケーリング
 ● スケジューリング
 ● ネットワーキング
 ● 構成管理
 etc.


Slide 16

Slide 16 text

運用の自動化が必要
 ● 信頼性の向上
 ● 運用負荷の軽減


Slide 17

Slide 17 text

AWSのコンテナサービス


Slide 18

Slide 18 text

コンテナ運用を自動化するAWSサービス
 ● AWS Elastic Beanstalk (EB)
 ● Amazon Elastic Container Service (ECS)
 ● Amazon Elastic Kubernetes Service (EKS)


Slide 19

Slide 19 text

AWS Elastic Beanstalk (EB)


Slide 20

Slide 20 text

EB
 ● PaaS
 ○ インフラの手間を削減し、サービス開発に注力する
 ● ウェブサービスを提供するために必要なコンポーネントを一元管理
 ○ ネットワーク(VPC)、ロードバランサ(ELB)、VM(EC2)、データベース (RDS)、モニタリング(CloudWatch) など


Slide 21

Slide 21 text

Dockerもサポート
 ● Single Container (Docker)
 ○ 単一のコンテナをデプロイ
 ● Multi Container (ECS)
 ○ 依存関係にある複数のコンテナをまとめてデプロイ
 ○ ECSのTaskとして実行
 


Slide 22

Slide 22 text

スケーリング
 ● EC2単位でスケーリング
 ○ Amazon EC2 Auto Scaling
 ● コンテナ/Task単位ではスケールできない
 ○ EC2インスタンスとコンテナ/Taskは1対1の関係
 ○ VMなのでスケールの速度はそれなり


Slide 23

Slide 23 text

EBを選択する理由
 ● インフラの構築、運用の手間を削減したい
 ● 頻繁にスケールする必要がない
 ● 独立したサービスとして完結できる
 ● コンテナを使い始めたばかり


Slide 24

Slide 24 text

Amazon Elastic Container Service (ECS)


Slide 25

Slide 25 text

ECS
 ● コンテナオーケストレーションサービス
 ● コンテナの宣言的管理
 ● 柔軟なスケジューリングとスケーリング
 ● Service → Task → Container というトポロジをとる
 ○ スケールの最小単位はTask
 ■ 依存関係にある複数のコンテナをまとめた論理的単位


Slide 26

Slide 26 text

コンテナオーケストレーション?
 ● コンテナの運用を自動化する


Slide 27

Slide 27 text

コントロールプレーンとデータプレーン
 ● コントロールプレーン
 ○ コンテナを管理する場所
 ● データプレーン
 ○ コンテナが稼働する場所
 コントロールプレーン デプロイ、スケジューリング、スケーリング、コンテ ナの構成管理 データプレーン コンテナの実行、状態のフィードバック

Slide 28

Slide 28 text

in ECS
 ● コントロールプレーン
 ○ ECS
 ● データプレーン
 ○ EC2起動タイプ
 ○ Fargate起動タイプ
 コントロールプレーン データプレーン

Slide 29

Slide 29 text

EC2起動タイプ
 ● データプレーンとしてEC2インスタンスによるクラスタを構築する
 ● EC2インスタンスはユーザーが構築・管理する必要がある
 ○ キャパシティ管理、セキュリティ対策が必要
 ○ ecs-agentのアップデート


Slide 30

Slide 30 text

Fargate起動タイプ
 ● フルマネージドのデータプレーン
 ○ コンテナホストの管理不要
 ○ コンテナだけに注力できる
 ● コンテナに直接アタッチできないためデバッグが難しい
 “また、FargateコンテナにSSHして、内部の情報を確認できるようにするなども予定している” 
 https://www.atmarkit.co.jp/ait/articles/1906/19/news022.html 


Slide 31

Slide 31 text

ECSを選択する理由
 ● すでにAWSで稼動しているシステムのコンテナ化
 ● マイクロサービスも視野に入れている
 ● コスト最適化


Slide 32

Slide 32 text

EC2起動タイプ
 vs
 Fargate起動タイプ


Slide 33

Slide 33 text

EC2起動タイプを選択する理由
 ● 大規模ワークロードで実行コストを最適化したい
 ○ リザーブドインスタンスやスポットインスタンスを活用


Slide 34

Slide 34 text

Fargate起動タイプを選択する理由
 ● 大規模ワークロードで運用コストを最適化したい
 ● 小規模ワークロードでときどき負荷が高くなる
 ● 負荷が小さい
 ● バッチ処理


Slide 35

Slide 35 text

Amazon Elastic Kubernetes Service (EKS)


Slide 36

Slide 36 text

EKS
 ● Kubernetesのマネージドサービス
 ● フルマネージドのコントロールプレーンを提供
 ● データプレーンはユーザーが構築・管理する
 ○ ECS/EC2起動タイプと同じような感じ
 ○ Fargate for EKSに期待
 https://github.com/aws/containers-roadmap/issues/32 


Slide 37

Slide 37 text

コントロールプレーン EKS
 データプレーン

Slide 38

Slide 38 text

Kubernetes?
 ● OSSのコンテナオーケストレーションツール
 ● 高い拡張性
 ○ インフラの拡張、APIの拡張
 ● 充実したエコシステム


Slide 39

Slide 39 text

ref. Cloud Native Landscape https://github.com/cncf/landscape 


Slide 40

Slide 40 text

EKSのバージョンライフサイクル
 ref. Amazon EKS バージョンライフライクルの更新 
 https://aws.amazon.com/jp/blogs/news/updates-to-amazon-eks-version-lifecycle/ 


Slide 41

Slide 41 text

EKSを選択する理由
 ● オンプレでKubernetesを運用してい(る|た)が運用負担を減らしたい
 ● Kubernetesのエコシステムを利用したい
 ● 運用を積極的に自動化したい
 ● ベンダーロックインの回避
 ● 冗長性、可用性を更に高めたい


Slide 42

Slide 42 text

各サービスの特性


Slide 43

Slide 43 text

Simplicity
 Convenience
 Flexibility
 EB
 ECS
 EKS


Slide 44

Slide 44 text

まとめ


Slide 45

Slide 45 text

まとめ
 ● コンテナはOSを仮想化してリソースを分割する
 ● コンテナの冗長性、可用性を高めるには運用の自動化が必要
 ● AWSには特性の異なる複数のコンテナ運用自動化サービスがある


Slide 46

Slide 46 text

(そもそも)
 コンテナ運用に至るまでの道のり


Slide 47

Slide 47 text

ref. Cloud Native Landscape https://github.com/cncf/landscape 


Slide 48

Slide 48 text

サービス目的と成長、運用を考慮した
 無理のないコンテナ運用を。