【小ネタ】デプロイを GitHub Actions で行わせてエラーになったときの備忘録

2023.05.01

こんにちは、高崎@アノテーション です。

はじめに

おかげさまで実業務も始めるようになりましたが、GitHub Actions に AWS へのデプロイを組み込んだ CI/CD 運用にて自身が躓いたことを記事にいたします。

1. Actions が動かない

現象

Actions のログが下記のテキストのまま動かなくなった場合の話です。

Waiting for a runner to pick up this job...

原因と対処方法

.github/workspace に実装する YML ファイル(以下、YML ファイルと記載)の「runs-on」指定が下記のようになっていませんか?

jobs:
  runs-on: ubuntu-18.04
    :

この場合、下記リンクに記載の通り、Ubuntu 18.04 はサポート外になったため動作しません。
参考: Endless 'Waiting for a runner to pick up this job...'

runs-on の指定を ubuntu-20.04 以降の LTS に設定することで解消すると考えられます。

ubuntu-lastest について

上記の対応ですが、ubuntu-lastest へ変更して常に GitHub に追随する案もあるかと思います。

一方で このブログ にもあります通り、GitHub に委ねずに「敢えて」バージョンを指定することもありますので、保証する最古の LTS(この記事現在においては 20.04)を指定する方が良いと思います。

2. デプロイ時に AWS クレデンシャルのロードに失敗する

現象

AWS CDK のデプロイ時に下記のような「クレデンシャルのロードが出来なかった」というメッセージが出る場合の話です。

Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers

原因と対処方法

下記の理由が考えられます。

  1. AWS 側に割り当てたロールの信頼関係設定が足りていない
  2. YML ファイルに必要な設定が入っていない

1. AWS 側の設定

AWS 側で作成した IAM ロールの信頼関係に割り当てた内容に下記が入っているかチェックしてみてください。

  • Statement の中に「"Action": "sts:AssumeRoleWithWebIdentity"」はあるか?
  • Condition の「token.actions.githubusercontent.com:aud」は「sts.amazonaws.com」になっているか?
  • Condition の「token.actions.githubusercontent.com:sub」に割当対象のリポジトリがあたっているか?

2. YML ファイルへの設定

YML ファイルに下記の設定が無い場合、クレデンシャルのロードに失敗すると考えられますので記載してください。

permissions:
  id-token: write
  contents: read

参考 URL:

GitHub Actions が OpenId Connect に対応したので AWS OIDC Provider と連携する

3. CDK コマンドに失敗する

現象

  1. 「コマンドが見つからない」と言われる
  2. エラーメッセージが出て終了する

原因と対処方法

1. 「コマンドが見つからない」に対して

コマンド実行前に aws-cdk をインストールすると思いますが、以下を確認ください。

  1. そもそも aws-cdk をインストール出来ているか
  2. aws-cdk のインストール時にオプションで「-g」指定をしているか

2. エラーメッセージが出て終了する

GitHub Actions のエラーメッセージにて、

Deployment failed: Error: Stack Deployments Failed: Error: "--require-approval" is enabled and stack includes security-sensitive updates, but terminal (TTY) is not attached so we are unable to get a confirmation from the user

上記のエラーが出て終了した場合は、YML ファイルに設定した cdk のコマンドオプションが、下記のようになっていると考えられます。

    :
  - name: Deploy
    run: cdk deploy
    :

cdk コマンドでデプロイしようとすると「デプロイしてよいか?」と尋ねて一度コンソールへ処理を移行するため、GitHub Actions 上で実行する場合はこれを省略させるコマンドオプションが必要になります(下記)。

    :
  - name: Deploy
    run: cdk deploy --require-approval never
    :

おわりに

今回は GitHub Actions に AWS へのデプロイを組み込んだ場合に発生しうる現象とその対処を纏めてみました。

同じような内容で躓かれている方がいらっしゃったらご参考になればと思います。

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。
現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。
少しでもご興味あれば、アノテーション株式会社WEBサイト をご覧ください。