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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
skaji18
November 27, 2022
Technology
1.4k
2
Share
脆弱性対応を支える技術/20221127_JJUG-CCC-2022-Fall
JJUG CCC 2022 Fallの発表資料
です。
関連資料
・
変わりゆくAPI連携仕様との付き合い方
・
新規プロダクトの開発速度と品質の両立を支える自動テスト
skaji18
November 27, 2022
More Decks by skaji18
See All by skaji18
Vue.js + Firebase のプロジェクトに自動テストを導入した話/20220216_frontend-lt-vol6
skaji18
1
1.3k
走り出したプロジェクトが歩みを止めるまで/20210818 OSS LT vol2
skaji18
0
410
Other Decks in Technology
See All in Technology
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
1
200
トイルを超えたCREは何屋になるのか
bengo4com
0
120
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
130
スケーリングを封じられたEC2を救いたい
senseofunity129
0
130
JSTQB Expert Levelシラバス「テストマネジメント」日本語版のご紹介
ymty
0
100
非同期・イベント駆動処理の分散トレーシングの繋げ方
ichikawaken
1
250
契約書からの情報抽出を行うLLMのスループットを、バッチ処理を用いて最大40%改善した話
sansantech
PRO
3
330
【Oracle Cloud ウェビナー】データ主権はクラウドで守れるのか?NTTデータ様のOracle Alloyで実現するソブリン対応クラウドの最適解
oracle4engineer
PRO
3
130
遊びで始めたNew Relic MCP、気づいたらChatOpsなオブザーバビリティボットができてました/From New Relic MCP to a ChatOps Observability Bot
aeonpeople
1
150
自分をひらくと次のチャレンジの敷居が下がる
sudoakiy
5
1.5k
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
3
380
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
4
1.3k
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
940
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
500
A Modern Web Designer's Workflow
chriscoyier
698
190k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
320
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How to Talk to Developers About Accessibility
jct
2
170
A Tale of Four Properties
chriscoyier
163
24k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
450
RailsConf 2023
tenderlove
30
1.4k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
160
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