JAWS-UG コンテナ支部 入門編 #6 コンテナの始め方 に参加しました。
AWS Expert Online これからはじめるコンテナワークロード - コンテナ化ベストプラクティス -
by @toricls / Amazon Web Services Japan
コンテナにまつわる4つの誤解
コンテナ化を阻む4つの誤解
- まずはどのオーケストレーションツールを使うか考えなければならない
- Choose "the right tools for the right job"
 - そもそも本当にコンテナが必要か?
 
 - コンテナを使うならマイクロサービス化しなければならない
- ユースケースの1つではあるが、飛躍しすぎ
 
 - コンテナ化すると開発・運用手法が大きく変わる
- 進め方次第。影響範囲を狭める方法はいくつもある。
 
 - はじめてのコンテナ利用は新規プロジェクト方がよい
- むしろ現行プロジェクトの移行の方がよい
 
 
なぜコンテナか?
- Run Anywhere
 - Portability
 - Isolated Process
 
なぜオーケストレーションツールか?
- コンテナの機能性のスコープは単一ノードにおけるライフサイクル管理
 - オーケストレーションツール + α で実現される機能性の例
- 複数サーバにまたがるコンテナのレプリケーションやスケジューリング
 - クラッシュしたコンテナのオートヒーリング
 - オートススケーリング
 - etc
 
 
コンテナの導入から運用まで
コンテナ導入から運用までのポイント
- これまで使ったことがない技術の導入には成功までの道筋が必要
- 目的・ゴールを明確にし、道筋を描く
 
 - ゴールに至るまでのマイルストーン
- 一気にすべて終わらせることは難しい
 - ゴールまでのマイルストーンを適切に配置する
 - 各ステップで何をやり、何をやらないのかを明確化する
 
 - 改善のイテレーション
- 改善のためのイテレーションを常に回す
 
 
初コンテナ環境におすすめのゴールと進め方
- 既存システムを構成するアプリケーションの1つをコンテナに置き換える
- ゴールは "置き換えの前後で同じように動く" こと
 - 一般にシステムは多くのコンポーネントから構成される
 - 本番環境に投入できる状態となるまでの間、try & errorしやすい環境でイテレーションを回すことが近道
 - 新規アプリケーションでコンテナを採用すると欲が出やすい
 
 - なるべく既存の開発・運用フローを変えないように進める
- うまく行かなければコンテナを消せば大丈夫、という状態
 
 
コンテナ導入から運用までのステップ
- コンテナの特性とそれらが解決する課題を知る
 
- その課題はコンテナじゃないと解決できないのか?
 - コンテナでの解決が最適なのか?
 
- コンテナ化
 
- 何をコンテナ化するか
- 既存システムのシンプルなWebアプリ、なければバッチジョブがオススメ
 
 - どうコンテナ化するか
- Dockerfileを書く && docker build
 
 - 最初にやるべきこと
- 1コンテナ1プロセス
 - アプリケーションのステートレス化
- アプリケーションログはファイルではなく標準出力へ
 - ステートフルな例
- セッション情報がローカルディスクに出力されている -> ElastiCacheなどを使用しましょう
 
 
 
 
- 手動でのデプロイ
 
- ECS/FargateのGetting Startedで作成されるタスク定義の書き換えで良い
 - ECRへのdocker
 
- オーケストレータの特性と解決する課題を知る
 
- オーケストレータの特性
 - EC2インスタンスタイプなど、特定条件に基づくデプロイも可能ではある
 
- 仮想マシンの家畜化
 - チームの開発のための開発環境整備、自動化、CI/CD
 
- チーム開発のための環境整備
- "ローカル開発環境でコードを書き換えたら即反映されて動作確認可能"
 - 少なくとも今よりもユーザーエクスペリエンスが悪化しない開発環境の構築を目指す
 
 - ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
- 開発環境利用時のトラブルやHow To
 - スクリプトが動かないときにマニュアルでやる方法etc.
 
 - 自動化
- ここまで手作業で行ってきたことをCI/CDパイプラインに組み込む
 
 
- 運用を見据えたデザイン
 
- 現行システムで満たされているレベルを達成する
 - 検討内容の例
- ロールバック
 - データベーススキーママイグレーション
 - オートスケーリング
 - ネットワークポリシー
 - ログ分析
 - IAMロール設計
 - 負荷試験による適切なタスクリソースの割当
 - 秘密情報・設定情報の取扱etc.
 
 - ここまで構築してきた仕組みに乗って、イテレーションを回す
 - ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
 
- 社内・チーム教育
 
- 自分だけが仕組みを理解している状態は脆弱
 - ここまでの仕組みをなぜ採用したのか意思決定の意図も共有
 - ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
 
- システムとチームの成長を見据えたモダナイゼーションと最適化
 
- さらなる自動化の推進
 - デリバリ高速化、影響範囲最小化を目指したマイクロサービス化
 - 直接コスト削減のための環境最適化
 
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コンテナ支部
最近の勉強会だとよく導入されていますが、
- 環境は、Dokcerで準備しておいたimageをpullしてもらう。
 - テキストは、Jupyterでnotebookを準備しておいて進めてもらう。
 
という手法は、研修等にも活用していきたいと思いました。
以上