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
セルフホストランナーとインターネットとの間の転送量を削減している話
Search
defaultcf
September 24, 2023
Technology
0
420
セルフホストランナーとインターネットとの間の転送量を削減している話
2023年9月21日 GitHub Actions Meetup Tokyo #2 にて発表
defaultcf
September 24, 2023
Tweet
Share
More Decks by defaultcf
See All by defaultcf
How to write TeX with several people
defaultcf
0
320
How to manage your password
defaultcf
0
330
Other Decks in Technology
See All in Technology
エンジニアの健康管理術 / Engineer Health Management Techniques
y_sone
8
6.7k
MLflowはどのようにLLMOpsの課題を解決するのか
taka_aki
0
170
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
160
いまから始めるAWS CDK 〜モダンなインフラ構築入門〜/iac-night-cdk-introduction
tomoki10
0
130
スクラムというコンフォートゾーンから抜け出そう!プロジェクト全体に目を向けるインセプションデッキ / Inception Deck for seeing the whole project
takaking22
4
350
Oracle Cloud Infrastructure IaaS 新機能アップデート 2024/12 - 2025/02
oracle4engineer
PRO
0
110
Real World Nix CI/CD編
asa1984
1
150
【Forkwell】「正しく」失敗できるチームを作る──現場のリーダーのための恐怖と不安を乗り越える技術 - FL#83 / A team that can fail correctly by forkwell
i35_267
2
180
アウトカムを最大化させるプロダクトエンジニアの動き
hacomono
PRO
0
160
アジリティを高めるテストマネジメント #QiitaQualityForward
makky_tyuyan
1
550
AI-Driven-Development-20250310
yuhattor
3
330
生成AI×財務経理:PoCで挑むSlack AI Bot開発と現場巻き込みのリアル
pohdccoe
1
880
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
69
10k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Unsuck your backbone
ammeep
669
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
A Philosophy of Restraint
colly
203
16k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Statistics for Hackers
jakevdp
797
220k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Building an army of robots
kneath
303
45k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Transcript
セルフホストランナーとインターネットとの間の 転送量を削減している話 サイボウズ株式会社 ⽣産性向上チーム 佐藤 礼於 1
佐藤 礼於 ▌さとう れお、さとれお など ▌Twitter(𝕏?), GitHub: @defaultcf ▌Bluesky: @default.cf
▌2022年10⽉にサイボウズ⽣産性向上チームにジョイン 2
セルフホストランナー使ってますか︖ ▌ランナーから社内ネットワークにアクセスしたい ▌スペックをカスタマイズしたランナーを使いたい ▌プリインストールするソフトウェアを選びたい ▌GitHub Enterprise Server で GitHub Actions
を使いたい ↓ ▌セルフホストランナーを⽴てて運⽤︕ 3
サイボウズ ⽣産性向上チームの運⽤するセルフホストランナー ▌philips-labs/terraform-aws-github-runner を使ってスケーラブ ルなセルフホストランナーを運⽤している ▌詳しくは… n philips-labs/terraform-aws-github-runner でオートスケール するセルフホストランナーの構築・運⽤
- Cybozu Inside Out | サ イボウズエンジニアのブログ 4
構成図(簡易版) 5
セルフホストランナーからインターネットへの転送量が多い︕ ▌EC2 インスタンスはプライベートサブネットにある ▌ランナーからインターネットとの通信には NAT ゲートウェイを通る ↓ ▌転送量が多いほどお⾦がかかって⼤変 6 これ︕
どこでお⾦がかかっているか調べてみた ▌VPC フローログに対して Amazon Athena を使って分析を⾏った 7 これ︕
8 INNER JOIN フローログから条件に 合致するログを得る Route53の名前解決ログ を⽤意
転送量を分析した結果… ▌主に⼤きいのは3つ n Apache Maven n Amazon Corretto n Docker
Hub 9
転送量対策 ▌Apache Maven n ワークフローでキャッシュする ▌Amazon Corretto n ランナーにキャッシュを含める ▌Docker
Hub n プロキシを使ってキャッシュする ↓ ▌各種キャッシュによる転送量削減を試みる 10
Apache Maven との転送量を削減 11
Apache Maven ▌Java のプロジェクト管理ツール ▌https://repo.maven.apache.org は公式の Maven のリポジトリ ▌開発チームはワークフロー内でビルドを⾛らせ、その際に依存関係のパッケージ を
Maven からダウンロードしている ▌ワークフローでキャッシュを使っていないため、通信量を⾷っているんじゃないか︖ ▌確かめてみる 12
Maven のパッケージをキャッシュしてない︖ ▌org, リポジトリを横断して maven パッケージをインストールしている箇 所を検索 ▌キャッシュしていないところがいくつかあった ↓ ▌キャッシュするようにお願いしたら、通信量上位から
maven が消えた︕ 13
Amazon Corretto との転送量を削減 14
Amazon Corretto ▌AWS が提供する OpenJDK ディストリビューション ▌Corretto 17 は 194
MB ある ▌開発チームはワークフロー内で actions/setup-java を使って Corretto をダウンロードする ▌ダウンロードの度に通信が発⽣し、お⾦がかかっている ▌キャッシュを検討する 15
actions/setup-java のキャッシュ機能を考える ▌https://github.com/actions/setup-java ▌Java の実⾏環境を⽤意してくれる GitHub Action ▌ダウンロードしたファイルをキャッシュして次回使う機能はある ▌ただ毎回作り直されるランナーなので、このキャッシュ機能を活かすこと ができない
16
どうやってキャッシュさせる︖ ▌AMI に予めキャッシュを含める n actions/setup-java がどのようにキャッシュを読むかを調べて、そこ にキャッシュを置いておく 17 ココ
キャッシュを置いた結果 18 キャッシュできるようになった︕
Docker Hub との転送量を削減 19
Docker Hub ▌Docker 社が運営するコンテナレジストリ ▌コンテナを使うジョブがあり、ジョブが⾛る度に Docker Hub からイメージ をダウンロードしている ▌これをキャッシュするようにする
20
どのように削減するか ▌① プライベートの Container Registry のキャッシュサーバーを⾃前で ⽤意する n メリット: ユーザーにコードを変更してもらわずに移⾏できる
n デメリット: キャッシュサーバーの構築・運⽤が必要になる 21
どのように削減するか ▌② ECR の Pull Through Cache を使う n メリット:
キャッシュサーバーの構築・運⽤が不要 n デメリット: ユーザーにコード中のイメージ名を変更してもらう必要があ る 22
転送量削減の進捗 ▌✅ Apache Maven n 開発チームに依頼し、ワークフローでキャッシュするようになった ▌✅ Amazon Corretto n
AMI 側でキャッシュするようにした ▌🔲 Docker Hub n 検討段階 23
転送量削減に成功︕ ▌Maven と Corretto が上位から消えた︕ 24
今後の課題 ▌新しい Corretto のバージョンが増えたら⾃動でキャッシュする n 現状はハードコーディングしている n 最新のバージョンをキャッシュに⾃動で加えたい ▌Docker Hub
のキャッシュを導⼊する n それぞれのメリット・デメリットを検討する n 実際に導⼊したい 25
まとめ ▌VPC フローログを分析してランナーからインターネットへの転送量を分析し た ▌対策を検討して⼀部実施した n Apache Maven のパッケージをキャッシュするようにした n
actions/setup-java のキャッシュ機能を活⽤して Corretto をラン ナーに予め⼊れるようにした n Docker Hub からのイメージ転送量削減について検討した 26