#5 - 2022.10.20
GitHub Actions でランナーのリソースを増強できる Larger runners がパブリックベータになりました
共有担当: @miyajan
- これまで GitHub が提供する Linux と Windows のランナーは CPU 2 コア、メモリ 7GB でした
- Larger runners では CPU が最大 64 コア、メモリが最大 256 GB までリソースを増強できます
- enterprise もしくは organization レベルでランナーグループを作成し、Larger runners の利用をコントロールできます
- どの organization、どのリポジトリが利用可能かアクセスコントロールが可能です
- 料金
- 使用するリソースの量に応じて利用料金も増えます
- 通常のランナーはパブリックリポジトリは無料になりますが、Larger runners はパブリックリポジトリでも無料になりません
- パブリックリポジトリで Larger runners を利用すると、外部からのコミットによって想定外の利用料金になる可能性があるので気をつけましょう
- 通常のランナーはライセンスの種類に応じて無料枠が存在しますが、Larger runners は無料枠の対象になりません
- パブリックベータ
- 利用するにはサインアップページから申し込み、waitlist に登録する必要があります
- GitHub Team か GitHub Enterprise Cloud プランの organization のみ利用可能です
- GitHub Enterprise Cloud の場合、ランナーに固定の IP レンジのアドレスが割り当てられるようにする機能も追加されてます
- これまで大量のリソースが必要なジョブを実行するには、ジョブを分割して並列実行するか、AWS/GCP など外部リソースに処理を持っていくかするしかなかったですが、GitHub Actions の単独のランナーで実現できる選択肢が増え、嬉しい場面がありそうです
GitHub Actions の GITHUB_TOKEN で workflow_dispatch と repository_dispatch イベントのワークフローを呼び出せるようになりました
共有担当: @miyajan
- GitHub Actions のワークフロー実行時に自動で
GITHUB_TOKEN
というシークレットが割り当てられ、ワークフロー内で GitHub へアクセスするときに利用できます- 例えば、actions/checkout アクションはデフォルトでこの
GITHUB_TOKEN
を使って認証してリポジトリをチェックアウトします
- 例えば、actions/checkout アクションはデフォルトでこの
- これまでは、
GITHUB_TOKEN
で GitHub のイベントを発生させる操作を行ったときに、別ワークフローをトリガーしないようになっていました- 例えば、
GITHUB_TOKEN
を使ってリポジトリにコミットを push しても、GitHub Actions のon: push
イベントのワークフローは実行されません - これは、ユーザーが誤ってワークフローの無限ループを引き起こすのを防ぐ目的の制限です
- なので、ワークフローから別のワークフローをトリガーしたい場合は、パーソナルアクセストークンなど別の認証方法でイベントを発生させる必要がありました
- 例えば、
- 今回の変更で、
GITHUB_TOKEN
を使ってworkflow_dispatch
イベントやrepository_dispatch
イベントを引き起こしたときは、対応する GitHub Actions のワークフローがトリガーされるように緩和されました- これらのイベントは明示的にワークフローを呼び出すためのイベントなので、誤って無限ループを引き起こすリスクは低いと判断されたようです
- 今回の修正により、パーソナルアクセストークンなど別の認証方法を用意せずに実現できるシナリオが増えそうです
- 例えば、ワークフローからコミットを作成して、CI ワークフローを
workflow_dispatch
イベントやrepository_dispatch
イベントで呼び出すようにするとか
- 例えば、ワークフローからコミットを作成して、CI ワークフローを
CircleCI のセルフホストランナー(docker executor)を k8s 上でスケーラブルに動かすコンテナエージェント機能が登場しました(オープンプレビュー)
共有担当: @korosuke613
- CircleCI において、セルフホストランナー(docker executor)を k8s 上でスケーラブルに動かすコンテナエージェント機能が登場しました(オープンプレビュー)
- これまでも CircleCI にはセルフホストランナー機能がありましたが、ジョブと VM(ランナー)を 1:1 でマッピングする必要があったため、スケーラビリティが低いという問題点がありました
- 今回の機能は、k8s 上で docker executor を動かすことでスケーラブルなセルフホストランナー(docker executor)を実現するぞという機能になります
- 既存のセルフホストランナー機能の代替というわけではありません
- 実際に試してみました -> まとめ | CircleCI の Container Agent 触ってみる
- Helmチャートが用意されており、簡単にセットアップ可能でした
- ランナーの設定項目も豊富です
- CircleCI は docker executor の利用が主流なので、k8s とは相性がいいですね。簡単にセットアップできて必要に応じてスケールするのがやはり嬉しいと思いました
gRPC サーバのビルドに Earthly を使ってみよう
共有担当: @emiksk0910
- Cybozu Productivity News #4でも紹介した OSS のビルドツール Earthly の入門記事を2つ書いたのでその紹介です
- Go で書かれた gRPC サーバーを題材に Earthly を使ってスタブコードの生成やテスト、バイナリビルド、Dockerイメージの生成とプッシュを行う入門記事です
- 実例を基に Earthly の基本的な構文の説明をしています
- Makefile + Docker といった感じの触り心地で、Dockerfile を書いたことがある人なら苦もなく使えるようになると思います
- 学習コストの低さ、コンテナ上でタスクを実行することによる可搬性と再現性1の高さ、キャッシュの仕組みの理解のしやすさなどが特徴です
Earthly を GitHub Actions で使ってみよう
共有担当: @emiksk0910
- 続いて前の記事で書いた Earthfile (Earthly のタスク定義ファイル) を題材に、Earthly を GitHub Actions で実行する方法を説明しています
- 内容の大部分は Earthly のキャッシュの仕組みについての説明になっています
- inline cache: タスクの成果物としての Docker イメージをタスク実行のためのキャッシュに用いる
- explicit cache: タスクの中間イメージをキャッシュのために別途リモートレジストリに保存し、それをタスク実行のためのキャッシュに用いる
- 記事執筆のついでに複数のリモートキャッシュを読み込めるようにして、キャッシュの優先順位を設定できる Pull request を Earthly 本体に出しました
- v0.6.22でリリースされています 🎉
- Earthly Satellites という Earthly を実行するためのリモートインスタンスを立ち上げて、そこでタスクを実行する機能もベータですが存在しています
- 同じ Satellite インスタンスを CI で用いることで、リモートではなくローカルのキャッシュをジョブに使えるようになります
- まだリリースされていませんが、Earthly CI なるものも計画されているようです
- Earthly 便利なのでみなさんもぜひ使ってみてください
CDK for Terraform(CDKTF) が GA になりました
共有担当: @r4mimu
- Cloud Development Kit for Terraform (CDKTF) が8月にGAになりました
- HCL を書かずに、使い慣れたプログラミング言語でインフラの定義ができます
- 2022年10月1日時点でTypeScript、Python、Java、C#、Go がサポートされています
- ユニットテスト用のライブラリも用意されています
cdktf synth
というコマンドで Terraform CLI から利用できる JSON 形式のcdk.tf.json
という設定ファイルが生成され、cdk.tf.json
があるディレクトリ内で Terraform CLI を実行することができます- 逆に、
cdktf convert
コマンドで HCL を CDKTF のコードに変換する事もできます - 正直、使い所がわかっていませんが動的にインフラを生成したい際の選択肢として考えられそうです
Terraform Module Designs 思考の引き出しを増やすモジュール設計のヒント
共有担当: @r4mimu
- 「実践Terraform」の著者の方によるモジュール設計についてのヒントがまとまったスライド
- Terraform module の設計の仕方にとどまらず、ソフトウェア開発における設計の思想を述べている
- 書籍などから様々な格言を引用して説明しており、読み物として面白いです
- 標準プラクティスとして、まず公式ドキュメントを読むことを推奨しています
- とりあえず公式ドキュメントに倣って、イマイチに感じたら後から変えていく
- いかに「後から変えていく」を上手にできるように設計しようと述べています
TerraformモノレポCIのセキュア化 | メルカリエンジニアリング
共有担当: @r4mimu
- モノレポ Terraform の CI をセキュアに構築した話
- メルカリではグループ内のすべての Terraform をまとめてモノレポで管理しており、terraform apply はモノレポ内に配置した CI パイプライン上で実行されるようになっていた
- その CI 環境における以下のような課題と対策が書かれています
- 永続的なサービスアカウントキーが漏えいした場合、手動で無効にするまで悪意のある人物は何でもできてしまう
- すべての Project に対するオーナー権限を持つサービスアカウントが存在する
- 任意のコマンドが実行されるリスク(CI パイプラインや Terraform プロバイダによる任意コード実行)
- クラウドには GCP を利用している場合での話ですが、AWS やモノレポでない環境においても永続的なサービスアカウント対策や任意のコマンド実行対策は参考になると思いました
- 永続的なサービスアカウントキーを排除するために、CIプラットフォームを CircleCI から Cloud Build に移行することにしたとあり、CIプラットフォームをクラウドサービスに寄せるのは確かになと思った一方、どのように移行したのか個人的に気になりました
- terraform apply を CI で行うにはセキュリティ面で色々な問題が考えられると思いますが、対処事例として参考になりました
セキュアなTerraformの使い方 ~ 機密情報をコードに含めず環境構築するにはどうしたらいいの?
共有担当: @r4mimu
- Terraform でセキュアにシークレットを扱う方法について解説したスライド
.tf
ファイルに機密情報を記述しない例として Terraform の Data Source や git 管理外ファイルに定義する方法が考えられるが、これらはNGtfstate
ファイルとは何か?から始まり、tfstate
ファイルには機密情報が含まれてしまうことを解説
tfstate
ファイルに機密情報が入ることを防ぐにはどうすればいいか- senitive 属性を付与することや
tfstate
ファイルを暗号化するなど一見良さそうな方法でもセキュアでないことを分かりやすく説明している
- senitive 属性を付与することや
- 結論として
tfstate
ファイルに機密情報が含まれることをやめるべきであり、どうやってやめるかを代替案を紹介 - Terraform 初心者でも理解しやすいので一度目を通しておくと良いと思います
Terraform を使用するためのベスト プラクティス
共有担当: @r4mimu
- Google による Terraform を使用するベストプラクティス
- スタイルや構造に関する一般的なものから、モジュール構成やバージョン管理についても触れられています
- 前述した機密情報の話や認証情報は CI/CD パイプラインに寄せることを推奨する話もあります
- 各トピックごとに推奨例と非推奨例が載っており、理解しやすいです
- 余談ですが
alias terrafrom="terraform"
を追加しようという内容があって面白かったです
Introducing the new npm Dependency Selector Syntax
共有担当: @ganta0087
- npm CLIに依存モジュールの情報をフィルターしてJSON形式で出力できる
query
コマンドがv8.16.0で追加されました - クエリーはCSSセレクターに似た記法となっており、詳細な仕様はDependency Selector Syntax & Queryingに定義されています
- 同時に
@npmcli/arborist
というnode_modules
配下のツリーをプログラマティックに扱えるライブラリに、このDependency Selectorを扱える.querySelectorAll()
メソッドが追加されました
Renovateがasdfの.tool-versionsファイルの更新にNode.js限定で対応
共有担当: @ganta0087
- Renovateがv31.199.0でasdfがツールのバージョン管理に利用している
.tool-versions
ファイルの更新に対応しました - asdfがサポートしているツールすべてに対応するのは現実的ではないため、必要に応じて対応ツールを追加できるようにNode.jsへの対応という形で下地が作られました
Highlights from Git 2.38
共有担当: @ganta0087
- Git 2.38がリリースされ、scalarコマンドの同梱、rebaseに
--update-refs
オプションの追加などが行われました - scalarはBuilt-in filesystem monitorなどのこれまで追加されてきた大規模リポジトリ向けの機能を一律で有効化してくれます
scalar clone
でチェックアウトするか、scalar register
で既存リポジトリに対して適用できます- scalarは新たに作成されたものではなく、以前から独立した.NETアプリケーションとして存在していたものが同梱されるようになりました
- rebaseの
--update-refs
は、例えばPull Requestを細かくしたいけど前のものがマージされないと進められないときにブランチをマージ前のところから切っていくことがありますが、そういう状況で最初の方のブランチのコミットを修正すると都度rebaseして回らなければならなかったのを自動で行ってくれるものです
生産性向上は一筋縄ではいかない 〜改善を進める上で生じる課題との付き合い方〜 | ドクセル
共有担当: @korosuke613
- 生産性向上チームの取り組みを Developers Summit 2022 Summer というイベントで発表してきました
- この発表では僕たち生産性向上チームが活動の上でつらさを感じていることについてを話しました
- 支援系チームあるあるな話が出てるので、気になる人は見てください
- Q&A まとめ記事もあるよ -> 生産性向上は一筋縄ではいかない Q&A [デブサミ2022夏] - Cybozu Inside Out | サイボウズエンジニアのブログ
脱オンプレGitHub!クラウド移行促進のための取り組み | ドクセル
共有担当: @korosuke613
- 生産性向上チームの取り組みを TECH STAND #9 GitHub というイベントで発表してきました
- GitHub Enterprise Server から GitHub Enterprise Cloud へリポジトリを移すためにやってきたことを話しています
- オンプレあるあるっぽい話が出てるので、気になる人は見てください
We are hiring
Footnotes
-
Docker イメージを上手に作らないと再現性の高さは得られないことに注意してください。イメージをビルドする時に依存するライブラリのバージョンが不定だと容易に再現性が下がります。 ↩