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

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

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実装初期フェーズの組織が
    Terraformとecspressoで求める
    Amazon ECS CI/CDの最適解

    View Slide

  2. 自己紹介
    名前:Tocyuki(としゆき)
    所属:株式会社トラストバンク
       CTO室 SRE
    経歴:Network→Infra→SRE
    趣味:ギター、柔術(紫帯)
    SNS:@Tocyuki
    2

    View Slide

  3. 会社紹介

    View Slide

  4. 会社概要
    4
    資本金 122,243,816円
    親会社 株式会社チェンジ(東京証券取引所第一部) 100%連結子会社
    子会社 株式会社Orb
    決算期 3月
    主な事業・サービス
     ふるさと納税ポータルサイト「ふるさとチョイス」
     パブリテック事業 「LoGoシリーズ」
     エネルギー事業  ふるさとエネルギーチョイス「えねちょ」
     地域通貨事業   「chiica(チーカ)」

    View Slide

  5. Vision
    5
    目指すは「自立した持続可能な地域をつくる」こと。
    トラストバンクが目指す地域共創で実現する経済循環図

    View Slide

  6. 6
    ふるさと納税事業 パブリテック事業
    エネルギー事業
    地域通貨事業
    主な事業・サービス

    View Slide

  7. SECTION
    7
    00 DevOps実装初期フェーズの組織がTerraform
    とecspressoで求める
    Amazon ECS CI/CDの最適解

    View Slide

  8. 聴講対象者
    • 開発者にもインフラ、IaCに触れてほしい
    • DevOpsの実装例に興味がある
    • Amazon ECSでシンプルなCI/CDを実現したい
    8

    View Slide

  9. 今回お話しすること
    • DevOps実装設計の肝
    • CI/CDで採用したツール、サービス
    • Amazon ECSのCI/CD
    9

    View Slide

  10. 10
    DevOps実装初期フェーズの組織?

    View Slide

  11. とある開発組織
    11
    バグで障害起こされたらやだから
    しっかりテストしてくれや
    リリースしたい新機能が盛りだくさ
    んだぜ
    Operator
    Developer
    テスト書けてないけど多分動くと
    思うからリリースしようぜ
    いや、そんなんリリースすんなし

    View Slide

  12. とある開発組織
    12
    バグで障害起こされたらやだから
    しっかりテストしてくれや
    リリースしたい新機能が盛りだくさ
    んだぜ
    Operator
    Developer
    テスト書けてないけど多分動くと
    思うからリリースしようぜ
    いや、そんなんリリースすんなし
    協力しようぜ!!

    View Slide

  13. とある開発組織
    13
    よし、まずは踏み台サーバーに
    SSHして、アプリサーバーに SSH
    してgit pullしてと
    テストしたからリリースしてよ
    Operator
    Developer
    はやくしてくれ〜
    ふー、
    あと100台同じことやらなきゃ

    View Slide

  14. とある開発組織
    14
    よし、まずは踏み台サーバーに
    SSHして、アプリサーバーに SSH
    してgit pullしてと
    テストしたからリリースしてよ
    Operator
    Developer
    はやくしてくれ〜
    ふー、
    あと100台同じことやらなきゃ
    自動化しようぜ!!

    View Slide

  15. DevOpsとは
    15
    ざっくり説明すると、開発チームと運用チームのサイロ化や様々
    な場面での自動化プロセスの欠如により迅速なソフトウェアデリ
    バリーが実現できていないような状況を改善するための手法、文
    化、思想

    View Slide

  16. DevOpsで目指したいこと
    16
    OperatorとDeveloperが共にプロダクトに
    オーナーシップを持ち、開発、リーリース、運
    用のサイクルを協力しながら迅速にまわして
    いく状態を目指したい

    View Slide

  17. 弊社のDevOps実装前の状況
    17
    • 開発者がインフラの構築や変更に関心がない
    • インフラ構築、変更は外部のMSPへ委託していた
    • 開発者が運用監視について関心がない
    • インフラ運用監視は外部のMSPへ委託していた
    • 開発者が運用を考慮した設計、実装に関心がない
    • 開発者が運用に参加していないため、運用を考慮した発想が出ない
    • 各種運用が自動化されておらず作業工数負荷が高い
    • 運用改善や自動化の文化もリソースもなく惰性で対応

    View Slide

  18. 18
    class SRE implements DevOps
    SREはDevOpsというinterfaceの実装である

    View Slide

  19. DevOps実装を始めて弊社に起こった変化
    19
    • 開発者がIaCへコントリビュートを始める
    • AWSへの移行に伴いInfrastructure as Codeを実践
    • 開発者が監視アラートやダッシュボードを仕込み始める
    • New Relicをオブザーバビリティ基盤として導入
    • 開発者が運用を考慮した設計、実装をし始める
    • 運用に参加する開発者が増え、運用を考慮し始める
    • 様々な運用が自動化され開発に割ける工数が増えた
    • デプロイ、ビルド、テスト等様々な部分を自動化

    View Slide

  20. 20
    どのようにDevOpsを実装するか?

    View Slide

  21. 21
    Amazon ECSのCI/CDの事例を元に
    DevOps実装の一例をご紹介します

    View Slide

  22. SECTION
    22
    01 DevOps実装設計の肝

    View Slide

  23. DevOpsが扱う5つの領域
    23
    Reduce organizational silos 組織のサイロを削減する
    Accept failure as normal エラーが発生するのを許容する
    Implement gradual change 段階的に変更する
    Leverage tooling and automation ツールと自動化を活用する
    Measure everything すべてを計測する

    View Slide

  24. 24
    Operator
    Developer
    なぜサイロ化が起こるのか
    インフラ
    運用


    障害対応
    テスト
    開発 機能追加
    リリー

    関心のスコープは関
    与できる領域にしか
    広がりにくい
    関心のスコープ 関心のスコープ

    View Slide

  25. 25
    Operator
    Developer
    なぜサイロ化が起こるのか
    インフラ
    運用


    障害対応
    テスト
    開発 機能追加
    リリー

    関心のスコープが異
    なる組織は目的も異
    なりやすい
    関心のスコープ 関心のスコープ
    多少のリスクは負っても新機能、
    価値をユーザーへ届けたい
    ユーザーへ届けるべき一番の価
    値は安定稼働

    View Slide

  26. 26
    Operator
    Developer
    インフラ
    運用


    障害対応
    テスト
    開発 機能追加
    リリー

    関心のスコープ 関心のスコープ
    関心のスコープの
    共通化が有効
    サイロ化を起こさせないために

    View Slide

  27. 27
    インフラ
    運用


    障害対応
    テスト
    開発
    機能追加
    リリー

    関心のスコープ
    理想の姿
    Operator & Developer

    View Slide

  28. 28
    千里の道も一歩から

    View Slide

  29. 段階的に共通化を広げていくことが大事
    • お互いの関心のスコープに関与できるような仕組み作り
    • プログラムを共通言語とするInfrastructure as Codeの実践
    • Infrastructure as Codeを実践しやすいパブリッククラウドの採用
    • いきなりすべてに関与することは難しいので切り出す
    • アプリケーションリポジトリにインフラの定義を一部持たせる
    • 利用しやすい仕組みとしてCI等で自動化する
    29
    とは言うものの、どう
    やって実現しよう?

    View Slide

  30. DevOpsが扱う5つの領域
    30
    Reduce organizational silos 組織のサイロを削減する
    Accept failure as normal エラーが発生するのを許容する
    Implement gradual change 段階的に変更する
    Leverage tooling and automation ツールと自動化を活用する
    Measure everything すべてを計測する

    View Slide

  31. DevOps実装設計の肝まとめ
    31
    • 関心のスコープの共通化が有効
    • 共通化の範囲は一気に広げず、段階的に適用していく

    View Slide

  32. SECTION
    32
    02 CI/CDで採用したツール、サービス

    View Slide

  33. 採用したツール、サービス
    33
    名称 役割
    Terraform
    HashiCorp社謹製のパブリッククラウドやオンプレミスのリソースを安全かつ
    効率的に構築、変更バージョン管理するためのInfrastructure as Codeツー

    ecspresso
    カヤック藤原さん謹製のAmazon ECS用のとても薄いレイヤーで作られた
    AWS APIラッパーなデプロイツールで「エスプレッソ」と読みます
    GitHub Actions GitHub謹製のCIツール

    View Slide

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

    View Slide

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

    View Slide

  36. アプリケーションのリポジトリ構成
    36

    View Slide

  37. • ECSのサービス、タスク定義の管理に特化している
    • アプリケーションのライフサイクルに近い部分のみを切り出せる
    • アプリケーションリポジトリに定義を配置することで開発者が変更できる
    • tfstateファイル内の値を参照できる
    • tfstateのバックエンドにS3を利用している場合、Terraformで構築したAWSのリ
    ソースを呼び出せるため、サービスやタスクを環境毎に分ける必要がなくDRYに
    書ける
    • 開発者がTerraformのどこで定義されているか読み取ることができる
    ecspresso採用理由
    37
    ecspressoをハブにしたTerraformへの導線確保
    を行うことで、今後さらに開発者の関心のスコープを
    広げるための下地作りができる

    View Slide

  38. こんな感じで参照できる
    38

    View Slide

  39. すると・・・?
    39
    開発者
    DBの設定確認したいなぁ。
    お、Terraformのこの定義を見に
    行けばええんやな。
    じぃ〜〜〜〜〜
    なるほど、Terraformはこう書けば
    ええんやな。いっちょ PR出してみ
    よか。

    View Slide

  40. • ECS execもラップしてくれている
    • やっぱりコンテナ入りたいをecspressoで叶えてくれる
    • ECSタスクのイベントログを一括表示する機能がある
    • デバッグで超絶便利
    ecspresso採用理由
    40

    View Slide

  41. たとえばこんな時
    41
    ecspresso 開発者
    ローカルでは動くのに ECSだとうまく動かない
    のよなぁ。あー、こんなときに ECSのコンテナ
    入ってデバッグできればなぁ。
    ecspresso execコマンドを使うのです …
    なんだ!??ecspresso exec??お、コンテナ
    入れた!!!これで!!!かてる!!!

    View Slide

  42. • ECS execもラップしてくれている
    • やっぱりコンテナ入りたいをecspressoで叶えてくれる
    • ECSタスクのイベントログを一括表示する機能がある
    • デバッグで超絶便利
    ecspresso採用理由
    42

    View Slide

  43. たとえばこんな時
    43
    ecspresso 開発者
    あー、ECSのデプロイがうまくいかないー。原因
    もよくわからんし、そもそもどうやってデバッグす
    ればええんやー。つらー。
    --traceでイベントログを出力させるのです …
    なんだ!??--traceオプション??お、イベント
    ログが表示された!?また IAM権限不足!!
    貴様か!!これで!!!かてる!!!

    View Slide

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

    View Slide

  45. AWS Resources
    ECSオブジェクトとツールの関連図
    45
    ECS Cluster
    ECS Service
    ECS Task definition
    Container definition
    Dockerfile
    ecspresso
    ecspresso
    Terraform
    Terraform
    アプリケーションリ
    ポジトリに配置
    Terraform
    リポジトリに配置

    View Slide

  46. CI/CDで採用したツール、サービスまとめ
    46
    • ecspressoはECSのサービス、タスク定義などのアプリケー
    ションのライフサイクルに近い部分を切り離して管理できる神
    ツール
    • ecspressoをハブにTerraformへ誘導し、IaCへのコントリ
    ビュートにも参加してもらおう

    View Slide

  47. SECTION
    47
    03 Amazon ECSのCI/CD

    View Slide

  48. • Dockerコンテナのビルド
    • コンテナレジストリへのプッシュ
    • タスク定義のデプロイ
    Amazon ECSのデプロイで必要なこと
    48

    View Slide

  49. • Dockerコンテナのビルド
    • コンテナレジストリへのプッシュ
    • タスク定義のデプロイ
    Amazon ECSのデプロイで必要なこと
    49

    View Slide

  50. コンテナのビルドとECRへのプッシュ
    50
    開発者 GitHub GitHub
    Actions
    ECR
    push
    build
    push

    View Slide

  51. • Dockerコンテナのビルド
    • コンテナレジストリへのプッシュ
    • タスク定義のデプロイ
    Amazon ECSのデプロイで必要なこと
    51

    View Slide

  52.    ECS Cluster
    タスク定義のデプロイ
    52
       Service
    Task definition
    開発者 GitHub GitHub
    Actions
    ecspresso
    push
    deploy
    jobs:
    deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - uses: kayac/[email protected]
    with:
    version: v1.7.14
    - run: |
    ecspresso deploy --config ecspresso.yml

    View Slide

  53.    ECS Cluster
    CI/CD全体の流れ
    53
       Service
    Task definition
    開発者 GitHub GitHub
    Actions
    ECR
    ecspresso
    push
    build
    push
    deploy

    View Slide

  54. • Blue/Greenデプロイが必要な要件がとくにない
    • ロールバックなどECSに任せることができる
    • なるべくシンプルなデプロイにしたい
    デプロイ方式はローリングアップデート
    54

    View Slide

  55. デプロイイメージ
    55
       ECS Cluster
       Service
    Task definition revision 1
    ALB
    ユーザー

    View Slide

  56. デプロイイメージ
    56
       ECS Cluster
       Service
    Task definition revision 1
    Task definition revision 2
    開発者 GitHub GitHub
    Actions
    ecspresso
    ALB
    ユーザー

    View Slide

  57. デプロイイメージ
    57
       ECS Cluster
       Service
    Task definition revision 1
    Task definition revision 2
    ALB
    ユーザー

    View Slide

  58. デプロイイメージ
    58
       ECS Cluster
       Service
    Task definition revision 1
    Task definition revision 2
    ALB
    ユーザー

    View Slide

  59. デプロイイメージ
    59
       ECS Cluster
       Service
    Task definition revision 2
    ALB
    ユーザー

    View Slide

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

    View Slide

  61. ロールバックイメージ
    61
       ECS Cluster
       Service
    Task definition revision 1
    Task definition revision 2
    ALB
    ユーザー
    healthcheck failed

    View Slide

  62. ロールバックイメージ
    62
       ECS Cluster
       Service
    Task definition revision 1
    ALB
    ユーザー

    View Slide

  63. Amazon ECSのCI/CDまとめ
    63
    • GitHub Actionsのシンプルで簡素な記述でDockerのビル
    ド、ECRへのプッシュ、ecspressoによるデプロイをシンプル
    に実装することができた
    • デプロイ方式もローリングアップデートにすることでロールバッ
    クもECSのマネージドに任せることができシンプルでわかりや
    すいデプロイにすることができた

    View Slide

  64. SECTION
    64
    04 まとめ

    View Slide

  65. • DevOpsの意図をアーキテクチャに組み込むことで仕組みレ
    ベルでのDevOps推進を進めることができた
    • ecspressoとTerraformを使ったECS環境、CI/CDは
    DevOps実装の一歩目としてとても有効だと感じた
    • 組織のレベル、状況によって最適解は異なるので色々試して
    自組織の最適解を模索してみてください
    まとめ
    65

    View Slide

  66. 66
    絶賛SRE募集中です!

    View Slide

  67. View Slide