[レポート]コンテナを有効活用したいあなたへ AWSコンテナサービス入門 2020#AWSSummit

AWS Summit Online Day1(2020/9/8)のライブセッション、「コンテナを有効活用したいあなたへ AWSコンテナサービス入門 2020」のセッションレポートです。AWSのコンテナサービスをさっくり学べるセッションでした!

こんにちは。オペレーション部のもっさんです。
いよいよ待ちに待ったAWS Summitの開幕です!
本記事は初日のライブセッション、「コンテナを有効活用したいあなたへ AWSコンテナサービス入門 2020」のレポートです。

セッション動画

セッション動画の視聴は下記リンクから可能です。(AWS Summit Onlineへの登録・ログインのうえ、ページをご覧ください)
AWS-41:コンテナを有効活用したいあなたへ AWS コンテナサービス入門 2020

セッション情報

スピーカー

アマゾン ウェブ サービス ジャパン株式会社
技術統括本部 西日本ソリューション部
ソリューションアーキテクト 濵 真一 様

セッション概要

セッションのページからの引用です。

AWS ではお客様の幅広いユースケースをサポートするために多くのコンテナに関連するサービスを選択肢として提供しています。 本セッションでは、コンテナオーケストレーションサービスである Amazon ECS/Amazon EKS、フルマネージドなコンテナ実行環境 AWS Fargate、 コンテナイメージレジストリの Amazon ECR に代表される各サービスの特徴と、これらがなぜ必要なのかをここ1年の間にあったアップデートを交えて紹介いたします。ご自身のワークロード構築にフィットするサービスを選ぶための軸となる情報が欲しい方にオススメのセッションです。


レポート

セッションの対象者

  • 一般的な「コンテナとはなにか」という特性を知っている
  • docker run を実行したことがある
  • AWSのコンテナサービスの特徴に関心がある


本セッションのゴール

  • AWSのコンテナサービスの特徴がわかるようになる
  • 問題解決に適切なAWSのコンテナサービスを自分で選択できる

前提知識:コンテナとは

  • アプリケーションの実行には、大きく分けて必要なものが4つ
    • アプリケーションコード
    • ランタイム/エンジン
    • 依存ライブラリ/パッケージ
    • 環境情報(設定)
  • ローカル、ステージング、本番で利用している環境のバージョンなどがそれぞれ異なる場合がある
    • ローカル開発環境では動いたアプリケーションが、本番では正常に動作しないということが起こり得る
    • 問題は環境の差分
  • 環境の差分の問題を解決するのがコンテナ
    • アプリケーションが依存するものをすべてコンテナに詰め込む
    • 言語やライブラリのバージョンなどを統一することができる
    • 環境ごとに設定が必要なOSなどの情報はコンテナに含まれない
      • OSなどの設定もひとまとめにしたい場合は、仮想マシン(VM)が向いている
      • AWSではEC2のAMIなどがあたる

Dockerとは

  • 常駐型コンテナエンジン
    • すべての環境で同じコンテナを利用するために管理することができる
    • docker pull レジストリからダウンロード可能
    • docker run コマンドでサーバに実行(展開)できる
    • ただし、複数の環境に展開するには都度docker runを実行する必要がある
  • デプロイさせるまでに、思ったより手動での操作が多いのはなぜか  

    • Dockerは同一サーバ上のコンテナライフサイクル管理のために作られた
    • 同時に複数台サーバを管理するのはスコープ外
    • これを解消するのがコンテナオーケストレーション

