Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Spring BootとKubernetesで実現する今どきのDevOps入門
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
x-blood
December 22, 2022
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Spring BootとKubernetesで実現する今どきのDevOps入門
x-blood
December 22, 2022
More Decks by x-blood
See All by x-blood
Amazon Q Developerでテストコードを生成してみた
xblood
0
52
re:Inventで現地参加したコンテナ関連セッションを振り返る
xblood
0
570
Amazon EKS Pod Identityで何が変わるのか
xblood
0
1.1k
Lizさんに届け!AWS Jr. ChampionとTop Engineerが書籍コンテナセキュリティを読んで感じたこと
xblood
0
1.6k
サーバーレスJavaパフォーマンス選手権 at AWS Dev Day 2023 Tokyo
xblood
2
1.5k
サーバーレスJavaの今 ~SnapStartとWeb Adapterを寄せて~
xblood
4
3.7k
Finch OSSコードリーディング
xblood
0
1.5k
ECS Service Connectでマイクロサービスを繋いでみた
xblood
0
2.5k
AWS Glue Git統合のPoCでの活用
xblood
0
240
Other Decks in Programming
See All in Programming
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
120
源内ハンズオン概要編
hideg
0
240
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
290
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
260
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
210
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
1
110
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
940
T3DD26: From RAGs to Riches
martinhelmich
0
130
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
240
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
490
Testing 201, or: Great Expectations
jmmastey
46
8.3k
From π to Pie charts
rasagy
0
350
Done Done
chrislema
186
16k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
440
The Limits of Empathy - UXLibs8
cassininazir
1
630
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Bash Introduction
62gerente
615
220k
sira's awesome portfolio website redesign presentation
elsirapls
0
380
Designing for Performance
lara
611
70k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
510
Transcript
Spring Bootと Kubernetesで 実現する今どきの DevOps⼊⾨ 佐藤 靖幸 JJUG CCC 2022
Fall 2022/11/27 JJUG CCC 2022 Fall 1
⾃⼰紹介 佐藤 靖幸 得意領域 バックエンド開発 クラウドインフラ(AWS) 好きなプログラミング⾔語 Java Go コミュニティ活動
JJUG JAWS 2022/11/27 JJUG CCC 2022 Fall 2 PARTNER NETWORK 2022 APN AWS Top Engineers
本セッションについて 本セッションはSpring BootとKubernetesで DevOpsを実現し、本番ワークロードで稼働す るアプリケーションを構築したノウハウについ てご紹介致します。 2022/11/27 JJUG CCC 2022
Fall 3
アジェンダ 2022/11/27 JJUG CCC 2022 Fall 4 本セッションについて DevOpsにおけるコミュニケーション Spring
BootとKubernetesで実現する今どきのDevOps⼊⾨ 継続的インテグレーション 継続的デプロイ セキュリティ オブザーバビリティ ロギング まとめ
DevOpsにおける コミュニケーション 開発と運⽤の垣根を なくすために実践した コミュニケーション⼿法とは 2022/11/27 JJUG CCC 2022 Fall
5
⼼理的安全性 ⼼理的安全性とは、 「チームの中で対⼈関係におけるリスクを とっても⼤丈夫、というチームメンバーに 共有される信念」のこと ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese Edition)
(p. 22). Kindle Edition. 2022/11/27 JJUG CCC 2022 Fall 6
⼼理的安全性のメリット 最も重要な⼼理的安全性の確保のメリットは 「チームの学習」が促進されること、といえま す。 ⽯井遼介. ⼼理的安全性のつくりかた 「⼼理的柔軟性」が困難を乗り越えるチームに変える (Japanese Edition) (p.
29). Kindle Edition. 2022/11/27 JJUG CCC 2022 Fall 7
⼼理的安全性を持ったチームは、DevOpsエン ジニアリングにおいても、スムーズな情報連携 によるコミュニケーションが促進され、スト レッチゾーンによる技術⼒の向上が⾒込まれる ことを頑なに信じています。 2022/11/27 JJUG CCC 2022 Fall
8
⼼理的安全性 4つの因⼦ 話しやすさ 助け合い 挑戦 新規歓迎 2022/11/27 JJUG CCC 2022
Fall 9
コミュニケーションの形成 デイリーのコミュニケーション 雑談する 傾聴する 相談する 挑戦(ストレッチゾーン)を⽀援する 新規参画者を全⼒で⽀援する ⬇ 対⼈関係のリスクを下げることに影響 2022/11/27
JJUG CCC 2022 Fall 10
ツールを最⼤限活⽤ 対⾯(オンライン)レビューに Slack Call Slack Hangout Zoom ペアプログラミングに JetBrains Code
With Me Visual Studio Code Live Sharing 2022/11/27 JJUG CCC 2022 Fall 11
コードレビュー Googleのコードレビューガイドをから、⼼理的 安全性に寄与する4因⼦を取り込む 親切にする 理由を説明する 礼儀正しく敬意を払う すぐにレビューを⾏う(1営業⽇以内) ⬇ チームの学習が促進されることに影響 2022/11/27
JJUG CCC 2022 Fall 12
継続的インテグレーション AWSを活⽤したSpring Bootの 継続的インテグレーションの ⼿法をおさらい 2022/11/27 JJUG CCC 2022 Fall
13
CIにおけるテスト戦略 E2E テスト 結合テスト 単体テスト • 上に⾏くほどコスト が⾼い • ビジネスロジックの
テストをコストが低 い単体テストに集中。 ⾃動テストを⾼速に 回す戦略を採⽤ 2022/11/27 JJUG CCC 2022 Fall 14
@SpringBootTest @SpringBootTestはコマンドラインから起動 可能な結合テスト @SpringBootTestはCIにおいてコストが⾼め。 DIで読み込むクラスが増えればテスト実⾏速度 にも影響 依存関係に従って必要なリソースの準備も必要 データベース クラウドリソース など
2022/11/27 JJUG CCC 2022 Fall 15
@ExtendWith(MockitoExtension.class) コストが低い単体テストを実⾏する際は、 Spring FrameworkのDIで⾏っている依存性の 注⼊をモック化する。 2022/11/27 JJUG CCC 2022 Fall
16
CIパイプラインの選択肢 Maven、Gradleでテストを実⾏出来る 今どきなCIを選択する。 2022/11/27 JJUG CCC 2022 Fall 17 AWS
CodePipeline
GitHub Actions 構成図 2022/11/27 JJUG CCC 2022 Fall 18
AWS CodePipeline 構成図 2022/11/27 JJUG CCC 2022 Fall 19
GitHub Actions コード workflow.ymlにCIの順番をコードで定義 2022/11/27 JJUG CCC 2022 Fall 20
AWS CodeBuild コード buildspec.ymlにCIの順番をコードで定義 2022/11/27 JJUG CCC 2022 Fall 21
継続的デプロイ AWSを活⽤したSpring Bootの 継続的デプロイの ⼿法をおさらい 2022/11/27 JJUG CCC 2022 Fall
22
GitFlowの活⽤ GitFlowをベースとし た考え⽅でシンプルに ブランチを運⽤ 特定ブランチへのコ ミットをトリガーにデ プロイパイプラインが 起動 2022/11/27 JJUG
CCC 2022 Fall 23
特定ブランチの 削除・直接コミットを禁⽌ 開発チーム内でコミットルールを強制 GitHub Protected Branch CodeCommit IAM Policy 2022/11/27
JJUG CCC 2022 Fall 24 IAM Policyによるリポジトリ削除禁⽌の例
Kubernetesの特有のデプロイ Spring Bootアプリケーションの最適化項⽬ 環境変数 サービス公開 機微情報 2022/11/27 JJUG CCC 2022
Fall 25
Spring Bootの環境変数 Twelve Factor App の思想に基づき、 Spring Bootアプリ ケーションの環境変数 を外出し
Kubernetesのマニ フェストファイルとし て管理 2022/11/27 JJUG CCC 2022 Fall 26
Spring Bootのサービス公開 Spring Bootの組み込 みTomcatがデフォル トで公開するポート 8080をKubernetes の30000ポートにマッ ピング。AWSのロー ドバランサーのリス
ナーに登録して公開 2022/11/27 JJUG CCC 2022 Fall 27
Spring Bootの機微情報 DBのパスワードなどの機微情報は暗号化 オープンソースのkubesecやArgoCD Vault Pluginを活⽤ 2022/11/27 JJUG CCC 2022
Fall 28
コンテナのビルド・プッシュ 継続的インテグレーションのビルドステップで ⽣成したSpring Bootの起動可能jarファイル をコンテナにビルドし、 Amazon ECRにプッ シュ 2022/11/27 JJUG
CCC 2022 Fall 29 Amazon Elastic Container Registry (Amazon ECR)
Spring BootのDockerfile ビルドしたJarファイルを利⽤することで 簡潔に記述可能 2022/11/27 JJUG CCC 2022 Fall 30
GitHub Actions コード AWSの認証にはOIDC認証の利⽤を推奨 2022/11/27 JJUG CCC 2022 Fall 31
AWS CodeBuild コード buildspec.ymlでECRへプッシュ 2022/11/27 JJUG CCC 2022 Fall 32
イメージタグの管理 コンテナのイメージタグはlatest運⽤を避ける プッシュ毎にGitのコミットIDを付与 2022/11/27 JJUG CCC 2022 Fall 33
GitOps Kustomizeを利⽤してマニフェストを共通化 ArgoCDがKustomizeのKubernetesマニフェス トを常時監視 2022/11/27 JJUG CCC 2022 Fall 34
GitHub Actions 構成図 2022/11/27 JJUG CCC 2022 Fall 35
AWS CodeBuild 構成図 2022/11/27 JJUG CCC 2022 Fall 36
セキュリティ(脆弱性管理) コンテナの脆弱性管理を AWSが提供するマネージド サービスで楽をする 2022/11/27 JJUG CCC 2022 Fall 37
脆弱性管理の選択肢の例 オープンソース trivy IaaS Amazon Inspector 2022/11/27 JJUG CCC 2022
Fall 38
Amazon Inspector V2 2022/11/27 JJUG CCC 2022 Fall 39
オブザーバビリティ (可観測性) 可観測性を⼊⼿できるAWSの マネージドサービスを利⽤して 運⽤を楽にする 2022/11/27 JJUG CCC 2022 Fall
40
可観測性を満たすための サービスの選択肢の例 オープンソース Grafana IaaS AWS Container Insights on EKS
SaaS Datadog Slack通知が可能なサービスを選択 2022/11/27 JJUG CCC 2022 Fall 41
Grafana 2022/11/27 JJUG CCC 2022 Fall 42
Container Insights on EKS 2022/11/27 JJUG CCC 2022 Fall 43
Spring Boot Actuator httpエンドポイント経由でアプリケーションの 様々な情報を取得可能 Prometheus⽤のメトリクスを取得可能 2022/11/27 JJUG CCC 2022
Fall 44
ロギング 便利なロギングコンソールを 活⽤して運⽤を楽にする 2022/11/27 JJUG CCC 2022 Fall 45
Kubernetesにおける ログ出⼒サービスの選択肢 IaaS CloudWatch Logs SaaS Datadog Logs Slack通知が可能なサービスを選択 2022/11/27
JJUG CCC 2022 Fall 46
CloudWatch Logs 2022/11/27 JJUG CCC 2022 Fall 47
CloudWatch Logs Insight ログ検索機能を拡張 2022/11/27 JJUG CCC 2022 Fall 48
Datadog Logs 2022/11/27 JJUG CCC 2022 Fall 49
Spring Boot Tomcat Log 標準出⼒設定 2022/11/27 JJUG CCC 2022 Fall
50
Spring Boot Logback設定 2022/11/27 JJUG CCC 2022 Fall 51 JSON形式で出⼒
Spring Boot Logback設定 2022/11/27 JJUG CCC 2022 Fall 52
まとめ Spring BootとKubernetesで 実現する今どきのDevOps⼊⾨の まとめ 2022/11/27 JJUG CCC 2022 Fall
53
CNでJavaを利⽤するのは容易 クラウドネイティブにおいてより⾼速に起動す るアプリケーションが求められるなか、Go、 Python、Typescriptなどで実装されたアプリ ケーションが台頭し始めたと実感 しかしながら、Spring Bootはクラウドネイ ティブに容易に追従でき、未だに多くの企業様 で利⽤されていると実感 2022/11/27
JJUG CCC 2022 Fall 54
当たり前のことを 当たり前に実践する コミュニケーションを促進する⽂化の形成 継続的インテグレーション 継続的デプロイ セキュリティ(脆弱性管理) オブザーバビリティ ロギング 当たり前のことをするために Spring
Bootの機能を最⼤限活⽤していく 2022/11/27 JJUG CCC 2022 Fall 55
ご清聴ありがとうございました。 2022/11/27 JJUG CCC 2022 Fall 56