JAWS-UG コンテナ支部 入門編

JAWS-UG コンテナ支部 入門編 #6 コンテナの始め方 に参加しました。


AWS Expert Online これからはじめるコンテナワークロード - コンテナ化ベストプラクティス -

by @toricls / Amazon Web Services Japan

コンテナにまつわる4つの誤解

コンテナ化を阻む4つの誤解

  • まずはどのオーケストレーションツールを使うか考えなければならない
    • Choose “the right tools for the right job”
    • そもそも本当にコンテナが必要か?
  • コンテナを使うならマイクロサービス化しなければならない
    • ユースケースの一つではあるが、飛躍しすぎ
  • コンテナ化すると開発・運用手法が大きく変わる
    • 進め方次第。影響範囲を狭める方法はいくつもある。
  • はじめてのコンテナ利用は新規プロジェクト方がよい
    • むしろ現行プロジェクトの移行の方がよい

なぜコンテナか?

  • Run Anywhere
  • Portability
  • Isolated Process

なぜオーケストレーションツールか?

  • コンテナの機能性のスコープは単一ノードにおけるライフサイクル管理
  • オーケストレーションツール + α で実現される機能性の例
    • 複数サーバにまたがるコンテナのレプリケーションやスケジューリング
    • クラッシュしたコンテナのオートヒーリング
    • オートススケーリング
    • etc

コンテナの導入から運用まで

コンテナ導入から運用までのポイント

  • これまで使ったことがない技術の導入には成功までの道筋が必要
    • 目的・ゴールを明確にし、道筋を描く
  • ゴールに至るまでのマイルストーン
    • 一気にすべて終わらせることは難しい
    • ゴールまでのマイルストーンを適切に配置する
    • 各ステップで何をやり、何をやらないのかを明確化する
  • 改善のイテレーション
    • 改善のためのイテレーションを常に回す

初コンテナ環境におすすめのゴールと進め方

  • 既存システムを構成するアプリケーションの1つをコンテナに置き換える
    • ゴールは “置き換えの前後で同じように動く” こと
    • 一般にシステムは多くのコンポーネントから構成される
    • 本番環境に投入できる状態になるまでの間、try & error しやすい環境でイテレーションを回すことが近道
    • 新規アプリケーションでコンテナを採用すると欲が出やすい
  • なるべく既存の開発・運用フローを変えないように進める
    • うまく行かなければコンテナを消せば大丈夫、という状態

コンテナ導入から運用までのステップ

  1. コンテナの特性とそれらが解決する課題を知る
    • その課題はコンテナじゃないと解決できないのか?
    • コンテナでの解決が最適なのか?
  2. コンテナ化
    • 何をコンテナ化するか
      • 既存システムのシンプルなWebアプリ, なければバッチジョブがオススメ
    • どうコンテナ化するか
      • Dockerfileを書く && docker build
    • 最初にやるべきこと
      • 1コンテナ1プロセス
      • アプリケーションのステートレス化
        • アプリケーションログはファイルではなく標準出力へ
        • ステートフルな例
          • セッション情報がローカルディスクに出力されている -> Elasticcashなどを使用しましょう
  3. 手動でのデプロイ
    • ECS/Fargate の Getting Started で作成されるタスク定義の書き換えで良い
    • ECR への docke
  4. オーケストレータの特性と解決する課題を知る
    • オーケストレータの特性
    • EC2インスタンスタイプなど, 特定条件に基づくデプロイも可能ではある
  5. 仮想マシンの家畜化
  6. チームの開発のための開発環境整備, 自動化, CI/CD
    • チーム開発のための環境整備
      • “ローカル開発環境でコードを書き換えたら即反映されて動作確認可能”
      • 少なくとも今よりもユーザーエクスペリエンスが悪化しない開発環境の構築を目指す
    • ドキュメンテーション, ドキュメンテーション, ドキュメンテーション
      • 開発環境利用時のトラブルやHow To
      • スクリプトが動かないときにマニュアルでやる方法 etc.
    • 自動化
      • ここまで手作業で行ってきたことをCI/CD パイプラインに組み込む
  7. 運用を見据えたデザイン
    • 現行システムで満たされているレベルを達成する
    • 検討内容の例
      • ロールバック
      • データベーススキーママイグレーション
      • オートスケーリング
      • ネットワークポリシー
      • ログ分析
      • IAMロール設計
      • 負荷試験による適切なタスクリソースの割当
      • 秘密情報・設定情報の取扱 etc.
    • ここまで構築してきた仕組みに乗って, イテレーションを回す
    • ドキュメンテーション, ドキュメンテーション, ドキュメンテーション
  8. 社内・チーム教育
    • 自分だけが仕組みを理解している状態は脆弱
    • ここまでの仕組みをなぜ採用したのか意思決定の意図も共有
    • ドキュメンテーション, ドキュメンテーション, ドキュメンテーション
  9. システムとチームの成長を見据えたモダナイゼーションと最適化
    • さらなる自動化の推進
    • デリバリ高速化, 影響範囲最小化を目指したマイクロサービス化
    • 直接コスト削減のための環境最適化

1~3 1st Milestone
4~5 2nd Milestone
6~7 3rd Milestone
8 4th Milestone
9 本番環境導入後

まとめ

  • ゴールと道筋を明確にする
  • はじめてのコンテナワークロードには既存アプリケーションがオススメ
  • コンテナ化から本番環境投入まで, すべてにおいてイテレーションを回す
  • コンテナ化にあたっての作業量, チームメンバーのオンボーディングの考慮
  • 本番環境投入後も継続的に改善する

AWS クラウドサービス活用資料集 に後日アップ予定だそうです.


平成最後なのでEC2インフラからECS+Fargateに置き換えた話

by Masashi Yamamoto さん / SRE at eureka

平成最後なのでEC2からECS+Fargateに置き換えた話


AWS での Docker ビルド & 脆弱性スキャンミニハンズオン

by コンテナ支部運営

ハンズオン内容

https://github.com/jawsug-container/scan-image-vulnerabilities

準備

https://github.com/jawsug-container/scan-image-vulnerabilities/blob/master/content/README.md

最近の勉強会だとよく導入されていますが、

  • 環境は、Dokcerで準備しておいたimageをpullしてもらう.
  • テキストは、Jupyterでnotebookを準備しておいて進めてもらう.

という手法は、研修等にも活用していきたいと思いました.


以上