継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Reusable workflows に Terraform 実行に必要な Secrets を渡す

タダです.

GitHub Actions の Reusable workflows を使って,terraform plan をすることがあったのですが,その際に GitHub Actions に設定した Secrets を渡す必要がありました.他にも Reusable workflows を使う Actions はあるため,Secrets が渡されたときはその値をセットし,それ以外はスキップするよう処理を書きました.この記事では備忘録としてその内容をまとめます.

出来上がった GitHub Actions の定義ファイル

まず呼び出し元の定義ファイルは次のように書きました.Reusable workflows の with で Secrets を渡すようにしています.

terraform_plan:
    uses: "./.github/workflows/reusable_workflow_test.yml"
    with:
      TF_VAR_hoge_api_key: "${{ secrets.hoge_api_key }}"

次に,呼び出される側の定義ファイルは次のように書きました.secrets セクションで呼び出し元から渡された値を受け取ります.その次に,stepsの中で渡された値をenv に入れて if で変数に値がセットされていれば GITHUB_ENV に書き出し,なければ何もしないようにしました.

secrets: 
      TF_VAR_hoge_api_key:
        required: false
~中略~

- if: ${{ env.TF_VAR_hoge_api_key != null }}
   env:
      TF_VAR_hoge_api_key: ${{ secrets.TF_VAR_hoge_api_key }}
   run: echo "TF_VAR_hoge_api_key=${{ env.TF_VAR_hoge_api_key }}" >> $GITHUB_ENV

こうすることで Secrets を渡されたときだけ処理が動き,それ以外はスキップされるようにすることができました.

まとめ

Reusable workflows に Secrets を渡して必要な Actions からの呼び出しだけ Secrets を環境変数にセットすることができました.検証で結構時間を喰ってしまったのですが,自分が経験したことない知見を詰めてよかったです.