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

DevOps実装初期フェーズの組織がTerraformとecspressoで求めるAma...

Tocyuki
November 22, 2022

DevOps実装初期フェーズの組織がTerraformとecspressoで求めるAmazon ECS CICDの最適解/AWS ECS CICD with Terraform and ecspresso

Cloud Native Days Tokyo 2022

Tocyuki

November 22, 2022
Tweet

More Decks by Tocyuki

Other Decks in Technology

Transcript

  1. 弊社のDevOps実装前の状況 17 • 開発者がインフラの構築や変更に関心がない • インフラ構築、変更は外部のMSPへ委託していた • 開発者が運用監視について関心がない • インフラ運用監視は外部のMSPへ委託していた

    • 開発者が運用を考慮した設計、実装に関心がない • 開発者が運用に参加していないため、運用を考慮した発想が出ない • 各種運用が自動化されておらず作業工数負荷が高い • 運用改善や自動化の文化もリソースもなく惰性で対応
  2. DevOps実装を始めて弊社に起こった変化 19 • 開発者がIaCへコントリビュートを始める • AWSへの移行に伴いInfrastructure as Codeを実践 • 開発者が監視アラートやダッシュボードを仕込み始める

    • New Relicをオブザーバビリティ基盤として導入 • 開発者が運用を考慮した設計、実装をし始める • 運用に参加する開発者が増え、運用を考慮し始める • 様々な運用が自動化され開発に割ける工数が増えた • デプロイ、ビルド、テスト等様々な部分を自動化
  3. DevOpsが扱う5つの領域 23 Reduce organizational silos 組織のサイロを削減する Accept failure as normal

    エラーが発生するのを許容する Implement gradual change 段階的に変更する Leverage tooling and automation ツールと自動化を活用する Measure everything すべてを計測する
  4. 24 Operator Developer なぜサイロ化が起こるのか インフラ 運用 監 視 障害対応 テスト

    開発 機能追加 リリー ス 関心のスコープは関 与できる領域にしか 広がりにくい 関心のスコープ 関心のスコープ
  5. 25 Operator Developer なぜサイロ化が起こるのか インフラ 運用 監 視 障害対応 テスト

    開発 機能追加 リリー ス 関心のスコープが異 なる組織は目的も異 なりやすい 関心のスコープ 関心のスコープ 多少のリスクは負っても新機能、 価値をユーザーへ届けたい ユーザーへ届けるべき一番の価 値は安定稼働
  6. 26 Operator Developer インフラ 運用 監 視 障害対応 テスト 開発

    機能追加 リリー ス 関心のスコープ 関心のスコープ 関心のスコープの 共通化が有効 サイロ化を起こさせないために
  7. 27 インフラ 運用 監 視 障害対応 テスト 開発 機能追加 リリー

    ス 関心のスコープ 理想の姿 Operator & Developer
  8. 段階的に共通化を広げていくことが大事 • お互いの関心のスコープに関与できるような仕組み作り • プログラムを共通言語とするInfrastructure as Codeの実践 • Infrastructure as

    Codeを実践しやすいパブリッククラウドの採用 • いきなりすべてに関与することは難しいので切り出す • アプリケーションリポジトリにインフラの定義を一部持たせる • 利用しやすい仕組みとしてCI等で自動化する 29 とは言うものの、どう やって実現しよう?
  9. DevOpsが扱う5つの領域 30 Reduce organizational silos 組織のサイロを削減する Accept failure as normal

    エラーが発生するのを許容する Implement gradual change 段階的に変更する Leverage tooling and automation ツールと自動化を活用する Measure everything すべてを計測する
  10. 採用したツール、サービス 33 名称 役割 Terraform HashiCorp社謹製のパブリッククラウドやオンプレミスのリソースを安全かつ 効率的に構築、変更バージョン管理するためのInfrastructure as Codeツー ル

    ecspresso カヤック藤原さん謹製のAmazon ECS用のとても薄いレイヤーで作られた AWS APIラッパーなデプロイツールで「エスプレッソ」と読みます GitHub Actions GitHub謹製のCIツール
  11. • ECSのサービス、タスク定義の管理に特化している • アプリケーションのライフサイクルに近い部分のみを切り出せる • アプリケーションリポジトリに定義を配置することで開発者が変更できる • tfstateファイル内の値を参照できる • tfstateのバックエンドにS3を利用している場合、Terraformで構築したAWSのリ

    ソースを呼び出せるため、サービスやタスクを環境毎に分ける必要がなくDRYに 書ける • 開発者がTerraformのどこで定義されているか読み取ることができる ecspresso採用理由 35 段階的且つ効果的にインフラの一部を開発者の 関心のスコープへ入れることができる
  12. • ECSのサービス、タスク定義の管理に特化している • アプリケーションのライフサイクルに近い部分のみを切り出せる • アプリケーションリポジトリに定義を配置することで開発者が変更できる • tfstateファイル内の値を参照できる • tfstateのバックエンドにS3を利用している場合、Terraformで構築したAWSのリ

    ソースを呼び出せるため、サービスやタスクを環境毎に分ける必要がなくDRYに 書ける • 開発者がTerraformのどこで定義されているか読み取ることができる ecspresso採用理由 37 ecspressoをハブにしたTerraformへの導線確保 を行うことで、今後さらに開発者の関心のスコープを 広げるための下地作りができる
  13. たとえばこんな時 41 ecspresso 開発者 ローカルでは動くのに ECSだとうまく動かない のよなぁ。あー、こんなときに ECSのコンテナ 入ってデバッグできればなぁ。 ecspresso

    execコマンドを使うのです … なんだ!??ecspresso exec??お、コンテナ 入れた!!!これで!!!かてる!!!
  14. AWS Resources ECSオブジェクトとツールの関連図 44 ECS Cluster ECS Service ECS Task

    definition Container definition Dockerfile ecspresso ecspresso Terraform Terraform
  15. AWS Resources ECSオブジェクトとツールの関連図 45 ECS Cluster ECS Service ECS Task

    definition Container definition Dockerfile ecspresso ecspresso Terraform Terraform アプリケーションリ ポジトリに配置 Terraform リポジトリに配置
  16.    ECS Cluster タスク定義のデプロイ 52    Service Task definition 開発者 GitHub

    GitHub Actions ecspresso push deploy jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: kayac/ecspresso@v1 with: version: v1.7.14 - run: | ecspresso deploy --config ecspresso.yml
  17. デプロイイメージ 56    ECS Cluster    Service Task definition revision 1

    Task definition revision 2 開発者 GitHub GitHub Actions ecspresso ALB ユーザー
  18. ロールバックイメージ 60    ECS Cluster    Service Task definition revision 1

    Task definition revision 2 開発者 GitHub GitHub Actions ecspresso ALB ユーザー
  19. ロールバックイメージ 61    ECS Cluster    Service Task definition revision 1

    Task definition revision 2 ALB ユーザー healthcheck failed