Amazon ECS(Amazon Elastic Container Service)

  • 2014年に登場した、AWSのコンテナオーケストレーションサービス
  • ECSのAPIを呼び出すだけでコンテナ環境の実行が可能
  • 手軽に複数台のサーバを同時に展開することができる
  •  

  • クラウドでコンテナを本番環境利用するためのオーケストレーター
    • 各AWSサービスとの高度な連携
      • 例えば、Auto Scalingと連携してサーバ負荷に応じたスケーリング設定が手軽に行える
    • 「タスク」「サービス」の概要を学べばスタートできるシンプルさ
    • Linux/Windowsの両環境をサポートしている
  • ECSは手軽に設定・実行が可能な分、細かな設定には不向き
  • セルフマネージドなKubernetes環境をAWS上で動作させたい、という声があった
  • アプリケーションそのものの開発に注力するために、Kubernetesの周りにあるOSSやエコシステムの管理をAWSで行ってほしいという要望

Amazon EKS(Elastic Kubernetes Servises)

  • 運用難易度の高いKubernetesをマネージドで提供
  • エコシステムのOSSやツールを利用可能
  • OSSの中身は改修していないため、既存の環境を移行しても容易に利用できる
    • CNCF certified取得
  • 各種AWSサービスとの連携が可能
  • AWSのEKSサービス(開発)チーム、OSSチームがKubernetesコミュニティに貢献
    • OSSをもとにしたAWS独自の改良を行わない分、公開済みのOSSそのものをAWS上で利用しやすいものに改良する
  • "pod","deployment","service", "job"などを用いた高い表現力を備える
  • HELM:Kubernetesのパッケージマネージャ
  • コントロールプレーン:Kubernetesの脳味噌
  • さまざまな計算のもと、コンテナをコントロールしている
    • どのくらいのリソースが必要か?
    • コンテナをどこに配置すればよいか?
  • EKSではこれらをフルマネージドで行える
  • Kubernetesの管理は2つのフェーズに分けられる
    • フェーズ1:コントロールプレーンの管理
      • コントロールブレーン
    • フェーズ2:データプレーンの管理
      • EKS Managed Node Groups
        • EKS APIによりデータプレーンの管理が可能に

Amazon ECR(Elastic Container Registry)

  • 完全プライベートなコンテナイメージレジストリ
    • プライベートな各リージョンで展開できる
    •   

    • 保管イメージの自動的な暗号化
    • IAMの連携:細かな権限制御
    • スケーラブルかつ高い可用性をもつ
    • Docker CLIから利用できる
  • パッケージの脆弱性スキャン
    • ECRネイティブの機能としてCVEsの静的スキャン
    • 無料で利用可能
  • コンテナ実行環境の管理
      ECSのインスタンス群 ・コンポーネントに対するオペレーション ・OSパッチ適用、更新 ・スケーリング
  • AWS Fargate
    • 2017年に開始したAWS環境に適したコンテナエンジン
    • コンテナコンポーネント群の管理をAWSマネージドで行うことができる
      • OSへのパッチ適用、更新
      • インスタンスのスケーリング
    • 仮想マシンを意識せず、コンテナの中身(アプリケーション)のみを意識すれば良い

これから始めるAWSでのコンテナワークロード

  • コンテナにおけるAWSサービス選定指針のエッセンス
    • FargateはAWSでのコンテナ実行における最初の選択肢
      • GPUなど、Fargateで提供されていないインスタンスタイプを利用したい時はEC2
    • マネージドサービスで楽に管理可能な仕組みをコンテナで実現しようとしていないかを考える
    • まずはマネージドサービスの組み合わせで実現できないか考えてみましょう

感想

AWSでのコンテナサービスの使いどころを理解するにはもちろん、一般的なコンテナの概要をつかむこともできる素敵なセッションでした!
コンテナサービスの選定の注意事項として挙げられた「まずはマネージドサービスの組み合わせで実現できる仕組みではないか」を考えることは、コンテナに限らずAWSサービス共通の選定ポイントですね。
改めて、AWSでできることが増えてきているな〜と感じることができました。これから継続してAWSを学ぶことが、より楽しくなりそうです!

関連セッションレポート

2020年9月8日現在で公開されている、AWS Summit Onlineのコンテナサービス関連のセッション記事をご紹介します。