Screaming Loud

日々是精進

could not query provider registry for registry.terraform.io でterraformのproviderがダウンロードできない問題の対処

現象

localのMacでterraform initした際に以下の様なエラーが発生して providerがダウンロードできなくなりました。

Error: Failed to query available provider packages
Could not retrieve the list of available versions for provider hashicorp/aws:
could not query provider registry for registry.terraform.io/hashicorp/aws: the
request failed after 2 attempts, please try again later: Get
"https://registry.terraform.io/v1/providers/hashicorp/aws/versions": net/http:
request canceled while waiting for connection (Client.Timeout exceeded while
awaiting headers)

これ別にaws providerに限った話ではなく、 datadogとかrandomとか全てで発生します

initは通常 .terraform 配下のキャッシュを見ているので required_provider にマッチしていれば、ダウンロード自体が発生しないのでproviderアップデートのときですね

環境は以下です

  • macOS Catalina
  • tfenvによるterraform管理
  • terraform v0.13.2

providerの指定はこんな感じ

 required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.0"
    }
    datadog = {
      source  = "datadog/datadog"
      version = "= 2.12.1"
    }
  }

原因

ここに書いてある通りです。

github.com

/etc/resolve.conf に存在しないnameserverを書いている場合、cgoを許可しないとDNS解決がGoでうまくいかないっぽいです。

解決法

以下のどちらかを実施すれば直ります

  • ネットワーク設定から存在しないDNSサーバのIPを消す
  • terraformをソースからビルドする。その際 $ CGO_ENABLED=1 go build -ldflags "-s -w" -o tf でcgoを許可してビルドする

でした。 変なところでハマってしまいました。

2020年読んだ本まとめ

2020年に読んだ本は22冊でした。

f:id:yuutookun:20210103212517p:plain
読書メーターのstats

mocyutoさんの2020年読書まとめ - 読書メーター

今まで通勤中に結構読んでたのですが、2020年はリモートワークで読む時間が減って読む量が減った気がします。 ただ、実際カウントしてみると2019年と1冊差でしたね。

個別ピックアップ

以下は読んだ本のピックアップです。

これとかは意外に知らなかった歴史の背景などが知ることができたので面白かったですね。

bookmeter.com

あとは話題になった本です。 とりあえず読んだことがないのであれば、さらっと読んでみてもいいかもしれないですねー

bookmeter.com

こちらをきっかけに The Last of Us というゲームをやるに至りました。

bookmeter.com

去年のまとめ

yuutookun.hatenablog.com

GitHub Actionでtagを打った際にgit-pr-releaseみたいなリリースノートを作る

今年はコロナで出かけていないので、ちょっとGitHub Actionいじってます。

やりたいこと

タイトル通りですが、やりたいことは「GitHub Actionでタグを打ったときに、git-pr-releaseみたいな前のタグからのPRのリストをリリースノートに乗せたい」です。

f:id:yuutookun:20210102163926p:plain
実際の自動で生成したリリースノート

やりかた

これを実施するにあたり、git-pr-releaseと違ってメインブランチとサブブランチを決めてそのPRを取るという手法が使えないので以下のようにする必要があります

  • 前のタグからの今のタグへの全コミット取得
  • PRのコミット取得
  • 対象のPRを取得
  • リリースノートに反映

前のタグからの今のタグへの全コミット取得

これはGitHubAPIからは取れなかったので、Git操作で取得します。 git log を使えば、あるタグから別のタグまでのコミットログを取れます。 また通常のログだといろいろな情報が乗ってくるので、formatしてあげて必要な情報に絞る必要があります。 今回はコミットハッシュだけがほしいので %H だけを使います。 コマンドで示すと以下です。

$ git log v0.10.0...v0.10.1 --pretty=format:"%H"

それとは別にtag一覧を取って、最新と一つ前を取る必要があります。 sortを使うとタグのバージョンを考慮してsortしてくれるので使わない手はありません。 コマンドでは以下になります。

$ git tag  --sort=-v:refname

これのsortでは v0.1.0. v0.8.0, v0.10.0 をちゃんと並べてくれます

これをGitHubActionでやる必要があるので、実施には actions/github-script@v3 を使います. github-scriptを使うとjsで操作を記述できる上に、GitHub APIが簡単に叩けます。

では特定タグ間のコミットログのハッシュ取得部分です。 jsの simple-git というライブラリを使ってGit操作を行っています。

