理系学生日記

おまえはいつまで学生気分なのか

「新規事業の実践論」を読んだ

新規事業の実践論を読みました。 新規事業の実践論 (NewsPicksパブリッシング)作者:麻生要一ニューズピックスAmazon この本は、いわゆるスタートアップではなく「社内起業」に関する実践的なノウハウを扱ったものです。 勤める会社を飛び出して自ら事業を起…

GitHub ActionsでTerraformのinit/fmt/plan

これまでTerraformに関するCIとしてはGitLab CI/CDを使っていました。 最近はプライベートでGitHubを利用しTerraform周りのコードを管理しており、GitHub上でのCIを色々試行錯誤しています。 ようやく以下のように、terraform planの結果等をPull Requestへ…

.terraform.hcl.lockでChecksumエラーが発生する問題と対策

Terraformをローカルで実行するときには正常でも、いざGitHub ActionsやGitLab CI/CDでTerraformを実行すると以下のようなエラーと遭遇するケースがあります。 │ Error: Failed to install provider │ │ Error while installing hashicorp/aws v3.68.0: the …

GitHub ActionsでAWSのクレデンシャル登録なしにAWS操作を行う

これまでGitHub ActionsからAWSのリソース操作しようとすると、以下のような対応が必要でした。 権限を絞ったロールを付与したIAMユーザを作成する そのアクセスキーIDをGitHub Actionsに登録し、Jobから利用できるようにする しかし、GitHub ActionsがOIDC…

TerraformでAWS Budgetsを設定する

プライベートでもAWSを使っているのですが、そういえばAWS Budgetsを設定しようと思って忘れていました。 AWS Budgetsとは AWS Budgetsは、コストや使用量を追跡し、予実の可視化やコスト等が閾値を突破したときのアラートを通知してくれたりするサービスで…

Launcherを使ってiPhoneのホーム画面に表示できるアプリ数を多くする

日本でiPhone 3Gが発売されて以来、ずっとiPhoneユーザとして生きてきました。 それでもずっと問題だったのが、いわゆるホーム画面のアプリ1軍問題です。 ホーム画面には少数のアプリ(1軍アプリ)しか配置できず、それ以外の2軍以降のアプリは他画面に配置す…

GitLab CI/CDでMarkdownファイルをdocxファイルに変換し、Generic Packages Repositoryにアップロードする

手動でいちいちpandocを実行するのは面倒です。 Merge Requestの作成やそのbranchに変更が入ったタイミングで、Markdownファイルをdocxファイルに変換し、リポジトリにアップロードしたい。 実際にこれを実装すると、以下のようにMerge Requestに紐づく形で…

GitLab CI/CDで生成したファイルをGeneric Packages Repositoryに配置する

GitLabにはPackage Registryという機能があり、様々な言語のパッケージをホストできます。 Maven packages in the Package Repository | GitLab npm packages in the Package Registry | GitLab PyPI packages in the Package Registry | GitLab 一方で、言…

markdownをpandocでdocxに変換する

MarkdownのファイルをベースにPull/Merge Requestでやりとりすることが難しいケースというのは存在します。 そういった場合、指摘やそれに対する修正は、変更履歴の保存の容易なWord形式を使うのが楽でしょう。 Word での変更履歴の記録 そして、こういった…

Gitで変更のあったファイル一覧をコミットメッセージや空行なしで抽出する

git

課題 ファイル一覧の抽出については--name-onlyを使うのはよく知られているテクニックです。 例えば以下では、一週間前からコミットされたファイルを抽出しています。しかし、コミットハッシュやコミットメッセージは不要です。どうしたものでしょう。 $ git…

「プログラミングTypeScript」を読んだ

プログラミングTypeScriptを読みました。 プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発作者:Boris Chernyオライリー・ジャパンAmazon TypsScript 最近はどこも、JavaScript書くんだったらTypeScript書いてトランスパイルという状…

他者から与えられたミッションに身を投じても良いんじゃないかという仮説

「自分が会社で何をしたいのかわからない、なぜなら人生で何をしたいのか答えが出ていないからだ」というような悩みを聞くことが多くなってきて、うん分かるーという感じがします。 この種の問いに対して、なかなか上手く切り返せずにきました。 それはぼく…

「起業の科学」を読んだ

新規事業開発という分野へ関わることになりました。 右も左もわからんなという状態のぼくにお薦め頂いた本、「起業の科学」を読みました。 起業の科学作者:田所 雅之日経BPAmazon 読後感 これから 読後感 一言で言えば読んで良かったです。 非常に良いなと感…

チームのタスクを全部ソースリポジトリのissueとして記載するのは違うのではないか

先日チームのレトロスペクティブで、タスクがチケット管理できてないよねという話があがった。 チームで仕事をするときのタスク管理はだいたいGitLabやGitHub、Azure DevOpsで行おうとするのだけれど、うまくいかないことが結構多い。 なんでうまくいかない…

Azure Database for MySQLでスロークエリログをLog Analytics Workspaceに連携する

Azure Database for MySQLでも、スロークエリを検出できます。 今回はこのスロークエリログをLog Analytics Workspacesに送信してみます。 Azure Database for MySQLでのスロークエリ取得 動作確認 Terraform コード Azure Database for MySQLでのスロークエ…

