1 スライド / サーバーレスなコンピュートリソースとしてGithub Actionsを考える
自己紹介
- 夏目祐樹 (ナツメユウタ)
- クラスメソッド株式会社
- 情報システムG 情報システム室
- 好きなサービス
- Lambda, S3, DynamoDB, SQS
- 近況
- FF14やらなきゃ (もう一月以上サボってる)
Github Actions
- Githubが提供するCI/CDのサービス
- 最近、CI/CD以外にもサーバーレスなコンピュートリソースとしても使用できるのではないかと思い始めた
Luciferous Public Layers
- 先日作成したもの
- PyPIで公開されているPythonモジュールのPublic Layerを作成し、ARNを公開する仕組みです
- 自分が何か作るたびに、よく使うモジュールとかあるので事前に用意しておきたかった
- どうせやるなら、一般公開しちゃえということで作成しました
- https://public-layers.luciferous.app
- ほぼ全リージョンを対象にデプロイしてる、はず
![[9005443501222147] スクリーンショット 2025-08-21 14.18.25](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/7631753b-e7cb-4189-9d5e-a37141dfa155.png)
![[9005443501159851] スクリーンショット 2025-08-21 14.19.26](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/4806909b-5fc2-4260-8295-481f962a6804.png)
![[9005443500457848] スクリーンショット 2025-08-21 14.31.09](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/148b4c8f-077e-440f-8aa0-e0c5e1943deb.png)
Github Actionsでやっていること
- 以下のことをGithub Actionsでやっています
- PyPIモジュールのインストール
- Lambda Layerの一覧取得
- 管理画面でPyPIモジュールを更新するとWebhookでGithub Actionsを動かす
- DynamoDB更新
- EventBridge API Destination
- Github Actions (workflow_dispatch)
![[9005443500171928] スクリーンショット 2025-08-21 14.35.44](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/77d227ac-cdb7-4e42-85b7-9e72e702a22b.png)
動かしてみる
requestsのモジュールを追加するrequests==2.32.5isArchitectureSplit: true
Webhookで起動できるのであれば、サーバーレスな処理系として使えるのではないか
(注意) 以後Github Actionsはホスティッドランナーを前提として話をしていきます
サーバーレスのコンピュートリソース
- AWS Lambda
- 安い、トリガー豊富、でも15分までしか動かせない
- Fargate
- コンテナイメージを動かせる
- 動かすのに色々リソース作らないといけない
- Glue Job
- Pythonとかも使える、良いお値段する
- (new) Github Actions
- リポジトリを作れば動かすことができる
- Publicリポジトリで標準的なランナーを使うなら無料
Github Actionsの制限 (1)
- ホスティッドランナーの制限
- タイムアウト:
- ジョブあたり6時間
- ワークフロー全体で35日間
- ファイルシステム: 20GB程度使える
/mntのPermissionを変更すると60GBほど増える- https://zenn.dev/pinto0309/scraps/c6413eb15a1b2a
Github Actionsnの制限 (2)
- ストレージ: 最低でも500MB
- 課金しているとストレージ制限は増える
- Github ActionsのログやArtifact
- 制限を超えると、1日あたり1GBごとに0.008ドル
- 有効な支払い方法を登録してある必要がある
Github Actionsのトリガー
- ドキュメント
- 30種類以上ある
- コンピュートリソースとしては次の二つが便利そう
workflow_dispatchschedule
トリガー: workflow_dispatch
- Github Actionsのワークフローを手動実行できるようにするトリガー
- Webの画面からも起動できる
- HeaderにAccess Tokenを添えてPOSTすれば外部から起動できる
- CI/CDでもとりあえず付けておいた方が便利なトリガー
トリガー: schedule
- 指定日時に実行させることができるトリガー
- Cron形式で指定
- つまりは定期バッチ処理に使える
- デフォルトブランチに置かれたワークフローファイルのものが実行される
- Publicリポジトリでは60日間アクティビティがないとワークフローが無効化される
- ボタンぽち、で再度有効化できる
Github Actionsのランナー (1)
- Linux, Windows, macOSを使用することができる
- Linuxで1分 = Windowsで2分 = macOS 10分、という換算
- 標準的なランナーの場合、Publicリポジトリなら無料で使える
- Linux 2コア, Windows 2コア, macOS 3コアまたは4コア (M1またはIntel)
- Privateリポジトリでも無料枠がある
- 個人アカウント: 2,000分/月
- Team/Enterprise Cloud: 3,000分/月
Github Actionsのランナー (2)
- より大きなランナーを使う場合は、Publicリポジトリでも有料になる
- Linux: 4, 8, 16, 32, 64, 96コア (96コアはIntelのみ)
- Windows: 4, 8, 16, 32, 64, 96コア (96コアはIntelのみ)
- macOS: 6コア (M1), 12コア (Intel)
- GPU搭載のより大きなランナー
- Linux: 4コア
- Windows: 4コア
まとめ
- Github Actionsをサーバーレスなコンピュートリソースとして使用することを考慮できる
- GPU搭載のランナーもあるので、生成AI向けの用途でも使うことができそう (未検証)
- AWS Lambda用にPyPIのモジュールをPublic Layerとして公開する仕組みを作ったので良かったら使って
おまけ
- Github Actionsのログのマスキングについて
- Secretsに登録しているものはマスキングされる
- ただ、連続した文字列だとマスキングされないことがある
- AWS Account IDをSecretに書いていてもARNでは見えたりした
- ただ、連続した文字列だとマスキングされないことがある
- 明示的にマスキングするように書くとよい
echo "::add-mask::sinofseven"- これより後では
sinofsevenという文字列がマスクされる - このechoの出力ではマスクされない
- これより後では
- Secretsに登録しているものはマスキングされる
コメント(0)