Share
Embed
Transcript
43 slides
-
6 話すこと 話さないこと • CDKライブラリのバージョンアップ • LambdaのRuntimeのバージョンアップ ※ TypeScriptを例にして説明します •
Stack、 Construtをどう使い分けるか等のCDKの設計の話 -
9 CONFIDENTIAL - © 2022 CoDMON Inc. 9 CDKのメリット 馴染みの言語でリソースが構築できる
表現の幅が広くカスタマイズ性が高い リソース 構築時 のメリットが大きい 引用:「使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説 」 https://aws.amazon.com/jp/builders-flash/202309/awsgeek-aws-cdk/ -
10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 CDK導入後の課題 •
構築時のメリットが大きい分、運用に関して後回しにされがち ◦ ライブラリのバージョンアップはその典型 ▪ CDKのライブラリの更新は約週1ペース この更新作業を楽にするのが今日のテーマ Renovate -
12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 Renovateとは?
Renovateの基本情報と導入方法 npm、pip、Docker等の依存関係を検知して 更新PRを自動作成する OSSツール 類似サービス: • 自動マージ可能で条件などを細かく設定可能 • 対応ライブラリ数が多い (Renovate:約90 Dependabot:約20) • ライブラリバージョンアップ PRのグループ化が可能 引用:「Renovate > Bot comparison」 https://docs.renovatebot.com/bot-comparison/#dependabot-gitlabdependabot →Renovateはカスタマイズの幅が広い -
14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 導入方法
Renovateの基本情報と導入方法 基本的には Github Appとして使用 CLI , Docker Image , github actionsなどでも可能 引用:「Renovate > Running Renovate」 https://docs.renovatebot.com/getting-started/running/ Appを使うリポジトリを選択 -
15 CONFIDENTIAL - © 2022 CoDMON Inc. 15 導入方法
Renovateの基本情報と導入方法 Renovate Appインストール後 初期設定PRが自動作成 renovate.json が以下設定で新規作成される 初期設定PRをマージ後に RenovateによってPRが作成され始める -
16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 Renovate.jsonの設定
Renovateの基本情報と導入方法 • セマンティックバージョンごと • パッケージごと で細かく設定可能 複数の設定をまとめたプリセットも利用可能 代表的な設定項目 prConcurrentLimit (default:10) - 1度にopenできるPRの最大数 prHourlyLimit (default:2) - 1時間にRenovate Appが作成するPRの最大数 automerge (default:false) - オートマージするかどうか 引用:「Renovate > Configuration Options」 https://docs.renovatebot.com/configuration-options/#configuration-options -
17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 押さえておきたいプリセット config:recommended
config:recommended の中身 Renovateの基本情報と導入方法 PRマージ状況を確認できる ISSUEの作成 内容に応じて PRタイトルにプレフィックスを 自動的に付与 node_modules, bower_components, vendor, test のディレクトリを対象から除外 内容に応じて PRタイトルにプレフィックスを 自動的に付与 PRを良い具合にグループ化 ※この設定で不十分な時は自前でグループ化 -
18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 押さえておきたいプリセット :automergeMinor
:automergeMinor の中身 Renovateの基本情報と導入方法 package.lock.jsonなどのlock ファイルを定期的に再作成 (defaultは週1) PRを良い具合にグループ化 ※この設定で不十分な時は自前でグループ化 PRを良い具合にグループ化 ※この設定で不十分な時は自前でグループ化 メジャーバージョン以外をオートマージ -
20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 スナップショットテストとは?
スナップショットテストの併用で安全にライブラリ更新 引用:「AWS Cloud Development kit (CDK) Advanced #1 「AWS CDKにおける開発とテスト」 https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Advanced-1-Testing_1227_v1.pdf -
21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 スナップショットテストとは?
スナップショットテストの併用で安全にライブラリ更新 引用:「AWS Cloud Development kit (CDK) Advanced #1 「AWS CDKにおける開発とテスト」 https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Advanced-1-Testing_1227_v1.pdf -
22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 事前準備1
スナップショットテストの併用で安全にライブラリ更新 パッチ、マイナーバージョン メジャーバージョン -
23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 事前準備2
スナップショットテストの併用で安全にライブラリ更新 スナップショットテストを PR単位で実行できるようにする -
24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 スナップショットテストを併用した安全な更新 スナップショットテストの併用で安全にライブラリ更新
スナップショットテストを PR単位で実行できるようにする ステータスチェックが通らなければ RenovateはPRをオートマージしない -
25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 スナップショットテストを併用した安全な更新 スナップショットテストの併用で安全にライブラリ更新
スナップショットテストを PR単位で実行できるようにする ステータスチェックが通らなければ RenovateはPRをオートマージしない デフォルト設定の ignoreTests: false による挙動 -
26 CONFIDENTIAL - © 2022 CoDMON Inc. 26 実際の動作を確認
スナップショットテストの併用で安全にライブラリ更新 ライブラリ更新によりスナップショットに差分発生 -
27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 実際の動作を確認
スナップショットテストの併用で安全にライブラリ更新 スナップショットを更新しコミット PRにRenovate App以外による変 更が含まれている場合 自動マージを実行しない 動作確認した上で 自分のタイミングでマージ -
28 CONFIDENTIAL - © 2022 CoDMON Inc. 28 応用:NodeLambdaのバージョン更新
スナップショットテストの併用で安全にライブラリ更新 事前準備 Node.jsのバージョン指定に determineLatestNodeRuntime() を使用 →CDKのバージョンリリース時の リージョンの最新のランタイム が選択される • v2.146.0: Node.js 20 , v2.204.0:Node.js 22 -
29 CONFIDENTIAL - © 2022 CoDMON Inc. 29 snapshot更新 &
動作確認完了次第手動でマージ 応用:NodeLambdaのバージョン更新の流れ スナップショットテストの併用で安全にライブラリ更新 ライブラリバージョンアップと共に ランタイムもバージョンアップ -
31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 応用:NodeLambdaのバージョン更新
スナップショットテストの併用で安全にライブラリ更新 事前準備 Node.jsのバージョン指定に determineLatestNodeRuntime() を使用 →CDKのバージョンリリース時のリージョンの最新のランタイム が選択される • v2.146.0: Node.js 20 , v2.204.0:Node.js 22 NODEJS_LATEST で良いのでは??? -
32 CONFIDENTIAL - © 2022 CoDMON Inc. 32 応用:NODEJS_LATESTの挙動
スナップショットテストの併用で安全にライブラリ更新 NODEJS_LATEST 「全リージョンで利用可能なバージョンのうちの最新」 2025年7月現在、東京リージョンでも未だ nodejs18が選択される 引用:「aws-cdk-lib: NODEJS_LATEST still points to nodejs18.x」 https://github.com/aws/aws-cdk/issues/28125 -
34 CONFIDENTIAL - © 2022 CoDMON Inc. 34 おまけ:Jest→Vitestに移行しテストを高速化 テストが遅いとメンテナンスされなくなりがち
これを回避すべく Vitestを用いてスナップショットテストを高速化 信頼性の高いスナップショットの維持が必須 -
35 CONFIDENTIAL - © 2022 CoDMON Inc. 35 おまけ:Jest→Vitestに移行しテストを高速化 テストが遅いとメンテナンスされなくなりがち
これを回避すべく Vitestを用いてスナップショットテストを高速化 信頼性の高いスナップショットの維持が必須 割愛 -
39 CONFIDENTIAL - © 2022 CoDMON Inc. 39 まとめ •
Renovateで依存関係の更新を自動化 • スナップショットテストとの組み合わせで安全にバージョンアップ ◦ determineLatestRuntime()でLambdaランタイムのバージョンアップ も追従 • Vitestでのテスト高速化により信頼性の高いスナップショットテストを保つ