INSERT 1文だけでもデッドロックするという話

下記の記事のように複数行に対する UPDATE は BEGIN の無い 1 文でもデッドロックすることがあります。 UPDATE1文だけでもデッドロックするという話 - tmtms のメモ これを見て思ったのですが INSERT であればバルクではない 1 行だけでもデッドロックするこ…

Terraform で本番やステージングなどの変数定義

Terraform で本番やステージングなどの複数の環境を管理するとき、環境ごとに異なる変数を管理する方法について。 Terraform のバージョンは 0.14.8 で確認しています。 案 1. -var-file で tfvars ファイルを指定 Workspaces は tfstate を分けるためだけに…

リモートの Docker ホストを開発に利用するために Mutagen を使ってみた

ローカルとコンテナ内のボリュームを同期できる Mutagen というものを最近知ったので使ってみました。 類似のツールに docker-sync がありますが、docker-sync は ruby 製なのと、同期のために別途 Unison が必要なのに対して、Mutagen は Go 言語製で依存が…

Cacti の 2020-09-13 12:26:40 問題

だいぶ昔(4年くらい前)にセットアップして塩漬けになっていた Cacti で、グラフをズームして任意の開始日時・終了日時を指定して表示しようとしても、何故かその指定が効かず、常に Daily のグラフしか出せなくなることがありました。 普段は Prometheus/G…

PHPUnit の Clover XML を Cobertura XML に変換して Gitlab の MR で コードカバレッジの可視化

以下で説明される通り、Gitlab では MR のコード差分画面で行ごとのコードカバレッジを可視化できます。 Test Coverage Visualization | GitLab この機能を利用するためには Cobertura 形式の XML をカバレッジレポートが必要です。PHP の場合 PHPUnit 9.4 …

Gitlab のマージリクエストで PHPUnit のコードカバー率の差分を表示する

PHPUnit のコードカバー率がマージリクエスト(MR)の前後でどのように変化したかの差分を MR の画面に表示するようにしてみたメモ。 .gitlab-ci.yml は次のような内容になります。phpunit でテストを実行するジョブと phpcov でコードカバレッジを計測する…

tmpfile で削除されたファイルのストリームリソースを返していて一見ダメそうだけど実は大丈夫なメモ

PHP

tmpfile の使い方の問題でぱっと見うまく動かないように見えて、でも実はうまく動くメモ。 問題のコード 要約すると次のような処理でした。 tmpfile で一時ファイルを作成 stream_get_meta_data でファイル名を得る そのファイル名に ZipArchive で書き込み …

CloudWatch に SSL 証明書の有効期限をメトリクスとして入れて有効期限を監視する

クライアント認証のために EC2 インスタンス上で Let's Encrypt の証明書で https しているサーバがあり、CloudWatch Alarm でその証明書の有効期限の監視をしたかったのでそのメモ。 CLI で証明書の有効期限のチェック openssl s_client の -attime でエポ…

CentOS 8 を CentOS Stream 8 に切り替えてみた

CentOS 8 が2021年末に終了し、それ以降も使うなら CentOS Stream に切り替える必要があるとのことなので、適当なサーバを CentOS 8 から CentOS Stream に切り替えてみました。 まずは元の CentOS 8 を最新に更新しておきます。セットアップ後にしばらく放…

CentOS 8 を virt-builder や cloud.centos.org のイメージを使って KVM に手っ取り早く入れる

CentOS 8 を virt-install でサクッと入れる - ngyukiの日記 のような Kickstart を使う方法はカスタマイズが柔軟ですが、その代わりやたら時間がかかります。 あり物のイメージを使って構築する方が手っ取り早いので、以下の2つのイメージで構築してその手…

CentOS 7 と CentOS 8 で Cron ジョブに /etc/environment の環境変数が渡るかどうかが異なる

TL;DR CentOS 7 なら /etc/environment の環境変数が渡る CentOS 8 で root でジョブを実行すると /etc/environment の環境変数は渡らない CentOS 8 で root 以外でジョブを実行すると /etc/environment の環境変数が渡る 理由 cron のジョブで /etc/environ…

PHP 7.4 で xhprof/xhgui プロファイリング

PHP

だいぶ前に xhgui 使ったときは、アプリ側にも xhgui のソースを入れて xhgui/external/header.php みたいなファイルを auto_prepend_file とかに設定していたと思うのですが、最新版だとだいぶ変わっていました。 xhprof とりあえず tideways_xhprof 拡張 …

Terraform の AWS プロバイダのクレデンシャルの優先順が AWS CLI や AWS SDK と異なる

環境とか。 Terraform v0.13.4 + provider registry.terraform.io/hashicorp/aws v3.9.0 Terraform でデプロイ対象の AWS アカウントが MFA 必須だったので aws-vault を使う前提で provider aws にはクレデンシャルの指定なし、一方で tfstate のバックエン…

Linuxbrew(Homebrew) で入れた docker-compose で ModuleNotFoundError: No module named 'invoke' と言われたときにやること

環境 まあバージョンはあまり関係ないと思いますが。 Fedora 31 (WSL1) Homebrew 2.5.2 Python 3.8.5 docker-compose 1.27.3 問題発生 Homebrew、Macは手元にないので Linuxbrew ですけど、で入れた docker-compose で次のエラーがでました。 ModuleNotFound…

NodeJS とかでファイル更新を監視してプロセスを再起動しつつ Browsersync でリロード

