紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【参加レポート】C3-01【初級】AWS コンテナサービス入門 #AWSSummit

はじめに

JAWS Summit Tokyo 2019の3日目に参加してきました。 今年もコンテナとサーバレスを中心に聞いてきたため、レポートをまとめます。

f:id:yokoyantech:20190614165438p:plain

登壇者

AWS ソリューションアーキテクト 原 康紘氏

コンテナとは

  • アプリケーションを構成するコンポーネント
  • 以下、4つの要素が必要
    • アプリケーションコード
      • ランタイム/エンジン
        • 依存ライブラリ/パッケージ
          • 設定
  • ローカル、Staging、本番で環境の差異が出ることがある
    • JVMのバージョンが全部違う、など
      • 結果、ローカルで動いていたものが本番で動かない!!
  • 解決策としてのコンテナ
    • アプリが依存するものを全てコンテナに入れる
      • ランタイム
      • 依存ライブラリ
      • アプリケーションコード
    • 設定はない。
      • 設定を入れると、開発環境用のコンテナ、ステージグング用コンテナ、、、など解決にならない。
  • Docker
    • コンテナのデファクト
    • すべての環境で同じコンテナを動かす

仮想マシンとコンテナ

  • すごく似てる
    • ec2
      • AMIを指定して起動
    • コンテナ
      • コンテナイメージを指定して起動
      • 軽量な仮想マシンと思いこんでしまうことがある。実際は違う。
  • 違う点
    • VMはマシン。コンテナはただのプロセス。
      • プロセスだから起動が早い
      • 1コンテナ1プロセスにするのがベストプラクティス
    • VM
      • Hypervisor
      • Guest OS
      • Bins/Libs
      • App
    • コンテナ
      • Hypervisor
      • Guest OS
      • Docker Engine
      • Bins/Libs
      • App

Dockerを利用した基本ワークフロー

  • その1(Production)
    • Dockerfile作成
    • $ docker build
    • コンテナイメージs区政
  • その2
    • $ docker run
    • コンテナ内作業
    • $ docker cmmit

コンテナ実行

  • $ docker pull
  • $ docker run

思っていたよりも手作業!?

  • dockerの責務は同一サーバ上のコンテナライフサイクル管理
  • 複数サーバやコンテナを束ねた管理 は責務外
    • これをやるなら、オーケストレーションツールが必要
    • 手作業のコンテナイメージダウンロードと実行は非効率かつミスを招く。。。

コンテナオーケストレーション

  • ECS
    • クラスタでコンテナ実行
    • クラウドでコンテナを本番環境利用するためのオーケストレータ
      • 2014年当時、そういうサービスはなかった
    • AWSサービスとの高度な連携
    • 数億コンテナ/週、数百万EC2インスタンスを管理する
    • シンプル
      • 2つ学べばOK
        • タスク
        • サービス
    • Linux、Windowsコンテナサポート
  • Kubernetes
    • 運用難易度が高いツール
      • AWSで運用・管理してくれないか?という相談が増えてきた
      • AWS + K8s=EKS
      • 世界の51%のK8sユーザがAWS上でワークロードを動かしてる(CNCFより)
    • コントロールプレーンを提供
      • 脳みそのような存在
    • 難易度が高いK8sをマネージドで提供
    • エコシステムのOSSやツールを利用できる
      • CNCF certified
        • AWSはK8sには全く手を入れていない
    • 各種AWSをサービスとの連携
    • EKSチームによるK8sコミュニティへの貢献
    • OSS
      • 問題が起きたときに自分で調査できる
    • Pod,Deployment,Service,Jobなどのリソースに代表される高い表現力

イメジレジストリ、コンテナ実行環境

  • ECR(Elastic Container Registry)
    • フルマネージドなPrivateコンテナイメージレジストリ
      • イメージ置き場
      • DockerHubのプライベート版みたいなイメージ
      • 東京Regionにあるのでレイテンシが少ない
    • IAM連携
    • DockerCLIからの利用OK
    • ECS/EKS/K8s以外からでも利用可能
      • ローカル端末からでもOK
  • AWS Fargate
    • 実行環境の環境の管理の自動化
    • パッチ当てもAWSがやる
    • コンテナのことだけ考えればOK
      • ECS+ECR+Fargateの構成
        • 仮想マシンなしでコンテナが起動できる
        • 仮想マシンの管理がないためスケールアウトできる

その他のコンテナ関連サービス

  • Cloud Map
    • 全てのクラウドリソースのためのサービスディスカバリ
      • 名前解決
        • LambdaではDNSの名前解決はできない(ARNでアクセスする)
          • こういうものも名前解決できるようになる
  • App Mesh
    • アプリケーションレベルのネットワーク
      • アプリケーションレベルのVPCみたいなもの
  • CloudWatch Container Insights
    • コンテナワークロードのためのモニタリング

現実世界のコンテナワークロード

  • コンテナだけ使ってもサービスは作れない
  • コンテナはやろうと思えば何でもできる
    • Lambdaは運用コストが低いかわりに、できることが限られる
    • コンテナはその中間
    • VMは運用コストが高いかわりに、なんでもできる

セッションのまとめ

  • オーケストレーション
    • ECS
    • EKS
  • イメージレジストリ(イメージの格納)
    • ECR
  • ホスティング(実行環境)
    • EC2
    • Fargate
  • アプリレベル
    • App Mesh
    • Cloud

まとめ

非常にわかりやすいセッションで勉強になりました。DockerとVMの違いや、Dockerとオーケストレーションの責務の話は、全て混同して考えがちな所なので、有難かったです。

自分のプロダクトをコンテナ化することが目標なので、まずはローカル環境でDockerを使い、AWSにデプロイする際にECSとECRを使ってみたいと思います!!