const simpleGit = require('simple-git');
const git = simpleGit(path); // pathは操作するリポジトリの絶対パス
const logs = await git.tags({ '--sort': '-v:refname' })
    .then((t) => {
        const tags = t.all.slice(0, 2);
        return git.log({ 'from': tags[0], 'to': tags[1] })
    });

slice(0,2) と指定しているのは、sortされているので最新とその次を取るためです。 (一番最初のタグのときは考慮してないので、もしやる場合は考慮させましょう)

PRのコミットを取得

ここに関してはGitHub APIを叩いて取得します。

    const { data } = await github.pulls.list({
        owner: 'mocyuto',
        repo: 'ec2-search',
        base: 'master',
        state: 'closed',
    })

これだけでmasterに向けたmege済みのPRを取得できます。

他にも操作する場合は、以下のoctokitのページを見るといろいろわかります。 localで試したい場合は、以下を参考に試してみるといいと思います。 localの場合は octokit を使い、github-scriptの中では github を使えば動きます。

octokit.github.io

あとはjsでfilterするだけです。

リリースノートに反映

自分は action-gh-release を使っていたので、これをベースに説明します。

ほぼREADMEに書いてあることを実施すればいいのですが、一点リリースノートを追記する際、 bodyを記載した際は追記になるので、matrixで複数リリースノートへ書き込みを行うと同じ文言がmatrix分だけ乗ってしまいます。

ですので、matrixを利用している場合はjobをわけたほうがよいです。

実際のソースコード

以下がワークフローの記述部分です simpe-git を使うためにnpm installしています。 あとactions/checkout@v2 はデフォルトでdepth=1なので0を指定して全部取ってきましょう。

https://github.com/mocyuto/ec2-search/blob/v0.10.1/.github/workflows/release.yml#L77-L99

そして、呼び出しているスクリプトは以下です。

https://github.com/mocyuto/ec2-search/blob/v0.10.1/.github/script/prs.js

まとめ

最初は割と面倒かなと思ったのですが、github-scriptとsimple-gitのおかげでラップしてくれたので、以外に簡単にできました。 tag打ちのときの面倒の手助けになれば。

2020年振り返り

去年の振り返りはこちら

yuutookun.hatenablog.com

仕事

今年はKubernetesにどっぷり浸かった1年でした。 kubernetesの流れが大きくなっていく中で、がっつり触れたのはよい機会だったなと。

以下会社ブログで書いたやつです

tech.gunosy.io

tech.gunosy.io

また、2019年に作った新規サービスをクローズした1年でもありました。 うまく売上が立たず、事業の立ち上げの難しさを感じました。

コロナによって在宅勤務になり環境は大きく変わりましたが、仕事としての違いに関しては元々オフライン時にもオンラインツールを使っていたのであまり感じませんでした。

オンライン化はプラスとして通勤がなくなったことですが、 マイナスとして他部署の人との接点が今まで飲み会とかだったので、 それが無くなりチーム外との雑談は減ってしまったので、そこは今後カイゼンされればいいなと。

あとは、去年掲げていたリードエンジニアとして組織を良くするにはどうすればいいかみたいなことを実行に移しました。

yuutookun.hatenablog.com

ここらへんは実際に実行に移してみたもののそれがまだいい影響を与えているのかはわからないので、 しっかりフィードバックをもらいつつカイゼンを回していかなければなと思っています。

プライベート

会社ではなかったスタンディングデスクを導入することで立ち仕事が増えたので、このコロナ禍の中で健康面ではむしろ向上してたようです。 健康診断で体脂肪率が17.9%から12.4%に減っていました。 去年から引き続きテニスをやっているのが功を奏したのかもしれません。 テニスに関しては昨年に比べて相当上達したと感じています。

対して人間ドックで初の再検査に引っかかりました。来年再検査ですが、何もないことを祈りますw

あと、膝も負傷しましたね。 運動するときサポートをつけていないとゆるくなってしまって、踏み込めなくなってしまいました。 脱臼したりアキレス腱切ったり、故障はとにかく多い人生ですね。。

そういえば今年見た映画は全部アニメなのですが、全部泣いてしまいました。 最近涙腺がゆるくなってるのかな

まとめ

去年に比べてコロナのせいか1年があっという間でした。 来年はコロナの対策が進むことで情勢は変わるかなと思うので、来年は打破できればよいなと思います。