NodeJS や Golang で Web アプリを作るとき、サーバサイドのコードを変更したときはプロセスの再起動が必要です。毎回手でやるのはさすがに煩雑なのでファイルの更新を監視して自動的に再起動してくれる系のツールがいろいろあります。 NodeJS なら下記など…

VSCode で PHPUnit を実行する拡張を使ってみた

VSCode の Marketplace で PHPUnit で検索して出てきた中からダウンロード数が多い 3 つの拡張を使ってみました。 なお、普段は↓のようなめんどくさい環境でコードを書いています。 Windows で PhpStorm を実行している PHP は WSL 上の docker-compse コマ…

NodeJS で AsyncLocalStorage を使って横断的なトランザクション

NodeJS で Async hooks を使うトランザクションの実用的な実装 - ngyukiの日記 ですが、Twitter で AsyncLocalStorage なるものの存在を教えてもらいました。 いやこっちですね https://t.co/fyTHgKZQdq— anatoo (@anatoo) September 19, 2020 AsyncLocalSto…

NodeJS で Async hooks を使うトランザクションの実用的な実装

前に書いた NodeJS で実験的な Async hooks を使って横断的なトランザクション をもう少し実用的な実装にしてみました。とは言っても NodeJS をプロダクション用に書くことが全くないのでホントに実用的になってるかどうかはわかりませんが。 // context.ts …

NodeJS で実験的な Async hooks を使って横断的なトランザクション

NodeJS で非奨励の Domain を使ってコンテキスト的なものを持ち回すことなく横断的なトランザクション というのをやってみましたが、よくよく見てみれば Async hooks でも同じことができそうでした。 Domain は Deprecated でしたが Async hooks は Experime…

AWS の Billing Alert(請求アラート)を日々の増加分で設定する

AWS

AWS の請求アラートは昔は CloudWatch Alarm を使う必要がありましたが、最近なら AWS Budgets で簡単に設定できます。便利です。 がしかし、AWS Budgets はもっとも短いスパンでも月次の請求額なので、次のようなケースにはフィットしません。 検証用の AWS…

NodeJS で非奨励の Domain を使ってコンテキスト的なものを持ち回すことなく横断的なトランザクション

NodeJS(TypeScript) でデータベースに繋いでみます。NodeJS だと MongoDB とかのが多い気もするのですが MySQL 脳なので MySQL です。 接続に使用するパッケージは mysql2 が Promise 対応していて良さそう、と思ったのですが型定義が @types になくて types…

VSCode で WSL 上のシンボリックリンクを含むパスで NodeJS(TypeScript) をデバッグ

Fedora 31 on WSL1 NodeJS 14.4.0 VSCode 1.48.2 Remote WSL で VSCode を WSL 上で簡単に実行できるので、次のような Launch Configuration だけでリモートデバッグ出来ます。また、runtimeExecutable やら runtimeArgs やらで ts-node を使えば ts が直接…

自分用 PHP の Docker イメージを Docker Hub で自動ビルド

ngyuki/php-dev - Docker Hub に自分用の PHP の Docker イメージを置いています。これを新しい PHP のバージョンがリリースされたときに自動ビルドするために試行錯誤したメモです。 Docker Hub の Repository Links で自動ビルド → ダメ 最近になってから…

Slim4 を使ってみたメモ

PHP

とある社内用のツールで Silex を使っていたのですが、随分前に DEPRECATED になっている ので、Slim4 にリプレースしました。 Silex からの移行なら Symfony Flex では? という気もしますが特に深い理由はありません。もともと極小さいアプリでフレームワ…

nginx の php-fpm で index.php のフロントコントローラーありきの設定

おそらく素の php ファイルをドキュメントルートに置いて URL に拡張子 .php を含むアクセスを有効にするため、location で正規表現とか、try_files の最後で index.php とか、fastcgi_split_path_info とか、いろいろ難しいことがされている例を良く見るの…

Rclone を使ってみる

sshfs と似たようなこともできる Rclone も使ってみました。 Rclone は ssh(sftp) だけでなく Amazon S3 とか Google Cloud Storage のようなクラウドのオブジェクトストレージとか、その他色々使えます。非常に高機能です。 scoop でサクッとインストールで…

WSL2 で sshfs と afuse でリモートホストを自動マウント

SSHFS-Win が便利そうだった - ngyukiの日記 ですが、よく考えてみれば WSL2 なら fuse も動くだろうので WSL2 で sshfs でリモートホストをマウントして \\wsl$\Ubuntu-20.04\mnt\ore-no-server みたいな UNC パスでアクセスすればいいのでは、と思ったので…

SSHFS-Win が便利そうだった

Windows でも sshfs でリモートホストのディレクトリをマウントできるやつです。 billziss-gh / sshfs-win:WindowsのSSHFS Chocolatey で入れようと思ったのですが、すごく古い? あるいは別物? https://chocolatey.org/packages?q=sshfs https://chocolat…

AWS Transit Gateway を使ってみるメモ

AWS

Transit Gateway (TGW) を使ったことが無かったので、試しに使ってみました。残骸はこちら。 Direct Connect や VPN Connection では簡単には試せないので VPC と Transit Gateway Peering のみ試しています。 構成要素 TGW の構成要素について。 アタッチメ…

Ansible で amazon-cloudwatch-agent をプロビジョニングしようとしたら毎回 changed になった件

環境 CentOS 7.8.2003 amazon-cloudwatch-agent 1.246396.0 Ansible で amazon-cloudwatch-agent をプロビジョニングするために次のようにロールを書いていました。 ### tasks/main.yml - name: install cloudwatch-agent yum: name: https://s3.amazonaws.c…