Application Insightsをフロントエンドで使うときInstrumentation keyとどう向き合うか

AzureにはApplication InsightsというAPMがあります。 Application Insights は Azure Monitor の機能であり、開発者や DevOps プロフェッショナル向けの拡張可能なアプリケーション パフォーマンス管理 (APM) サービスです。 Application Insights とは何か…

ISUCON11予選で敗退してきました

一昨年同様、@kkasaiさん、@hondaYoshitakaさんとISUCON 11へ参加しました。 一昨年はインスタンスチェックに失敗し、まさかのスコア0でフィニッシュでした。 一方で、今年はきちんとインスタンチェックも無事パスし、最終的なスコアは12,000前後という結果…

TerraformによるAzure Database for MySQLのポイントインタイムリストア・Geoリストア検証

Azure Database for MySQLのリストア検証のお時間です。 Azure Database for MySQLのリストア前提 準備 PointInTimeRestore Geoリストア 注意点 Azure Database for MySQLのリストア前提 Azure Database for MySQLにおいては、データベースのバックアップは…

AWS SDK + LambdaでAWSの前日コストをSlackに通知する

AWSを使っていると、変な使い方をしてると予算をオーバーしてしまいます。 このため、日次でAWS Cost Explorerを確認しているのですが、これはこれで面倒です。 面倒な行為というのはだいたい能動的な確認が求められるのから面倒であるので、 AWS Lambdaから…

自分のグローバルIPアドレスを知る

Azure Database for MySQLに自分のグローバルIPアドレスから接続したいというとき、グローバルIPをCMANで確認をしていました。 さすがに面倒になって、何か良い方法がないかなと思ったら、グローバルIPアドレスを返却してくれる様々なサービスがあることを知…

azurerm_mysql_databaseのcharset、collation指定は効果があるのか

TerraformでAzure Database for MySQLを構築する場合、必ず利用するであろうリソースがazurerm_mysql_databaseです。 このリソースはcharset、 collationが必須パラメータです。 それぞれ文字セット、照合順序を意味しており、MySQLを利用する方は気にしたこ…

Azure PipelinesでPull RequestをトリガーにCIを走らせる (または、CIトリガーとPRトリガーでの重複実行を抑止する)

Pull Requestが作成されたらCIを実行したい。こういったユースケースはよくあります。 Azure Pipelinesでもこの実現はできるのですが、この実現にはかなり癖があります。 結論 PR Triggerの設定は、azure-pipelines.ymlではなく、Azure ReposのBuild validat…

Azureの複数Subscriptionを扱う場合は頻繁にaz logoutすべき

あれ、これ本当なのか、という挙動になったのが複数Subscriptionを扱う場合。 例えば私のアカウント状況が以下のようになっているとします。 $ az account list | jq '.[] | { "env": .name, "mail": .user.name }' { "env": "Staging", "mail": "kiririmode…

Azure上のTerraform Backendに対してAD認証を行う

AzureをTerraformで管理する場合、TerraformのRemote Stateとして Azure Blob Storageを設定することになります。 Backend Type: azurerm - Terraform by HashiCorp ここで問題になるのはAzure Blob Storageに対する認証でしょう。 Azure Blob Storageの認証…

Azure Pipelinesのscriptではset -eする

Azure Pipelinesでは様々なPipeline用のタスクが用意されています。例えばMaven taskだったり、 Docker taskだったりです。 Build and release tasks この中で柔軟性が高いのはCommand Line taskや Bask taskでしょう。 例えばCommand Line taskでは、以下の…

例示用ドメインと例示用IPアドレス

rfc

ガイド上でサンプルのドメイン名を例示したい、テストデータでダミーのメールアドレスを登録したい、 ドキュメントでサンプルのIPアドレスを示したいといったケースがあります。 こう言ったときに記述するドメイン等は、記述時点では世界中に存在していなか…

Terraformで学ぶAzure Database for MySQL

Azure Database for MySQLをTerraformで構築してみます。 Terraformの構成 サーバとデータベース ネットワークアクセス制御 ファイアウォールルール VNETサービスエンドポイント 接続確認 インターネットからの接続 VNETからの接続 まとめ Terraformの構成 …

Azure PipelinesのService Connectionを使ってAzure Container RegistryのコンテナをPULLする

Azure Pipelinesにおいて、ジョブを動かすコンテナイメージをAzure Container RegistryからPULLしたい。 これを実行するとき、docker loginでACRにログインするんだろうなと考えていました。そうすると、ログイン用のクレデンシャルを保存しておかなければな…

Dockerイメージの`entrypoint`を複数引数のコマンドで上書きする

hashicorp/terraform:1.0.0のように、entrypointが指定されているコンテナイメージに対して、entrypointを上書きしたいケースがありました。 上書きするのが1引数ならdocker runに--entrypointを指定すれば良いです。 $ docker run --rm -it --entrypoint /b…

Azure PipelinesのジョブがInitialize Containersフェーズでuseradd Permission denied.で失敗する

Azure上でコンテナベースのジョブを作ったら、Initialize Containersフェーズでuseradd: Permission denied.というエラーが発生しました。 Try to create a user with UID '1001' inside the container. /usr/bin/docker exec dee61730d7328016d8d3f56d81cb0…