つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

Azure Administrator Associateの認定を受けました

昨日 (2023年1月26日) 、AZ-104 試験 を受験しまして、無事に合格することができました。
そのため Azure Administrator Associate の認定を受けました。

learn.microsoft.com

ネットワークが苦手な自分にとって、AZ-104 試験は鬼門であり、なかなかスムーズに勉強が進みませんでした。(やる気の問題)
とりあえず Microsoft Learn コレクションを作成し、Azure ポータルで実際にリソースを操作しながら学んでいきました。

https://learn.microsoft.com/ja-jp/users/tsubakimoto/collections/prdguen5r4r0d2

次は Azure Solutions Architect Expert (AZ-305) と言いたいところですが、如何せん苦手意識が強すぎるのでどうしようかなと思ってます。
Power Platform や Microsoft 365 の管理系の試験かな。

curlでタイムアウトを設定するにはmax-timeオプションを使う

AZ-104 試験のために Microsoft Learn を進めている中で、Azure CLI仮想マシンを管理するテキストがあります。

learn.microsoft.com

そのテキストで Nginx をインストールした Azure VM に対して、curl を用いて Nginx をインストールしたことを確認するための Web ページが表示するコマンドが登場します。

curl -m 80 <パブリックIPアドレス>

curl-m オプションという見慣れないものがあり、気になったので調べてみました。

curl --help all | grep -- -m
     --create-file-mode <mode> File mode for created files
     --ftp-method <method> Control CWD usage
     --ftp-ssl-ccc-mode <active/passive> Set CCC mode
     --happy-eyeballs-timeout-ms <milliseconds> Time for IPv6 before trying IPv4
     --mail-auth <address> Originator address of the original email
     --mail-from <address> Mail from this address
     --mail-rcpt <address> Mail to this address
     --mail-rcpt-allowfails Allow RCPT TO command to fail for some recipients
 -M, --manual             Display the full manual
     --max-filesize <bytes> Maximum file size to download
     --max-redirs <num>   Maximum number of redirects allowed
 -m, --max-time <fractional seconds> Maximum time allowed for transfer
     --metalink           Process given URLs as metalink XML file
     --no-progress-meter  Do not show the progress meter
     --parallel-max <num> Maximum concurrency for parallel transfers
     --retry-max-time <seconds> Retry only within this period
     --tls-max <VERSION>  Set maximum allowed TLS version

-m, --max-time <fractional seconds> Maximum time allowed for transfer ということで、curl で実行するリクエストのタイムアウト(秒数)を設定するためのオプションのようです。

試しに 1秒でタイムアウトするように指定すると、すぐタイムアウトとなりました。

curl -m 1 8.8.8.8
curl: (28) Connection timed out after 1001 milliseconds

ちなみに grep コマンドでハイフンを含んだキーワードで調べたい場合は、キーワードの前に -- をつけるとよいということも学びました。

NuGetパッケージのCI/CDをAzure PipelinesからGitHub Actionsに移行したときにやったこと

.NET の環境変数を一覧確認するために開発した「Enviewer」の CI/CD 環境を、Azure Pipelines から GitHub Actions に変更しました。
Enviewer についてはこちらをご覧ください。

tsubalog.hatenablog.com

元々 Enviewer の CI/CD 環境は Azure Pipelines を使用していました。

github.com

CI/CD 環境の移行時に、NuGet へのプッシュを以下のように変更しました。

やること Azure Pipelines でのコマンド GitHub Actions でのコマンド
リストア dotnet restore dotnet restore
ビルド dotnet build dotnet build
テスト dotnet test dotnet test
パッケージング dotnet pack dotnet pack
NuGet へのプッシュ nuget.exe push dotnet nuget push

learn.microsoft.com

移行に加えてやったこととして、

なお、 パッケージを nuget.org に登録する (dotnet nuget push) 際、すでに登録されているバージョンが存在する場合は、 HTTP 409 (Conflict) が返ります。

github.com

開発途中のようにバージョン番号が変更されない状態でワークフローがどんどん動くときなど、毎度失敗されては困ります。
それを回避するための対応を2つ加えました。

  1. dotnet nuget push におけるコンフリクトを警告扱いにして回避する --skip-duplicate オプションの追加
    • dotnet nuget push ... --skip-duplicate
  2. origin/main ブランチのときだけパッケージングとプッシュを行うための条件を追加
    • if: github.ref == 'refs/heads/main'

これで origin/main に変更が加えられたタイミングだけ、パッケージを nuget.org への登録を行えるようになりました。
GitHub Actions のワークフローファイルの全体はこちらになります。

github.com