Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
セルフホストランナーとインターネットとの間の 転送量を削減している話 サイボウズ株式会社 ⽣産性向上チーム 佐藤 礼於 1
Slide 2
Slide 2 text
佐藤 礼於 ▌さとう れお、さとれお など ▌Twitter(𝕏?), GitHub: @defaultcf ▌Bluesky: @default.cf ▌2022年10⽉にサイボウズ⽣産性向上チームにジョイン 2
Slide 3
Slide 3 text
セルフホストランナー使ってますか︖ ▌ランナーから社内ネットワークにアクセスしたい ▌スペックをカスタマイズしたランナーを使いたい ▌プリインストールするソフトウェアを選びたい ▌GitHub Enterprise Server で GitHub Actions を使いたい ↓ ▌セルフホストランナーを⽴てて運⽤︕ 3
Slide 4
Slide 4 text
サイボウズ ⽣産性向上チームの運⽤するセルフホストランナー ▌philips-labs/terraform-aws-github-runner を使ってスケーラブ ルなセルフホストランナーを運⽤している ▌詳しくは… n philips-labs/terraform-aws-github-runner でオートスケール するセルフホストランナーの構築・運⽤ - Cybozu Inside Out | サ イボウズエンジニアのブログ 4
Slide 5
Slide 5 text
構成図(簡易版) 5
Slide 6
Slide 6 text
セルフホストランナーからインターネットへの転送量が多い︕ ▌EC2 インスタンスはプライベートサブネットにある ▌ランナーからインターネットとの通信には NAT ゲートウェイを通る ↓ ▌転送量が多いほどお⾦がかかって⼤変 6 これ︕
Slide 7
Slide 7 text
どこでお⾦がかかっているか調べてみた ▌VPC フローログに対して Amazon Athena を使って分析を⾏った 7 これ︕
Slide 8
Slide 8 text
8 INNER JOIN フローログから条件に 合致するログを得る Route53の名前解決ログ を⽤意
Slide 9
Slide 9 text
転送量を分析した結果… ▌主に⼤きいのは3つ n Apache Maven n Amazon Corretto n Docker Hub 9
Slide 10
Slide 10 text
転送量対策 ▌Apache Maven n ワークフローでキャッシュする ▌Amazon Corretto n ランナーにキャッシュを含める ▌Docker Hub n プロキシを使ってキャッシュする ↓ ▌各種キャッシュによる転送量削減を試みる 10
Slide 11
Slide 11 text
Apache Maven との転送量を削減 11
Slide 12
Slide 12 text
Apache Maven ▌Java のプロジェクト管理ツール ▌https://repo.maven.apache.org は公式の Maven のリポジトリ ▌開発チームはワークフロー内でビルドを⾛らせ、その際に依存関係のパッケージ を Maven からダウンロードしている ▌ワークフローでキャッシュを使っていないため、通信量を⾷っているんじゃないか︖ ▌確かめてみる 12
Slide 13
Slide 13 text
Maven のパッケージをキャッシュしてない︖ ▌org, リポジトリを横断して maven パッケージをインストールしている箇 所を検索 ▌キャッシュしていないところがいくつかあった ↓ ▌キャッシュするようにお願いしたら、通信量上位から maven が消えた︕ 13
Slide 14
Slide 14 text
Amazon Corretto との転送量を削減 14
Slide 15
Slide 15 text
Amazon Corretto ▌AWS が提供する OpenJDK ディストリビューション ▌Corretto 17 は 194 MB ある ▌開発チームはワークフロー内で actions/setup-java を使って Corretto をダウンロードする ▌ダウンロードの度に通信が発⽣し、お⾦がかかっている ▌キャッシュを検討する 15
Slide 16
Slide 16 text
actions/setup-java のキャッシュ機能を考える ▌https://github.com/actions/setup-java ▌Java の実⾏環境を⽤意してくれる GitHub Action ▌ダウンロードしたファイルをキャッシュして次回使う機能はある ▌ただ毎回作り直されるランナーなので、このキャッシュ機能を活かすこと ができない 16
Slide 17
Slide 17 text
どうやってキャッシュさせる︖ ▌AMI に予めキャッシュを含める n actions/setup-java がどのようにキャッシュを読むかを調べて、そこ にキャッシュを置いておく 17 ココ
Slide 18
Slide 18 text
キャッシュを置いた結果 18 キャッシュできるようになった︕
Slide 19
Slide 19 text
Docker Hub との転送量を削減 19
Slide 20
Slide 20 text
Docker Hub ▌Docker 社が運営するコンテナレジストリ ▌コンテナを使うジョブがあり、ジョブが⾛る度に Docker Hub からイメージ をダウンロードしている ▌これをキャッシュするようにする 20
Slide 21
Slide 21 text
どのように削減するか ▌① プライベートの Container Registry のキャッシュサーバーを⾃前で ⽤意する n メリット: ユーザーにコードを変更してもらわずに移⾏できる n デメリット: キャッシュサーバーの構築・運⽤が必要になる 21
Slide 22
Slide 22 text
どのように削減するか ▌② ECR の Pull Through Cache を使う n メリット: キャッシュサーバーの構築・運⽤が不要 n デメリット: ユーザーにコード中のイメージ名を変更してもらう必要があ る 22
Slide 23
Slide 23 text
転送量削減の進捗 ▌✅ Apache Maven n 開発チームに依頼し、ワークフローでキャッシュするようになった ▌✅ Amazon Corretto n AMI 側でキャッシュするようにした ▌🔲 Docker Hub n 検討段階 23
Slide 24
Slide 24 text
転送量削減に成功︕ ▌Maven と Corretto が上位から消えた︕ 24
Slide 25
Slide 25 text
今後の課題 ▌新しい Corretto のバージョンが増えたら⾃動でキャッシュする n 現状はハードコーディングしている n 最新のバージョンをキャッシュに⾃動で加えたい ▌Docker Hub のキャッシュを導⼊する n それぞれのメリット・デメリットを検討する n 実際に導⼊したい 25
Slide 26
Slide 26 text
まとめ ▌VPC フローログを分析してランナーからインターネットへの転送量を分析し た ▌対策を検討して⼀部実施した n Apache Maven のパッケージをキャッシュするようにした n actions/setup-java のキャッシュ機能を活⽤して Corretto をラン ナーに予め⼊れるようにした n Docker Hub からのイメージ転送量削減について検討した 26