Kubernetes の HPA(HorizontalPodAutoscaler) の Utilization

kubernetes の HPA(HorizontalPodAutoscaler)の Utilization で指定する cpu 使用率、いわゆる論理1コアを 100 とするパーセンテージなのかと思っていたら違ったのでメモ。 例えば次のように設定されているとき、 # HorizontalPodAutoscaler ...snip... minR…

コアファイルを gdb with VSCode で解析

とあるサーバで1年ぐらい前に発生していた Apache が異常終了したときに abrt によって収集されていたコアファイルを解析したメモ。 abrt について abrt というのはプロセスでコアダンプが発生したときにそれを所定のディレクトリに保管したり(デフォルトだ…

AWS SDK for PHP の SQS::ReceiveMessage でシグナルを受けたときに long pooling を中断して終了したい

指定されたコマンドを子プロセスで実行し、特定のシグナルを受けたときは子プロセス終了時にリスタートするシェルスクリプト

はじめに php で作ったキューワーカーのようなサービスをコンテナで実行させる サービスはシグナルをハンドリングしていわゆるに Graceful に終了したい サービスが終了したときは普通にコンテナも終了する ただしローカルの開発環境では特定のシグナルを受…

S3 に保存された CloudFront のログを見やすく整形するツーライナー

AWS

要するに TSV や CSV は column コマンドで見やすくなる&# の行はちょっと特殊なので加工が必要。 aws s3 cp s3://XXX/YYY/ZZZ/ ./log/ --recursive --exclude='*' --include '*.2022-10-27-*' zcat log/*.gz | sed -r '/^#Version/d;/^#Fields:/{s/\s/\t/g…

ログに含まれる UNIX タイムスタンプを書式化するワンライナー

ログに日時が [1659316846] のように UNIX タイムスタンプで記録されているときに人にわかりやすく書式化するワンライナー。 cat <<'EOS' >log.log [1659316843] りんご [1659316844] ごりら [1659316845] らっぱ [1659316846] perl EOS cat log.log | perl …

ECS でサービスにアクセスがないときにタスクを自動的に停止して、アクセスがあったときに自動的に開始する

AWS

ECS で Review Apps のような、マージリクエスト(普段会社で Gitlab を使っているのでそう呼んでますが PR=プルリクエスト でも概ね同じです)の都度、コンテナイメージのビルド、ALB ターゲットグループ作成、ECS サービス作成、ALB リスナーにルール追加…

AWS で Oracle Linux 8 を動かしたメモ

とある事情で AWS で Oracle Linux 8 を使ってみることになったのでそのメモ。 AMI AMI は所有者を 131827586825 で検索するとずらずら出てきます。 参考:https://community.oracle.com/tech/apps-infra/discussion/4417739/launch-an-oracle-linux-instanc…

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 なら下記など…