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
x-blood
December 22, 2022
Programming
1
850
Spring BootとKubernetesで実現する今どきのDevOps入門
x-blood
December 22, 2022
Tweet
Share
More Decks by x-blood
See All by x-blood
re:Inventで現地参加したコンテナ関連セッションを振り返る
xblood
0
330
Amazon EKS Pod Identityで何が変わるのか
xblood
0
430
Lizさんに届け!AWS Jr. ChampionとTop Engineerが書籍コンテナセキュリティを読んで感じたこと
xblood
0
1.4k
サーバーレスJavaパフォーマンス選手権 at AWS Dev Day 2023 Tokyo
xblood
2
1.3k
サーバーレスJavaの今 ~SnapStartとWeb Adapterを寄せて~
xblood
4
3k
Finch OSSコードリーディング
xblood
0
1.2k
ECS Service Connectでマイクロサービスを繋いでみた
xblood
0
2.3k
AWS Glue Git統合のPoCでの活用
xblood
0
160
Amazon EKSとGitOpsでデプロイを自動化させるDevOps実践セミナー
xblood
0
1.1k
Other Decks in Programming
See All in Programming
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Vapor Revolution
kazupon
1
180
デザインパターンで理解するLLMエージェントの作り方 / How to develop an LLM agent using agentic design patterns
rkaga
3
370
Remix on Hono on Cloudflare Workers
yusukebe
1
310
React CompilerとFine Grained Reactivityと宣言的UIのこれから / The next chapter of declarative UI
ssssota
1
110
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
260
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.2k
React への依存を最小にするフロントエンド設計
takonda
12
3.4k
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
RailsConf 2023
tenderlove
29
900
Agile that works and the tools we love
rasmusluckow
327
21k
A Philosophy of Restraint
colly
203
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Faster Mobile Websites
deanohume
305
30k
Designing for humans not robots
tammielis
250
25k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
120
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
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