EC2 でインスタンスを停止せずにルートボリュームを置き換えてみるメモ

AWS

少し前に AWS EC2 でルートボリュームをインスタンスを停止せずに交換可能になったと発表がありました。 EC2 でルートボリュームを交換することにより、迅速な復元とトラブルシューティングが可能に え、停止せずにって、無停止でってこと? そんな馬鹿な(…

AWS Lambda で PHP のカスタムランタイムのコンテナイメージを作ってみるメモ

もう結構前のことですが、AWS Lambda に zip ではなくコンテナイメージでデプロイ出来るようになったとのことです。 AWS Lambda の新機能 – コンテナイメージのサポート | Amazon Web Services ブログ ので試してみました。残骸はこちら。 コンテナイメージ…

ParaTest で TEST_TOKEN を使って DB が絡むテストを並列実行する

だいぶ以前に Qiita に ParaTest で PHPUnit を並列実行する記事を書いていたのですが、 ParaTest と Docker で PHPUnit を並列実行する試み - Qiita 続:ParaTest と Docker で PHPUnit を並列実行する試み - Qiita よく考えたら別に Docker なんて必要なく…

AlmaLinux を KickStart とか CentOS からのインプレースとかで入れてみる

CentOS 8 の代替になるかもしれない AlmaLinux が GA リリースとのことなので、とりあえずインストールしてみました。 https://almalinux.org/ KiskStart でインストール KVM with libvirt へ virt-install で KiskStart でインストールしてみます。 手順は …

CodeBuild/CodeDeploy/CodePipeline で ECS にデプロイする素振り

AWS

CodeBuild/CodeDeploy/CodePipeline を使って ECS にデプロイを素振りしました。 残骸はこちら。 デプロイの流れ デプロイの基本的な流れは次のとおりです。 VCS からソースコードを取得 CodeBuild でイメージをビルドして ECR にプッシュ このときイメージ…

SQL で範囲が記録されたテーブルから任意の範囲が隙間なくすべて埋まっているか得る

次のようなテーブルがあったとします。1 レコードが a~b の範囲を示しています。終端の端点は含みません。例えば 3~6 なら 3,4,5 を含む範囲です。 create table t ( id int not null primary key auto_increment, a int not null, b int not null ); inse…

標準入出力を使って OpenSSH の -L や -R のようなポートフォワードを行うツールを作った

標準入出力で OpenSSH の -L や -R のようなポートフォワードを行うツールを作成しました。 ngyuki/somux: somux is simple port forwarder via stdio ローカルへのインストールは go get github.com/ngyuki/somux で、Docker イメージは docker pull ngyuki…

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 で自動ビルド → ダメ 最近になってから…