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

Spring BootとKubernetesで実現する今どきのDevOps入門

x-blood
December 22, 2022

Spring BootとKubernetesで実現する今どきのDevOps入門

x-blood

December 22, 2022
Tweet

More Decks by x-blood

Other Decks in Programming

Transcript

  1. Spring Bootと
    Kubernetesで
    実現する今どきの
    DevOps⼊⾨
    佐藤 靖幸
    JJUG CCC 2022 Fall
    2022/11/27 JJUG CCC 2022 Fall 1

    View Slide

  2. ⾃⼰紹介
    佐藤 靖幸
    得意領域
    バックエンド開発
    クラウドインフラ(AWS)
    好きなプログラミング⾔語
    Java Go
    コミュニティ活動
    JJUG JAWS
    2022/11/27 JJUG CCC 2022 Fall 2
    PARTNER
    NETWORK
    2022 APN AWS Top Engineers

    View Slide

  3. 本セッションについて
    本セッションはSpring BootとKubernetesで
    DevOpsを実現し、本番ワークロードで稼働す
    るアプリケーションを構築したノウハウについ
    てご紹介致します。
    2022/11/27 JJUG CCC 2022 Fall 3

    View Slide

  4. アジェンダ
    2022/11/27 JJUG CCC 2022 Fall 4
    本セッションについて
    DevOpsにおけるコミュニケーション
    Spring BootとKubernetesで実現する今どきのDevOps⼊⾨
    継続的インテグレーション
    継続的デプロイ
    セキュリティ
    オブザーバビリティ
    ロギング
    まとめ

    View Slide

  5. DevOpsにおける
    コミュニケーション
    開発と運⽤の垣根を
    なくすために実践した
    コミュニケーション⼿法とは
    2022/11/27 JJUG CCC 2022 Fall 5

    View Slide

  6. ⼼理的安全性
    ⼼理的安全性とは、
    「チームの中で対⼈関係におけるリスクを
    とっても⼤丈夫、というチームメンバーに
    共有される信念」のこと
    ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese
    Edition) (p. 22). Kindle Edition.
    2022/11/27 JJUG CCC 2022 Fall 6

    View Slide

  7. ⼼理的安全性のメリット
    最も重要な⼼理的安全性の確保のメリットは
    「チームの学習」が促進されること、といえま
    す。
    ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese
    Edition) (p. 29). Kindle Edition.
    2022/11/27 JJUG CCC 2022 Fall 7

    View Slide

  8. ⼼理的安全性を持ったチームは、DevOpsエン
    ジニアリングにおいても、スムーズな情報連携
    によるコミュニケーションが促進され、スト
    レッチゾーンによる技術⼒の向上が⾒込まれる
    ことを頑なに信じています。
    2022/11/27 JJUG CCC 2022 Fall 8

    View Slide

  9. ⼼理的安全性 4つの因⼦
    話しやすさ
    助け合い
    挑戦
    新規歓迎
    2022/11/27 JJUG CCC 2022 Fall 9

    View Slide

  10. コミュニケーションの形成
    デイリーのコミュニケーション
    雑談する
    傾聴する
    相談する
    挑戦(ストレッチゾーン)を⽀援する
    新規参画者を全⼒で⽀援する

    対⼈関係のリスクを下げることに影響
    2022/11/27 JJUG CCC 2022 Fall 10

    View Slide

  11. ツールを最⼤限活⽤
    対⾯(オンライン)レビューに
    Slack Call
    Slack Hangout
    Zoom
    ペアプログラミングに
    JetBrains Code With Me
    Visual Studio Code Live Sharing
    2022/11/27 JJUG CCC 2022 Fall 11

    View Slide

  12. コードレビュー
    Googleのコードレビューガイドをから、⼼理的
    安全性に寄与する4因⼦を取り込む
    親切にする
    理由を説明する
    礼儀正しく敬意を払う
    すぐにレビューを⾏う(1営業⽇以内)

    チームの学習が促進されることに影響
    2022/11/27 JJUG CCC 2022 Fall 12

    View Slide

  13. 継続的インテグレーション
    AWSを活⽤したSpring Bootの
    継続的インテグレーションの
    ⼿法をおさらい
    2022/11/27 JJUG CCC 2022 Fall 13

    View Slide

  14. CIにおけるテスト戦略
    E2E
    テスト
    結合テスト
    単体テスト
    • 上に⾏くほどコスト
    が⾼い
    • ビジネスロジックの
    テストをコストが低
    い単体テストに集中。
    ⾃動テストを⾼速に
    回す戦略を採⽤
    2022/11/27 JJUG CCC 2022 Fall 14

    View Slide

  15. @SpringBootTest
    @SpringBootTestはコマンドラインから起動
    可能な結合テスト
    @SpringBootTestはCIにおいてコストが⾼め。
    DIで読み込むクラスが増えればテスト実⾏速度
    にも影響
    依存関係に従って必要なリソースの準備も必要
    データベース
    クラウドリソース など
    2022/11/27 JJUG CCC 2022 Fall 15

    View Slide

  16. @ExtendWith(MockitoExtension.class)
    コストが低い単体テストを実⾏する際は、
    Spring FrameworkのDIで⾏っている依存性の
    注⼊をモック化する。
    2022/11/27 JJUG CCC 2022 Fall 16

    View Slide

  17. CIパイプラインの選択肢
    Maven、Gradleでテストを実⾏出来る
    今どきなCIを選択する。
    2022/11/27 JJUG CCC 2022 Fall 17
    AWS CodePipeline

    View Slide

  18. GitHub Actions 構成図
    2022/11/27 JJUG CCC 2022 Fall 18

    View Slide

  19. AWS CodePipeline 構成図
    2022/11/27 JJUG CCC 2022 Fall 19

    View Slide

  20. GitHub Actions コード
    workflow.ymlにCIの順番をコードで定義
    2022/11/27 JJUG CCC 2022 Fall 20

    View Slide

  21. AWS CodeBuild コード
    buildspec.ymlにCIの順番をコードで定義
    2022/11/27 JJUG CCC 2022 Fall 21

    View Slide

  22. 継続的デプロイ
    AWSを活⽤したSpring Bootの
    継続的デプロイの
    ⼿法をおさらい
    2022/11/27 JJUG CCC 2022 Fall 22

    View Slide

  23. GitFlowの活⽤
    GitFlowをベースとし
    た考え⽅でシンプルに
    ブランチを運⽤
    特定ブランチへのコ
    ミットをトリガーにデ
    プロイパイプラインが
    起動
    2022/11/27 JJUG CCC 2022 Fall 23

    View Slide

  24. 特定ブランチの
    削除・直接コミットを禁⽌
    開発チーム内でコミットルールを強制
    GitHub
    Protected Branch
    CodeCommit
    IAM Policy
    2022/11/27 JJUG CCC 2022 Fall 24
    IAM Policyによるリポジトリ削除禁⽌の例

    View Slide

  25. Kubernetesの特有のデプロイ
    Spring Bootアプリケーションの最適化項⽬
    環境変数
    サービス公開
    機微情報
    2022/11/27 JJUG CCC 2022 Fall 25

    View Slide

  26. Spring Bootの環境変数
    Twelve Factor App
    の思想に基づき、
    Spring Bootアプリ
    ケーションの環境変数
    を外出し
    Kubernetesのマニ
    フェストファイルとし
    て管理
    2022/11/27 JJUG CCC 2022 Fall 26

    View Slide

  27. Spring Bootのサービス公開
    Spring Bootの組み込
    みTomcatがデフォル
    トで公開するポート
    8080をKubernetes
    の30000ポートにマッ
    ピング。AWSのロー
    ドバランサーのリス
    ナーに登録して公開
    2022/11/27 JJUG CCC 2022 Fall 27

    View Slide

  28. Spring Bootの機微情報
    DBのパスワードなどの機微情報は暗号化
    オープンソースのkubesecやArgoCD Vault
    Pluginを活⽤
    2022/11/27 JJUG CCC 2022 Fall 28

    View Slide

  29. コンテナのビルド・プッシュ
    継続的インテグレーションのビルドステップで
    ⽣成したSpring Bootの起動可能jarファイル
    をコンテナにビルドし、 Amazon ECRにプッ
    シュ
    2022/11/27 JJUG CCC 2022 Fall 29
    Amazon Elastic Container
    Registry (Amazon ECR)

    View Slide

  30. Spring BootのDockerfile
    ビルドしたJarファイルを利⽤することで
    簡潔に記述可能
    2022/11/27 JJUG CCC 2022 Fall 30

    View Slide

  31. GitHub Actions コード
    AWSの認証にはOIDC認証の利⽤を推奨
    2022/11/27 JJUG CCC 2022 Fall 31

    View Slide

  32. AWS CodeBuild コード
    buildspec.ymlでECRへプッシュ
    2022/11/27 JJUG CCC 2022 Fall 32

    View Slide

  33. イメージタグの管理
    コンテナのイメージタグはlatest運⽤を避ける
    プッシュ毎にGitのコミットIDを付与
    2022/11/27 JJUG CCC 2022 Fall 33

    View Slide

  34. GitOps
    Kustomizeを利⽤してマニフェストを共通化
    ArgoCDがKustomizeのKubernetesマニフェス
    トを常時監視
    2022/11/27 JJUG CCC 2022 Fall 34

    View Slide

  35. GitHub Actions 構成図
    2022/11/27 JJUG CCC 2022 Fall 35

    View Slide

  36. AWS CodeBuild 構成図
    2022/11/27 JJUG CCC 2022 Fall 36

    View Slide

  37. セキュリティ(脆弱性管理)
    コンテナの脆弱性管理を
    AWSが提供するマネージド
    サービスで楽をする
    2022/11/27 JJUG CCC 2022 Fall 37

    View Slide

  38. 脆弱性管理の選択肢の例
    オープンソース
    trivy
    IaaS
    Amazon Inspector
    2022/11/27 JJUG CCC 2022 Fall 38

    View Slide

  39. Amazon Inspector V2
    2022/11/27 JJUG CCC 2022 Fall 39

    View Slide

  40. オブザーバビリティ
    (可観測性)
    可観測性を⼊⼿できるAWSの
    マネージドサービスを利⽤して
    運⽤を楽にする
    2022/11/27 JJUG CCC 2022 Fall 40

    View Slide

  41. 可観測性を満たすための
    サービスの選択肢の例
    オープンソース
    Grafana
    IaaS
    AWS Container Insights on EKS
    SaaS
    Datadog
    Slack通知が可能なサービスを選択
    2022/11/27 JJUG CCC 2022 Fall 41

    View Slide

  42. Grafana
    2022/11/27 JJUG CCC 2022 Fall 42

    View Slide

  43. Container Insights on EKS
    2022/11/27 JJUG CCC 2022 Fall 43

    View Slide

  44. Spring Boot Actuator
    httpエンドポイント経由でアプリケーションの
    様々な情報を取得可能
    Prometheus⽤のメトリクスを取得可能
    2022/11/27 JJUG CCC 2022 Fall 44

    View Slide

  45. ロギング
    便利なロギングコンソールを
    活⽤して運⽤を楽にする
    2022/11/27 JJUG CCC 2022 Fall 45

    View Slide

  46. Kubernetesにおける
    ログ出⼒サービスの選択肢
    IaaS
    CloudWatch Logs
    SaaS
    Datadog Logs
    Slack通知が可能なサービスを選択
    2022/11/27 JJUG CCC 2022 Fall 46

    View Slide

  47. CloudWatch Logs
    2022/11/27 JJUG CCC 2022 Fall 47

    View Slide

  48. CloudWatch Logs Insight
    ログ検索機能を拡張
    2022/11/27 JJUG CCC 2022 Fall 48

    View Slide

  49. Datadog Logs
    2022/11/27 JJUG CCC 2022 Fall 49

    View Slide

  50. Spring Boot Tomcat Log
    標準出⼒設定
    2022/11/27 JJUG CCC 2022 Fall 50

    View Slide

  51. Spring Boot Logback設定
    2022/11/27 JJUG CCC 2022 Fall 51
    JSON形式で出⼒

    View Slide

  52. Spring Boot Logback設定
    2022/11/27 JJUG CCC 2022 Fall 52

    View Slide

  53. まとめ
    Spring BootとKubernetesで
    実現する今どきのDevOps⼊⾨の
    まとめ
    2022/11/27 JJUG CCC 2022 Fall 53

    View Slide

  54. CNでJavaを利⽤するのは容易
    クラウドネイティブにおいてより⾼速に起動す
    るアプリケーションが求められるなか、Go、
    Python、Typescriptなどで実装されたアプリ
    ケーションが台頭し始めたと実感
    しかしながら、Spring Bootはクラウドネイ
    ティブに容易に追従でき、未だに多くの企業様
    で利⽤されていると実感
    2022/11/27 JJUG CCC 2022 Fall 54

    View Slide

  55. 当たり前のことを
    当たり前に実践する
    コミュニケーションを促進する⽂化の形成
    継続的インテグレーション
    継続的デプロイ
    セキュリティ(脆弱性管理)
    オブザーバビリティ
    ロギング
    当たり前のことをするために
    Spring Bootの機能を最⼤限活⽤していく
    2022/11/27 JJUG CCC 2022 Fall 55

    View Slide

  56. ご清聴ありがとうございました。
    2022/11/27 JJUG CCC 2022 Fall 56

    View Slide