はじめに
勉強用に個人で作成したTerraformやCloudFormationのファイルが増えてきました。
業務に活かすためきれいに書きたいと思っていましたが、なかなか時間が取れていませんでした。
そこで、GitHub Actionsを使ってファイル修正とプルリクエストの作成を試みました。
CloudFormationのlinter(cfn-lint)には自動修正機能がないため、生成AI(Ollama)を使ってみることにしました。(LLMをあまり使ったことがなかったので勉強してみたい気持ちを優先しました👍)
成果物
以下のワークフローのファイルを作成しました。
-
terraform fmt
、tflint
を実行しファイル修正後、プルリクエストを作成するワークフロー(Terraform linter and PR)
https://github.com/kohei39san/mystudy-handson/blob/main/.github/workflows/terraform-linter-pr.yml -
cfn-lint
を実行し、ollamaでファイル修正後、プルリクエストを作成するワークフロー(CloudFormation linter and PR)
https://github.com/kohei39san/mystudy-handson/blob/main/.github/workflows/cfn-linter-pr.yml
Terraform linter and PRを動かしてみる
概要
プルリクができているか
ファイル変更を行い、プッシュしてみました。
その後、terraform fmt
、tflint
されたプルリクエストが作成されていました。
プルリクはgithub-actionsユーザー作成となっていました。
デフォルトでは、github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
がユーザー、メールアドレスとして使われるようです。
https://github.com/peter-evans/create-pull-request
それ以外でGithub Actionsで使えるユーザー、メールアドレスは以下の記事が参考になりました。
https://qiita.com/thaim/items/3d1a4d09ec4a7d8844ce
ファイル修正もいい感じです!
マージもできました!
プルリクなので元に戻すこともできそうです!
詰まった点1: Githubにおける認証情報の種類
Githubにある色々な権限の違いを理解するのに時間がかかりました。
何をしたいかによって権限の与え方が変わります。
- GITHUB_TOKEN: 定義済みトークン
- Github Appの登録
他にもたくさん種類があるようです。(覚えきれない。。)
今回は自前のトークンを管理したくなかったので、GITHUB_TOKENを使うことにしました。
GITHUB_TOKENで、ブランチ、プルリクの作成権限がついているかの確認方法は以下の通りです。
https://dev.classmethod.jp/articles/mapping-secrets-github-token/
ブランチの書き込みが分かりづらいですが、以下記事からAPIの分類POST /repos/{owner}/{repo}/git/refs
を調べて、
https://blog.p1ass.com/posts/create-branch-using-github-api/
以下記事と見比べると、contents
に分類され、GITHUB_TOKENでも読み書きできることが分かります。
https://docs.github.com/en/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-contents
詰まった点2: push前のリポジトリの権限修正
まずはリポジトリでGithub Actionsを有効にする必要があります。
また、GITHUB_TOKENは権限のカスタマイズができ、デフォルトですべての権限使えるわけではありませんでした。
ワークフローから書き込みの権限を許可する必要がありました。
※その他参考
CloudFormation linter and PRを動かしてみる
概要
プルリクができているか
push
してみると、プルリクエストが作成されていました!
しかし、以下の問題が発生しました。
- ollamaが起動していないことがあった
ひとまずOllama実行までに待機時間(なんとなく5秒にしました。。)を設けました。
- 指示していない修正があった
もともとyamlファイルにあったコメントも指示だと思って修正したようです。
- 間違った修正案を提示してくることも多かった
おわりに
自動化できて便利だと感じましたが、課題もあるので改良が必要だと感じました。
ただ、自動である程度直してくれるのは助かりますし、Botでも誰かと作業している感があってわくわくするので、使ってみようと思います!
これからも勉強します!