GitHub Actions / install-azcopy-action v1.0.2 リリース

github.com

azcopy をインストールする GitHub Action "install-azcopy-action" v1.0.2 をリリースした。
内容はセキュリティアップデートをいくつかと、GitHub Actions の Deprecated になった処理の対応。
Deprecated のニュースは以下。

GitHub Actions: Deprecating set-env and add-path commands - GitHub Changelog

自分で使っているものの、そこまで頻度が高くないので全然気づかなかった。
dependabot の Pull Request にコメントまでもらったのを今日気づいて、慌てて対応した。

GitHub Actions ではリリース時に node_modules の中身をアップロードしないといけないという悲しい仕様なのだが、リリース作業でやらかして、リリースタグをこっそり作り直すということをした。
夏に Mac から Windows PC に乗り換えたのだが、Windowsnpm install したバイナリをリリースしたのがいけなかった模様。
WSL を常に使う意識付けが必要だった。

リリースした後にもコミットを入れてしまったので、また近いうちにリリースしよう。

Terraform Cloud の View raw log に余計な文字が出力される件

問題

www.terraform.io

Terraform Cloud をサービス開始当初から使っている。

terraform plan の実行ログをコピペするのがしづらい(カーソル状態が定期的にリセットされる挙動で Ctrl + C が空うちされる!) ため、 "View raw log" からログをダウンロードして利用するのが回避策として有効なのだが、ここには一つ落とし穴がある。

それはデフォルトだとログに余計な文字が含まれてしまうことだ。

期待結果は以下のイメージ

