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 では? という気もしますが特に深い理由はありません。もともと極小さいアプリでフレームワ…

AWS Lambda で SQS からメッセージを取得するだけのコードが多重度あげても思ってたよりスループット出なかった件

AWS

とある、SQS からメッセージをたくさん取得 → 一括でなにかする → メッセージを SQS から削除、という AWS Lambda 関数があまりスループット出なかったときのメモ。 Lambda 関数のイベントソースとして SQS を設定しているのではなく、定期実行される Lambda…

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…

virt-builder で Ubuntu 18.04 を入れようとしてハマった件

KVM

とある事情で Ubuntu 18.04 のクリーンで直ぐにぶち壊せる環境が欲しかったので virt-builder で入れようとしたらすごくハマった件。 virt-builder でゲストを作って virt-resize でリサイズして virt-customize でカスタマイズ - Qiita でやってたのをもっ…

Phan/PHPStan/Psalm を VSCode で使ってみるメモ

普段 PHP のコードは PhpStorm で書いているので VSCode で PHP のコードを開くことはほとんどありませんが、たまに PhpStorm では OK なのに Phan などの静的解析ではエラーになることがあり、その修正のために何度も phan コマンドを叩くのは辛いので(な…

composer で replace してるパッケージを削除して元のパッケージに戻そうとしたら面倒だった

とあるプロジェクトで phpstan/phpstan-shim を過去に一時的に入れていたことがあって、もう使わないので削除しようとしたところ、composer.json からは消えていたものの実際には削除出来ていませんでした。 こんな感じの依存関係になっています(これは説明…

terraform-provider-libvirt を使ってみる

先日 vagrant-libvirt を使ってみました が、libvirt も terraform-provider-libvirt を使えば Terraform で管理できるので試してみました。 インストール Terraform オフィシャルのプロバイダであれば terraform init で自動的にバイナリがダウンロードされ…

vagrant-libvirt を使ってみる

ずいぶん前に Docker Desktop (Docker for Windows) のために Hyper-V を有効にしたため VirtualBox が使えなくなりました。それに伴って Vagrant も使わなくなりました。 最初は Vagrant が使えなくなるのは辛いかな・・と思っていたのですが、開発系の作業…

いまさら vagrant-aws を使ってみる

ずいぶん前に Docker Desktop (Docker for Windows) のために Hyper-V を有効にしたため VirtualBox が使えなくなりました。それに伴って Vagrant も使わなくなりました。 最初は Vagrant が使えなくなるのは辛いかな・・と思っていたのですが、開発系の作業…

AWS DataSync を素振りしたメモ

AWS

AWS DataSync はオンプレから AWS 上の S3 や EFS にデータを転送するものというイメージだったので、それならあまり使う機会はないかなー、と思っていたのですが下記によると EFS と S3 の間でデータの転送もできるので、それなら使う機会もあるかもー、と…

Amazon Data Lifecycle Manager (DLM) と AWS Backup を素振りしたメモ

AWS

今まで EC2 インスタンスや EBS のバックアップには cron でスクリプトを回したり CloudWatch Events のスケジュールからの Lambda とかでしかやったことなかったので、Amazon Data Lifecycle Manager (DLM) と AWS Backup を EC2 と EBS だけでですが試して…

Node.js で axios とかから投げられる例外のスタックトレースが辛い

axios とかでエラーになったとき、 const axios = require('axios').default; async function f1() { await axios.get('http://localhost:9999'); } async function f2() { await f1(); } f2().catch(err => console.error(err.stack)); 素のままだとほとん…