$30 off During Our Annual Pro Sale. View Details »

セルフホストランナーとインターネットとの間の転送量を削減している話

defaultcf
September 24, 2023

 セルフホストランナーとインターネットとの間の転送量を削減している話

2023年9月21日 GitHub Actions Meetup Tokyo #2 にて発表

defaultcf

September 24, 2023
Tweet

More Decks by defaultcf

Other Decks in Technology

Transcript

  1. セルフホストランナーとインターネットとの間の
    転送量を削減している話
    サイボウズ株式会社 ⽣産性向上チーム
    佐藤 礼於
    1

    View Slide

  2. 佐藤 礼於
    ▌さとう れお、さとれお など
    ▌Twitter(𝕏?), GitHub: @defaultcf
    ▌Bluesky: @default.cf
    ▌2022年10⽉にサイボウズ⽣産性向上チームにジョイン
    2

    View Slide

  3. セルフホストランナー使ってますか︖
    ▌ランナーから社内ネットワークにアクセスしたい
    ▌スペックをカスタマイズしたランナーを使いたい
    ▌プリインストールするソフトウェアを選びたい
    ▌GitHub Enterprise Server で GitHub Actions を使いたい

    ▌セルフホストランナーを⽴てて運⽤︕
    3

    View Slide

  4. サイボウズ ⽣産性向上チームの運⽤するセルフホストランナー
    ▌philips-labs/terraform-aws-github-runner を使ってスケーラブ
    ルなセルフホストランナーを運⽤している
    ▌詳しくは…
    n philips-labs/terraform-aws-github-runner でオートスケール
    するセルフホストランナーの構築・運⽤ - Cybozu Inside Out | サ
    イボウズエンジニアのブログ
    4

    View Slide

  5. 構成図(簡易版)
    5

    View Slide

  6. セルフホストランナーからインターネットへの転送量が多い︕
    ▌EC2 インスタンスはプライベートサブネットにある
    ▌ランナーからインターネットとの通信には NAT ゲートウェイを通る

    ▌転送量が多いほどお⾦がかかって⼤変
    6
    これ︕

    View Slide

  7. どこでお⾦がかかっているか調べてみた
    ▌VPC フローログに対して Amazon Athena を使って分析を⾏った
    7
    これ︕

    View Slide

  8. 8
    INNER JOIN
    フローログから条件に
    合致するログを得る
    Route53の名前解決ログ
    を⽤意

    View Slide

  9. 転送量を分析した結果…
    ▌主に⼤きいのは3つ
    n Apache Maven
    n Amazon Corretto
    n Docker Hub
    9

    View Slide

  10. 転送量対策
    ▌Apache Maven
    n ワークフローでキャッシュする
    ▌Amazon Corretto
    n ランナーにキャッシュを含める
    ▌Docker Hub
    n プロキシを使ってキャッシュする

    ▌各種キャッシュによる転送量削減を試みる 10

    View Slide

  11. Apache Maven との転送量を削減
    11

    View Slide

  12. Apache Maven
    ▌Java のプロジェクト管理ツール
    ▌https://repo.maven.apache.org は公式の Maven のリポジトリ
    ▌開発チームはワークフロー内でビルドを⾛らせ、その際に依存関係のパッケージ
    を Maven からダウンロードしている
    ▌ワークフローでキャッシュを使っていないため、通信量を⾷っているんじゃないか︖
    ▌確かめてみる
    12

    View Slide

  13. Maven のパッケージをキャッシュしてない︖
    ▌org, リポジトリを横断して maven パッケージをインストールしている箇
    所を検索
    ▌キャッシュしていないところがいくつかあった

    ▌キャッシュするようにお願いしたら、通信量上位から maven が消えた︕
    13

    View Slide

  14. Amazon Corretto との転送量を削減
    14

    View Slide

  15. Amazon Corretto
    ▌AWS が提供する OpenJDK ディストリビューション
    ▌Corretto 17 は 194 MB ある
    ▌開発チームはワークフロー内で actions/setup-java を使って
    Corretto をダウンロードする
    ▌ダウンロードの度に通信が発⽣し、お⾦がかかっている
    ▌キャッシュを検討する 15

    View Slide

  16. actions/setup-java のキャッシュ機能を考える
    ▌https://github.com/actions/setup-java
    ▌Java の実⾏環境を⽤意してくれる GitHub Action
    ▌ダウンロードしたファイルをキャッシュして次回使う機能はある
    ▌ただ毎回作り直されるランナーなので、このキャッシュ機能を活かすこと
    ができない
    16

    View Slide

  17. どうやってキャッシュさせる︖
    ▌AMI に予めキャッシュを含める
    n actions/setup-java がどのようにキャッシュを読むかを調べて、そこ
    にキャッシュを置いておく
    17
    ココ

    View Slide

  18. キャッシュを置いた結果
    18
    キャッシュできるようになった︕

    View Slide

  19. Docker Hub との転送量を削減
    19

    View Slide

  20. Docker Hub
    ▌Docker 社が運営するコンテナレジストリ
    ▌コンテナを使うジョブがあり、ジョブが⾛る度に Docker Hub からイメージ
    をダウンロードしている
    ▌これをキャッシュするようにする
    20

    View Slide

  21. どのように削減するか
    ▌① プライベートの Container Registry のキャッシュサーバーを⾃前で
    ⽤意する
    n メリット: ユーザーにコードを変更してもらわずに移⾏できる
    n デメリット: キャッシュサーバーの構築・運⽤が必要になる
    21

    View Slide

  22. どのように削減するか
    ▌② ECR の Pull Through Cache を使う
    n メリット: キャッシュサーバーの構築・運⽤が不要
    n デメリット: ユーザーにコード中のイメージ名を変更してもらう必要があ

    22

    View Slide

  23. 転送量削減の進捗
    ▌✅ Apache Maven
    n 開発チームに依頼し、ワークフローでキャッシュするようになった
    ▌✅ Amazon Corretto
    n AMI 側でキャッシュするようにした
    ▌🔲 Docker Hub
    n 検討段階
    23

    View Slide

  24. 転送量削減に成功︕
    ▌Maven と Corretto が上位から消えた︕
    24

    View Slide

  25. 今後の課題
    ▌新しい Corretto のバージョンが増えたら⾃動でキャッシュする
    n 現状はハードコーディングしている
    n 最新のバージョンをキャッシュに⾃動で加えたい
    ▌Docker Hub のキャッシュを導⼊する
    n それぞれのメリット・デメリットを検討する
    n 実際に導⼊したい
    25

    View Slide

  26. まとめ
    ▌VPC フローログを分析してランナーからインターネットへの転送量を分析し

    ▌対策を検討して⼀部実施した
    n Apache Maven のパッケージをキャッシュするようにした
    n actions/setup-java のキャッシュ機能を活⽤して Corretto をラン
    ナーに予め⼊れるようにした
    n Docker Hub からのイメージ転送量削減について検討した
    26

    View Slide