# azurerm_app_service_certificate.xxxxxxxx will be created
+ resource "azurerm_app_service_certificate" "xxxxxxxx" {
+ expiration_date = (known after apply)
+ friendly_name = (known after apply)
+ host_names = (known after apply)
+ id = (known after apply)
+ issue_date = (known after apply)
+ issuer = (known after apply)

実際は以下

[1m # azurerm_app_service_certificate.xxxxx[0m will be created[0m[0m
[0m [32m+[0m[0m resource "azurerm_app_service_certificate" "xxxxxx" {
[32m+[0m [0m[1m[0mexpiration_date[0m[0m = (known after apply)
[32m+[0m [0m[1m[0mfriendly_name[0m[0m = (known after apply)
[32m+[0m [0m[1m[0mhost_names[0m[0m = (known after apply)
[32m+[0m [0m[1m[0mid[0m[0m = (known after apply)
[32m+[0m [0m[1m[0missue_date[0m[0m = (known after apply)
[32m+[0m [0m[1m[0missuer[0m[0m = (known after apply)

回避策

サポートに確認したところ、この余計な文字は + などの部分に色をつける装飾のための文字コードだ。

回避策は terraform cli を実行するときのパラメータを変更すること。

環境変数 TF_CLI_ARGS-no-color を追加すれば装飾されなくなる。

参考: Environment Variables - Terraform by HashiCorp

感想

この回避策を取ると通常の Web 上の画面でも装飾されないことになるので、そこが不便になる。
理想を言えば Web 上は装飾あり、ログでは装飾なしのプレーンな形式で確認したい。
つまり terraform cli の挙動ではなく、Web 上で装飾してほしい。
という要望は出しておきましたがどうなるか。

Terraform で Market Place の Azure VM をデプロイするときにやること

Terraform 使い始めてしばらくになるのに知らなかったのでメモを残しておきます。

Terraform 定義

plan block がマストです。

resource "azurerm_virtual_machine" "main" {
  ...

  plan {
    name      = "{Name}"
    publisher = "{publisher}"
    product   = "{product}"
  }
}

storage_image_reference で記載する値と同じようなものを入れることになります。
詳細は Azure Provider のドキュメントを参照ください。

Azure Resource Manager: azurerm_virtual_machine - Terraform by HashiCorp

デプロイ前に実行すること

利用許諾に承諾する必要があります。
Azure ポータルでデプロイするときに画面に表示されるアレですね。

それぞれ以下のコマンドで実行します。

Azure CLI: az vm image | Microsoft Docs

PowerShell: AzureRM.MarketplaceOrdering Module | Microsoft Docs

もちろん該当のサブスクリプションに対して行う必要があるので、そこは注意ですね。

DockerHub で0Byteのコンテナが自動ビルドされた

DockerHub で docker イメージの継続的デリバリを行うために automated build 機能を使っている。
Set up automated builds | Docker Documentation

数年間使い続けているが初めてタイトルの現象を目にしたので記録しておく。

現象

master ブランチ更新時に latest イメージを作成しているのだが、2日前に作成されたイメージが以下の画像。

f:id:khei-fuji:20200927105552p:plain

このイメージを利用しているホスト(Web App for Container) 側のログは以下。

2020-09-27T01:41:08.455Z ERROR - DockerApiException: Docker API responded with status code=NotFound, response={"message":"pull access denied for `organization/repo`, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}
2020-09-27T01:41:08.457Z ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)

パッと見だと認証周りのエラーに勘違いしてしまったが、 docker image が NotFound だった、ということだった模様。

対処

Latest イメージをビルドし直して解決したが、これはプラットフォーム側で解決してほしい。

Cognitive Service を使った Jekyll 製の翻訳サイトを話題の Static Web Apps に載せ替えた

昨日書いた Azure CDN + Blob Static website のサイト、載せ替えたい欲求が高まったので載せ替えた。

今回の変更は Build 前だったのだが、今やるなら話題の Static Web Apps で実装するのがよさそう。というかもう載せ替えたい。

kheiakiyama.hateblo.jp

ホスティング

f:id:khei-fuji:20200525124958p:plain
hosting

これまで Azure CDN + Blob static website だったのが Static Web Apps に変わったので非常にシンプルになった。

デプロイ

f:id:khei-fuji:20200525125018p:plain
deployment

デプロイも構成要素が減った分シンプルになった。
Static Web Apps ではリソース作成時、GitHub Action が作成され、 GitHub の Secret にデプロイ用のキーが登録される仕様なので、それを使ってデプロイされる。

パイプラインは こちら

f:id:khei-fuji:20200525125855p:plain
GitHub - Secret

現在は Preview で課金されないことになっているが、個人サイトで使うには金額次第で元の構成に戻す可能性があるため、前の GitHub Action はファイルを残してある。
Disable にできない仕様のようなので、意味がない Trigger 設定にしておく。
参考: How can I disable a github action? - GitHub Community Forum

つまづいた点

Jekyll でデプロイできない

このサイトでは Jekyll を使っていて、Hugo のチュートリアル を見てデプロイ設定を推察して書いていたが、デプロイできずに Issue 投げて質問して解決した。

How do we use for jekyll? · Issue #27 · Azure/static-web-apps · GitHub

これだと NG(Hugo はこのパターン なのに・・)

        app_location: '/'
        app_artifact_location: '_site'

これで OK

        app_location: '_site'
        app_artifact_location: ''

一応回答の通りに対応したが、それだと app_artifact_location がなんのためにあるのかって気もしていて、たぶんそのうち解決するのだと思う。

感想

Static Site 部分、API 部分どちらも Consumption Plan になりますように。(個人でも払える範囲だといいなあ)

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

GitHub Actions を使って Azure CDN + Blob Static website を使った Cognitive Service の翻訳サイトをデプロイ

昔作った Cognitive Service による翻訳サイトのホスティングを普通の方法にアップデートした。

github.com

以前の課題

kheiakiyama.hateblo.jp

  • Azure Function Proxy で静的ホスティングは現代的ではないのと、Function のコストが微妙にかかるのでやめたい
  • Travis CI やめたい
  • 昔の記事まで保持するとコストかかる

ホスティング

f:id:khei-fuji:20200523230047p:plain
hosting

以前は Function Proxy + Blob Storage で配信していた。
当時は Blob Static website や Front Door がなく、CDN の設定もやりづらかった印象だったが、今はよくなっているので Azure CDN に置き換えた。
今回の変更は Build 前だったのだが、今やるなら話題の Static Web Apps で実装するのがよさそう。というかもう載せ替えたい。

デプロイ

f:id:khei-fuji:20200523230104p:plain
deployment

これまで Travis CI で処理していた部分を GitHub Actions で書き直した。
GitHub Actions での Blob へのデプロイは install-azcopy-action でインストールした azcopy が行う。
自分の cv サイトがほぼほぼ同じデプロイ方法 なので簡単に載せ替えできた。

翻訳記事の生成

f:id:khei-fuji:20200523230021p:plain
translate

このサイトは RSS フィードを更新することが目的にあるため、コンテンツが追加されるごとにサイトが再度 Generate されないといけない。
以前は Travis CI のジョブを API で呼び出していたが、今回は GitHub Actions を呼び出す。
公式にあるように repository_dispatch を呼び出す必要がある。

参考:

ほか

ついでに Blob Storage のライフサイクル管理をいじって、90日前より前のコンテンツはすべて削除することにした。
RSS フィードを1週間読まないことはあっても 90日はさすがに不要なので。
経費削減。

Azure Storage のライフサイクルの管理 | Microsoft Docs

{
    "rules": [
        {
            "enabled": true,
            "name": "SaveCosts",
            "type": "Lifecycle",
            "definition": {
                "actions": {
                    "baseBlob": {
                        "tierToCool": {
                            "daysAfterModificationGreaterThan": 30
                        },
                        "delete": {
                            "daysAfterModificationGreaterThan": 90
                        }
                    }
                },
                "filters": {
                    "blobTypes": [
                        "blockBlob"
                    ],
                    "prefixMatch": [
                        "translated"
                    ]
                }
            }
        }
    ]
}

感想

GitHub Actions じわじわ詳しくなってきた。

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

モニターアーム設置したらリモート環境のクオリティが高まった

はじめに

ということで最高。
もっと配線キレイにしたい。

今の環境

わりとありふれた感じだと思う。

f:id:khei-fuji:20200421131100j:plain

下はこんな感じ。

f:id:khei-fuji:20200421210236j:plain

内訳

PC デスク

Garage というメーカーの評判がいいと聞いて2年前に購入。
重いのでその分耐久力があって信用できる。
天板はそんなに厚くないのと、裏面の設置面の奥行きがせまいので、モニターアームによっては合わない可能性があるのが注意点。

モニターアーム

ディスプレイの重量とデスクの厚みや設置面の奥行きだけ確認して評価が高いやつを購入。

ノート PC

jp.ext.hp.com

支給品。
Core i5/ 16GB メモリ/SSD 512GB 保証付きで20万円切ってた気がする。
最高ではないけど及第点。

キーボード

前職の退職祝いにもらった(欲しいもので指定した) が最高。
タイプするときに小さい幸せを感じる。

PC スタンド

クラムシェルで縦置きも可能。
ノートPCの高さが合わないとつらいのでちょうどいい。

ディスプレイ

購入当時タイムセールで 14,500 だった。
本当はもう少し大きいサイズがほしいが、不満もない。
次はデュアルディスプレイかな。

ヘッドセット

弊社推奨品。経費で購入。
雑音拾いづらいし、快適。
人より頭が大きいためか、つけていると疲れるので、ときどき左右入れ替えてる。

椅子

疲れない。よい。
Amazon だと高いので後述のお店がオススメ。

www.iamworkaholic.jp

WORKAHOLIC が近くにあったので一通り座って試した上でこれが一番合ったので購入した。
PCデスク同様に2年前の時点で 77,566 。

今は需要が高まってるんだろうなあ。

オットマン

きの小いす ワインレッド

きの小いす ワインレッド

  • 発売日: 2006/10/16
  • メディア: ホーム&キッチン

かわいい。

おわりに

色んな人のリモート環境の記事見て妄想を膨らませてる。
いろいろ見たい。