💻

[GitHubActions]何もしてないのにCDKTFのplanがこけた

2023/09/01に公開

背景

何もしていないかというと嘘になるのですが、GitHubActionsの設定は何も設定変更していないのに
GitHubActionsで実行しているCDKTFのジョブがこけた時の対処方法メモ書きです。

実行しているGitHubActions

  • PullRequest作成時にDryRun → 差分内容をコメントに追記
  • mergeされたらApply
    DryRunの内容を2つ出力するようにしているため若干冗長感は否めないのですが、
    terraformでの実行確認もしておきたいのでそうしています。
name: "Develop CDK for Terraform"
on:
   pull_request:
    branches:
     - develop

    types: [opened, synchronize, reopened, closed]
    paths:
      - "cdk_for_terraform/base/environments/develop.ts"
   workflow_dispatch:
#-------------------------#
# 環境変数
#-------------------------#
env:
    SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
    SLACK_USERNAME: GitHubActions
    SLACK_CHANNEL: infra_notifications
    SLACK_ICON: https://octodex.github.com/images/Robotocat.png
 
permissions:
    id-token: write
    contents: read
    pull-requests: write
  

jobs:
  terraform:
    name: "Terraform CDK Diff"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials from account
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          aws-region: ap-northeast-1

      - uses: actions/setup-node@v1
        with:
          node-version: "20"

      - name: Install dependencies
        run: yarn install

      - name: Generate module and provider bindings
        run: | 
         cd cdk_for_terraform/base
         npx cdktf-cli@0.18.0 get
         npm install @cdktf/provider-aws
         npm install --save-dev @types/node


      - name: setup tfcmt
        env:
          TFCMT_VERSION: v3.4.1
        run: |
          wget "https://github.com/suzuki-shunsuke/tfcmt/releases/download/${TFCMT_VERSION}/tfcmt_linux_amd64.tar.gz" -O /tmp/tfcmt.tar.gz
          tar xzf /tmp/tfcmt.tar.gz -C /tmp
          mv /tmp/tfcmt /usr/local/bin
          tfcmt --version



      - name: Run Terraform CDK DryRun
        uses: hashicorp/terraform-cdk-action@v0.1.0
        with:
          terraformVersion: 1.5.5
          cdktfVersion: 0.18.0
          stackName: develop
          mode: plan-only
          githubToken: ${{ secrets.GITHUB_TOKEN }}
          workingDirectory: cdk_for_terraform/base
        env:
          ENV_ID: develop



      # Generates an execution plan for Terraform
      - name: Terraform Plan
        run: |
          cd cdk_for_terraform/base
          tfcmt plan -patch -- terraform -chdir=cdktf.out/stacks/hotfix plan -no-color -input=false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
          PR_NUMBER: ${{ github.event.number }}


      # developにマージされた時に実行される。
      - name: Run Terraform CDK Apply
        if: github.event.pull_request.merged == true
        uses: hashicorp/terraform-cdk-action@v0.1.0
        with:
          terraformVersion: 1.5.5
          cdktfVersion: 0.18.0
          stackName: develop
          mode: auto-approve-apply
          githubToken: ${{ secrets.GITHUB_TOKEN }}
          workingDirectory: cdk_for_terraform/base
        env:
          ENV_ID: develop

発生内容

  • エラー出力
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: base@1.0.0
npm ERR! Found: cdktf@0.18.0
npm ERR! node_modules/cdktf
npm ERR!   cdktf@"^0.18.0" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer cdktf@"^0.17.0" from @cdktf/provider-aws@15.0.0
npm ERR! node_modules/@cdktf/provider-aws
npm ERR!   @cdktf/provider-aws@"^15.0.0" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR! 
npm ERR! 
npm ERR! For a full report see:

0.18 で作成されたので15.0.0では実行できないよ 15.0.0で実行するなら0.17で実行してね。
みたいなエラー

さすがにダウングレードはしたくないので
provider-awsを安易にterraformのバージョンと合わせて
package.json内のdependencies設定 15.0.0から15.5.0に変更。

  "dependencies": {
    "@cdktf/cli-core": "^0.18.0",
    "@cdktf/provider-aws": "^15.5.0",
    "cdktf": "^0.18.0",
    "constructs": "^10.2.40"
  },

どうなったか。

エラー内容は変わったものの未だにこける。

  • エラー出力
npm WARN exec The following package was not found and will be installed: cdktf-cli@0.18.0
npm WARN deprecated @npmcli/ci-detect@1.4.0: this package has been deprecated, use `ci-info` instead
Generated typescript constructs in the output directory: .gen
npm ERR! code ETARGET
npm ERR! notarget No matching version found for @cdktf/provider-aws@^15.5.0.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.

対処法

provider-awsのVersionを0.17以上にする必要がありました。

以下設定で正常に稼働するようになりました。
package.jsonの内容

  "dependencies": {
    "@cdktf/cli-core": "^0.18.0",
    "@cdktf/provider-aws": "^17.0.1",
    "cdktf": "^0.18.0",
    "constructs": "^10.2.40"
  },

結論

cdktfはbrewでインストールしているのですが、
awsのproviderのバージョンを意識するのを失念してました。

cdktf-provider-awsのVersionも意識して運用しましょうということで。

GitHubで編集を提案

Discussion