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
脆弱性対応を支える技術/20221127_JJUG-CCC-2022-Fall
Search
skaji18
November 27, 2022
Technology
2
1.2k
脆弱性対応を支える技術/20221127_JJUG-CCC-2022-Fall
JJUG CCC 2022 Fallの発表資料
です。
関連資料
・
変わりゆくAPI連携仕様との付き合い方
・
新規プロダクトの開発速度と品質の両立を支える自動テスト
skaji18
November 27, 2022
Tweet
Share
More Decks by skaji18
See All by skaji18
Vue.js + Firebase のプロジェクトに自動テストを導入した話/20220216_frontend-lt-vol6
skaji18
1
1.2k
走り出したプロジェクトが歩みを止めるまで/20210818 OSS LT vol2
skaji18
0
400
Other Decks in Technology
See All in Technology
How Community Opened Global Doors
hiroramos4
PRO
1
120
Navigation3でViewModelにデータを渡す方法
mikanichinose
0
220
Wasm元年
askua
0
140
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
260
第9回情シス転職ミートアップ_テックタッチ株式会社
forester3003
0
230
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
16
5.5k
エンジニア向け技術スタック情報
kauche
1
250
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
150
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
260
Witchcraft for Memory
pocke
1
310
A2Aのクライアントを自作する
rynsuke
1
170
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Building an army of robots
kneath
306
45k
How GitHub (no longer) Works
holman
314
140k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
Visualization
eitanlees
146
16k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Transcript
©2022 RAKUS Co., Ltd. 脆弱性対応を支える技術 JJUG CCC 2022 Fall -
2022.11.27 梶紳之介
自己紹介 • 梶紳之介 • 株式会社ラクス • 人事労務管理サービス の開発 • Java、Vue.js、(PHP)
2 @s_kaji_18
脆弱性対応、うまくいってますか? 3
例えばこんな課題、ありませんか? 4
やらなきゃいけないけど... • 自動テストがなく、手動テストが必要 ◦ 😇 品質担保に時間がかかる ◦ 😇 テストにかける人員/リソースを用意できない •
リリースにサービス停止が必要 ◦ 😇 顧客影響が発生するため、ビジネスサイドから敬遠される 5 特に 緊急リリース の場合
今日お話すること 6 私達の開発チームが実践している、脆弱性対応をより早く、より安全 にリリースするためのポイントをご紹介します キーワード • 自動テスト • 無停止リリース
目次 • 前提 ◦ 技術スタック概要 • 脆弱性対応のポイント解説 ◦ バージョンアップ環境の準備 ◦
テストによる品質担保 ◦ リリース ◦ メンバーのローカル環境更新 • まとめ 7
8 技術スタック概要 ※今日お話する内容に関連する技術のみ抜粋 • アプリケーション構成 ◦ Java ◦ Spring Boot
• 実行環境 ◦ コンテナ(Docker) on AWS
過去事例に沿ってポイント解説 9 ※事例として Javaのアップデート を扱います
• バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦ •
メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース 10
11 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
12 バージョンアップ環境の準備 Java を脆弱性対応バージョンにアップデートする • 前提: コンテナ(Docker)を採用 • → Dockerfile
を1行更新するだけ - FROM amazoncorretto:17.0.3-alpine3.15 + FROM amazoncorretto:17.0.4-alpine3.15 ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
補足: 依存ライブラリの更新 • 前提: Javaプログラムの依存関係は Gradle で管理 • build.gradle の依存関係を更新するだけ
13 … plugins { - id 'org.springframework.boot' version '2.7.3' + id 'org.springframework.boot' version '2.7.4' } …
14 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
自動テスト で品質担保 テストによる品質担保 15 テスト観点・指標 カバレッジ リグレッション テスト手法 ユニットテスト E2Eテスト
Java プログラムのメソッドレベルの入出力が期待どおりの動作をし ているかを確認する • JUnit5 を採用 • カバレッジは 約85% ◦
サービス開発当初から「テストは書くことが当たり前」の文化 ◦ 特にユニットテストは開発ガイドラインとして定めている ユニットテスト 16
17 ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ ◦ • 外部API連携
ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ 作成したPDFのレイアウトが崩れていないか確認する ◦ Apache PDFBox で画像変換して新旧比較
• 外部API連携 ◦ 想定しているフロー/データのままで連携できるか確認する ◦ 連携先でバッチ処理される(15分前後)までポーリングする 18
ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ 作成したPDFのレイアウトが崩れていないか確認する ◦ Apache PDFBox で画像変換して新旧比較
• 外部API連携 ◦ 想定しているフロー/データのままで連携できるか確認する ◦ 連携先でバッチ処理される(15分前後)までポーリングする 19 関連資料: 変わりゆくAPI連携仕様との付き合い方 https://speakerdeck.com/nologyance/good-practice-of-using-api?slide=23
E2Eテスト ユーザと同じようにブラウザを操作し、システム全体を通して期待ど おりの動作をしているかを確認する • Puppeteer を採用 • ハッピーパス(正常系の代表操作) の動作を担保 20
関連資料: 新規プロダクトの開発速度と品質の両立を支える自動テスト https://speakerdeck.com/noriharu3/automation-testing-supports-both-development-speed-and-quality-of-new-product?slide=23
21 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
リリースモジュールの作成 • Gitのタグを打つと自動で作成する ◦ Java プログラムのビルド ◦ Docker イメージのビルド 〜
プッシュ ※継続的デプロイ には対応していない 22
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 23
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 24
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 • 無停止 = 顧客への影響が出ない ◦ 顧客への事前周知が不要 25
リリース • イメージをもとにコンテナをきどうするだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 • 無停止 = 顧客への影響が出ない ◦ 顧客への事前周知が不要 → 開発/インフラチームの準備が整い次第リリースできる!! 26
27 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
Java のバージョン管理ツール(SDKMAN!) を採用 • バージョンアップ担当者 ◦ Git リポジトリの設定ファイル(.sdkmanrc)を更新 • メンバー
◦ SDKMAN! から Java のインストールを促されるので、そのコマンドを実 行するだけ 28 メンバーのローカル環境更新 # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below - java=17.0.3-amzn + java=17.0.4-amzn
まとめ 29
まとめ • コンテナやパッケージ管理ツールを採用 ◦ バージョンアップ作業が簡単 ◦ 本番環境への反映もコンテナを置き換えるだけ • 自動テストで品質担保 ◦
品質担保にかかるリソースを削減 ◦ テスト品質が実施者に依存せず、毎回一定水準を担保できる • 無停止でリリース ◦ 顧客影響が無いため、ビジネスサイドから理解を得やすい 30