Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twelve-Factor-Appから学ぶECS設計プラクティス/ECS practice...

k-ozawa
April 24, 2025

Twelve-Factor-Appから学ぶECS設計プラクティス/ECS practice for Twelve-Factor-App

k-ozawa

April 24, 2025
Tweet

More Decks by k-ozawa

Other Decks in Technology

Transcript

  1. 1 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 2012年にHerokuの中の人によって提唱された、

    モダンアプリケーションを作り上げるための方法論 Twelve-Factor App とは ref: https://12factor.net/ja/
  2. 2 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy インフラメンにも大事な

    Twelve Factor-App ↓アプリの話だけどインフラも知っておいた方が良い理由↓ タスク定義や構成で「なぜこうなっているのか」の意図が汲み取れない • なぜ環境変数にこの値が入っているのか • なぜこのコンテナが必要なのか • なぜDockerfileでこんなコマンドを実行しているのか • なぜECSを使うのか、etc... Twelve-Factor App とは
  3. 3 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy ◼インフラエンジニア、クラウドアーキテクト

    ◼AWS、コンテナを中心とした、 Webシステム設計/開発/運用/保守 ◼ex.: ECS, EKS, Codeシリーズ 尾澤 公亮(KOSUKE OZAWA)
  4. 4 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 構成要素

    コードベース 依存関係 設定 バックエンドサービス ビルド、リリース、実行 プロセス ポートバインディング 並行性 廃棄容易性 開発/本番一致 ログをイベントストリーム として扱う 管理タスクは一回限りの プロセス
  5. 5 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy コードベース

    バージョン管理されている1つのコードベースと複数のデプロイ GitHub Actions GitHub Amazon ECS Amazon ECS 本番 開発
  6. 6 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 依存関係を明示的に宣言し分離する

    →Gemfile.lock、package.json、etc... OSパッケージに依存しない →alpineイメージにcurl入ってない問題 依存関係
  7. 7 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 設定

    設定を環境変数に格納する Parameter Store Amazon ECS Key参照で 直接読み込み
  8. 8 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy バックエンドサービス

    バックエンドサービスをアタッチされたリソースとして扱う direnv、compose.yml等で ローカル用変数を定義
  9. 9 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy ビルド、リリース、実行

    ビルド、リリース、実行の3つのステージを厳密に分離する デプロイ アーティファクト 作成 BGデプロイ で必要
  10. 10 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy プロセス

    アプリケーションを1つもしくは複数の ステートレスなプロセスとして実行する 疎結合
  11. 11 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy ポートバインディング

    ポートバインディングを通してサービスを公開する Fargateはデフォルトでアプリのデフォルトポートをバインドする
  12. 12 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 並行性

    プロセスモデルによってスケールアウトする Amazon ECS Amazon EKS AWS Application Auto Scaling
  13. 13 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 廃棄容易性

    高速な起動とグレースフルシャットダウンで堅牢性を最大化する コンテナイメージの軽量化 Seekable OCI PID 1問題
  14. 14 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy コンテナイメージの軽量化

    マルチステージビルド ビルドに必要な実行ファイルのみを 稼働用イメージにCOPY →アプリ起動に不要なファイルを含めない
  15. 15 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy コンテナイメージの軽量化

    キャッシュ戦略 特定ディレクトリをキャッシュ指定 →差分が発生するライブラリのみ取得 する →処理時間の短縮にも BuildKit環境の整備が必要 実行環境によって手順が異なる
  16. 16 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy Seekable

    OCI ref: https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/ 実行に必要な処理箇所を特定し、 イメージの完全インストール前に起動する (Lazy Loading) → 起動時間の高速化
  17. 17 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy Seekable

    OCI 実行に必要な処理箇所を特定し、 イメージの完全インストール前に起動する (Lazy Loading) → 起動時間の高速化 ref: https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/ 現状SOCI snapshotter環境構築コストがかかる イメージサイズ 250MB以上推奨
  18. 18 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy PID

    1 問題 ENTRYPOINT [“nginx”, “-g”, “daemon off;”] → PID 1:nginx master ENTRYPOINT [“/bin/sh”, “-c”, “’nginx -g daemon off;’”] → PID 1:/bin/sh ref: https://note.shiftinc.jp/n/ndc63c45d9f97?gs=b214340a89d1 実行モジュール(Nginx)が /bin/sh のサブコマンドとして実行される 実行モジュールからのSIGTERMを /bin/sh が受け取れず、一定時間(10秒)後にSIGKILL →停止に時間がかかる、正常に終了しない
  19. 19 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 開発/本番一致

    開発、ステージング、本番環境をできるだけ一致させた状態を保つ 時間のギャップ 人材のギャップ ツールのギャップ ※Twelve Factor Appの文言から抜粋
  20. 20 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 開発/本番一致

    開発、ステージング、本番環境をできるだけ一致させた状態を保つ
  21. 21 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 開発/本番一致

    開発、ステージング、本番環境をできるだけ一致させた状態を保つ 管理環境が多すぎると全部の冪等性を担 保するのって結構難しい →ドリフト検知はしておいても良いかも しれない
  22. 23 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy 管理タスクは1回限りのプロセス

    DBマイグレーションはタスク化 踏み台、ECS Execの活用
  23. 24 Copyright(C) NRI Netcom, Ltd. All rights reserved. #nncstudy •

    Adam Wiggins「THE TWELVE-FACTOR APP」 • https://12factor.net/ja/ • Amazon Web Servicesブログ「詳解 : Seekable OCI を使用した AWS Fargate におけるコンテナイメージの遅延読み込み」 • https://aws.amazon.com/jp/blogs/news/under-the-hood-lazy-loading-container-images-with-seekable-oci-and-aws-fargate/ • SHIFT技術ブログ「Docker上のサーバーを強制終了ではなく正常に終了する PID1になるプロセスとは?を理解してみた」 • https://note.shiftinc.jp/n/ndc63c45d9f97?gs=b214340a89d1 参考文献