Spring BootとKubernetesで実現する今どきのDevOps入門
by
x-blood
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Spring Bootと Kubernetesで 実現する今どきの DevOps⼊⾨ 佐藤 靖幸 JJUG CCC 2022 Fall 2022/11/27 JJUG CCC 2022 Fall 1
Slide 2
Slide 2 text
⾃⼰紹介 佐藤 靖幸 得意領域 バックエンド開発 クラウドインフラ(AWS) 好きなプログラミング⾔語 Java Go コミュニティ活動 JJUG JAWS 2022/11/27 JJUG CCC 2022 Fall 2 PARTNER NETWORK 2022 APN AWS Top Engineers
Slide 3
Slide 3 text
本セッションについて 本セッションはSpring BootとKubernetesで DevOpsを実現し、本番ワークロードで稼働す るアプリケーションを構築したノウハウについ てご紹介致します。 2022/11/27 JJUG CCC 2022 Fall 3
Slide 4
Slide 4 text
アジェンダ 2022/11/27 JJUG CCC 2022 Fall 4 本セッションについて DevOpsにおけるコミュニケーション Spring BootとKubernetesで実現する今どきのDevOps⼊⾨ 継続的インテグレーション 継続的デプロイ セキュリティ オブザーバビリティ ロギング まとめ
Slide 5
Slide 5 text
DevOpsにおける コミュニケーション 開発と運⽤の垣根を なくすために実践した コミュニケーション⼿法とは 2022/11/27 JJUG CCC 2022 Fall 5
Slide 6
Slide 6 text
⼼理的安全性 ⼼理的安全性とは、 「チームの中で対⼈関係におけるリスクを とっても⼤丈夫、というチームメンバーに 共有される信念」のこと ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese Edition) (p. 22). Kindle Edition. 2022/11/27 JJUG CCC 2022 Fall 6
Slide 7
Slide 7 text
⼼理的安全性のメリット 最も重要な⼼理的安全性の確保のメリットは 「チームの学習」が促進されること、といえま す。 ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese Edition) (p. 29). Kindle Edition. 2022/11/27 JJUG CCC 2022 Fall 7
Slide 8
Slide 8 text
⼼理的安全性を持ったチームは、DevOpsエン ジニアリングにおいても、スムーズな情報連携 によるコミュニケーションが促進され、スト レッチゾーンによる技術⼒の向上が⾒込まれる ことを頑なに信じています。 2022/11/27 JJUG CCC 2022 Fall 8
Slide 9
Slide 9 text
⼼理的安全性 4つの因⼦ 話しやすさ 助け合い 挑戦 新規歓迎 2022/11/27 JJUG CCC 2022 Fall 9
Slide 10
Slide 10 text
コミュニケーションの形成 デイリーのコミュニケーション 雑談する 傾聴する 相談する 挑戦(ストレッチゾーン)を⽀援する 新規参画者を全⼒で⽀援する ⬇ 対⼈関係のリスクを下げることに影響 2022/11/27 JJUG CCC 2022 Fall 10
Slide 11
Slide 11 text
ツールを最⼤限活⽤ 対⾯(オンライン)レビューに Slack Call Slack Hangout Zoom ペアプログラミングに JetBrains Code With Me Visual Studio Code Live Sharing 2022/11/27 JJUG CCC 2022 Fall 11
Slide 12
Slide 12 text
コードレビュー Googleのコードレビューガイドをから、⼼理的 安全性に寄与する4因⼦を取り込む 親切にする 理由を説明する 礼儀正しく敬意を払う すぐにレビューを⾏う(1営業⽇以内) ⬇ チームの学習が促進されることに影響 2022/11/27 JJUG CCC 2022 Fall 12
Slide 13
Slide 13 text
継続的インテグレーション AWSを活⽤したSpring Bootの 継続的インテグレーションの ⼿法をおさらい 2022/11/27 JJUG CCC 2022 Fall 13
Slide 14
Slide 14 text
CIにおけるテスト戦略 E2E テスト 結合テスト 単体テスト • 上に⾏くほどコスト が⾼い • ビジネスロジックの テストをコストが低 い単体テストに集中。 ⾃動テストを⾼速に 回す戦略を採⽤ 2022/11/27 JJUG CCC 2022 Fall 14
Slide 15
Slide 15 text
@SpringBootTest @SpringBootTestはコマンドラインから起動 可能な結合テスト @SpringBootTestはCIにおいてコストが⾼め。 DIで読み込むクラスが増えればテスト実⾏速度 にも影響 依存関係に従って必要なリソースの準備も必要 データベース クラウドリソース など 2022/11/27 JJUG CCC 2022 Fall 15
Slide 16
Slide 16 text
@ExtendWith(MockitoExtension.class) コストが低い単体テストを実⾏する際は、 Spring FrameworkのDIで⾏っている依存性の 注⼊をモック化する。 2022/11/27 JJUG CCC 2022 Fall 16
Slide 17
Slide 17 text
CIパイプラインの選択肢 Maven、Gradleでテストを実⾏出来る 今どきなCIを選択する。 2022/11/27 JJUG CCC 2022 Fall 17 AWS CodePipeline
Slide 18
Slide 18 text
GitHub Actions 構成図 2022/11/27 JJUG CCC 2022 Fall 18
Slide 19
Slide 19 text
AWS CodePipeline 構成図 2022/11/27 JJUG CCC 2022 Fall 19
Slide 20
Slide 20 text
GitHub Actions コード workflow.ymlにCIの順番をコードで定義 2022/11/27 JJUG CCC 2022 Fall 20
Slide 21
Slide 21 text
AWS CodeBuild コード buildspec.ymlにCIの順番をコードで定義 2022/11/27 JJUG CCC 2022 Fall 21
Slide 22
Slide 22 text
継続的デプロイ AWSを活⽤したSpring Bootの 継続的デプロイの ⼿法をおさらい 2022/11/27 JJUG CCC 2022 Fall 22
Slide 23
Slide 23 text
GitFlowの活⽤ GitFlowをベースとし た考え⽅でシンプルに ブランチを運⽤ 特定ブランチへのコ ミットをトリガーにデ プロイパイプラインが 起動 2022/11/27 JJUG CCC 2022 Fall 23
Slide 24
Slide 24 text
特定ブランチの 削除・直接コミットを禁⽌ 開発チーム内でコミットルールを強制 GitHub Protected Branch CodeCommit IAM Policy 2022/11/27 JJUG CCC 2022 Fall 24 IAM Policyによるリポジトリ削除禁⽌の例
Slide 25
Slide 25 text
Kubernetesの特有のデプロイ Spring Bootアプリケーションの最適化項⽬ 環境変数 サービス公開 機微情報 2022/11/27 JJUG CCC 2022 Fall 25
Slide 26
Slide 26 text
Spring Bootの環境変数 Twelve Factor App の思想に基づき、 Spring Bootアプリ ケーションの環境変数 を外出し Kubernetesのマニ フェストファイルとし て管理 2022/11/27 JJUG CCC 2022 Fall 26
Slide 27
Slide 27 text
Spring Bootのサービス公開 Spring Bootの組み込 みTomcatがデフォル トで公開するポート 8080をKubernetes の30000ポートにマッ ピング。AWSのロー ドバランサーのリス ナーに登録して公開 2022/11/27 JJUG CCC 2022 Fall 27
Slide 28
Slide 28 text
Spring Bootの機微情報 DBのパスワードなどの機微情報は暗号化 オープンソースのkubesecやArgoCD Vault Pluginを活⽤ 2022/11/27 JJUG CCC 2022 Fall 28
Slide 29
Slide 29 text
コンテナのビルド・プッシュ 継続的インテグレーションのビルドステップで ⽣成したSpring Bootの起動可能jarファイル をコンテナにビルドし、 Amazon ECRにプッ シュ 2022/11/27 JJUG CCC 2022 Fall 29 Amazon Elastic Container Registry (Amazon ECR)
Slide 30
Slide 30 text
Spring BootのDockerfile ビルドしたJarファイルを利⽤することで 簡潔に記述可能 2022/11/27 JJUG CCC 2022 Fall 30
Slide 31
Slide 31 text
GitHub Actions コード AWSの認証にはOIDC認証の利⽤を推奨 2022/11/27 JJUG CCC 2022 Fall 31
Slide 32
Slide 32 text
AWS CodeBuild コード buildspec.ymlでECRへプッシュ 2022/11/27 JJUG CCC 2022 Fall 32
Slide 33
Slide 33 text
イメージタグの管理 コンテナのイメージタグはlatest運⽤を避ける プッシュ毎にGitのコミットIDを付与 2022/11/27 JJUG CCC 2022 Fall 33
Slide 34
Slide 34 text
GitOps Kustomizeを利⽤してマニフェストを共通化 ArgoCDがKustomizeのKubernetesマニフェス トを常時監視 2022/11/27 JJUG CCC 2022 Fall 34
Slide 35
Slide 35 text
GitHub Actions 構成図 2022/11/27 JJUG CCC 2022 Fall 35
Slide 36
Slide 36 text
AWS CodeBuild 構成図 2022/11/27 JJUG CCC 2022 Fall 36
Slide 37
Slide 37 text
セキュリティ(脆弱性管理) コンテナの脆弱性管理を AWSが提供するマネージド サービスで楽をする 2022/11/27 JJUG CCC 2022 Fall 37
Slide 38
Slide 38 text
脆弱性管理の選択肢の例 オープンソース trivy IaaS Amazon Inspector 2022/11/27 JJUG CCC 2022 Fall 38
Slide 39
Slide 39 text
Amazon Inspector V2 2022/11/27 JJUG CCC 2022 Fall 39
Slide 40
Slide 40 text
オブザーバビリティ (可観測性) 可観測性を⼊⼿できるAWSの マネージドサービスを利⽤して 運⽤を楽にする 2022/11/27 JJUG CCC 2022 Fall 40
Slide 41
Slide 41 text
可観測性を満たすための サービスの選択肢の例 オープンソース Grafana IaaS AWS Container Insights on EKS SaaS Datadog Slack通知が可能なサービスを選択 2022/11/27 JJUG CCC 2022 Fall 41
Slide 42
Slide 42 text
Grafana 2022/11/27 JJUG CCC 2022 Fall 42
Slide 43
Slide 43 text
Container Insights on EKS 2022/11/27 JJUG CCC 2022 Fall 43
Slide 44
Slide 44 text
Spring Boot Actuator httpエンドポイント経由でアプリケーションの 様々な情報を取得可能 Prometheus⽤のメトリクスを取得可能 2022/11/27 JJUG CCC 2022 Fall 44
Slide 45
Slide 45 text
ロギング 便利なロギングコンソールを 活⽤して運⽤を楽にする 2022/11/27 JJUG CCC 2022 Fall 45
Slide 46
Slide 46 text
Kubernetesにおける ログ出⼒サービスの選択肢 IaaS CloudWatch Logs SaaS Datadog Logs Slack通知が可能なサービスを選択 2022/11/27 JJUG CCC 2022 Fall 46
Slide 47
Slide 47 text
CloudWatch Logs 2022/11/27 JJUG CCC 2022 Fall 47
Slide 48
Slide 48 text
CloudWatch Logs Insight ログ検索機能を拡張 2022/11/27 JJUG CCC 2022 Fall 48
Slide 49
Slide 49 text
Datadog Logs 2022/11/27 JJUG CCC 2022 Fall 49
Slide 50
Slide 50 text
Spring Boot Tomcat Log 標準出⼒設定 2022/11/27 JJUG CCC 2022 Fall 50
Slide 51
Slide 51 text
Spring Boot Logback設定 2022/11/27 JJUG CCC 2022 Fall 51 JSON形式で出⼒
Slide 52
Slide 52 text
Spring Boot Logback設定 2022/11/27 JJUG CCC 2022 Fall 52
Slide 53
Slide 53 text
まとめ Spring BootとKubernetesで 実現する今どきのDevOps⼊⾨の まとめ 2022/11/27 JJUG CCC 2022 Fall 53
Slide 54
Slide 54 text
CNでJavaを利⽤するのは容易 クラウドネイティブにおいてより⾼速に起動す るアプリケーションが求められるなか、Go、 Python、Typescriptなどで実装されたアプリ ケーションが台頭し始めたと実感 しかしながら、Spring Bootはクラウドネイ ティブに容易に追従でき、未だに多くの企業様 で利⽤されていると実感 2022/11/27 JJUG CCC 2022 Fall 54
Slide 55
Slide 55 text
当たり前のことを 当たり前に実践する コミュニケーションを促進する⽂化の形成 継続的インテグレーション 継続的デプロイ セキュリティ(脆弱性管理) オブザーバビリティ ロギング 当たり前のことをするために Spring Bootの機能を最⼤限活⽤していく 2022/11/27 JJUG CCC 2022 Fall 55
Slide 56
Slide 56 text
ご清聴ありがとうございました。 2022/11/27 JJUG CCC 2022 Fall 56