koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Azure嫌になっちまったな —— 趣味の拠点をAWS CloudFrontへ移す話

Azure CDNが来年廃止になることは認識していたのだけれど、それより1年以上早く「証明書の更新止めるから実質使えなくなるよ」と案内が来たのでしぶしぶAWSのCloudFrontに移行していた。

来年までは放置のつもりだったところに嫌な不意打ちである。

かなりムカついているのだけれと、ムカつきを記事にするほどのエネルギーもないのでCopilotGeminiだったに代弁してもらった。

代弁内容には欠片も思っていないことも含まれているけれど、ホビーユースではAzureでCDNを使えなくなったこと、他の部分からもエンタープライズ志向が強くなっていて日曜プログラムには使いづらくなっていっていることはとても寂しい。

世のAzureホビーユーザーはどういう気持ちでいるのだろう。

料金 - Content Delivery Network (CDN) | Microsoft Azure

続きを読む

phpMyAdminをAWSのLambda関数URLで動かす

phpMyAdminをAWS App Runnerで運用している。VPCに繋がって、メンテナンスフリーで、低コスト、とそのくらいの用途には丁度良かったのだが、この度新規のサービス立ち上げが終了することになった。

docs.aws.amazon.com

App Runnerを使っている人には周知の事実として、サービスが壊れやすく、壊れたら復旧できず新規にサービスを作り直すしかなくなることがある。

つまり? 更新にしくって壊れたら一環の終わり。

終了の案内には移行先としてECS Expressが提示されているが、ALBだけでApp Runnerの最小コストをぶっちぎって行くほどのコスト差がある。

移行の案内の構成図(案内から引用)

AWSでWebアプリケーションを低コストなコンテナホスティングするには? Lambda関数URLになるだろう。API Gatewayすら置きたくない!

というわけで、CopilotにphpMyAdminの公式イメージをLambda関数で動くようにラップしてもらった。

詳しくはリポジトリのREADMEにCopilotが書いたノートがある。一応校正はした。

github.com

手元の環境ではなんとなく動いている。これでApp Runnerが壊れても安心だ!?

Aurora for MySQL r6g to r8g のパフォーマンス変化例

先日、昼の仕事でAuroraのインスタンス世代を上げると相応に性能が上がる、のような記事を書いた。

developer.hatenastaff.com

その記事を書いているときに別件でこのブログに(規模は小さいが)同様の事例を書いていた気がしていたのだけれど、見当たらなかったので気のせいということにしていた。

ついさっき下書きを眺めたらそれらしいメモが転がっていたので公開しようと思った次第。

本編より前置きの方が長いが大丈夫か?

以下は下書きほぼママ、下書きと言うよりはメモか残骸と言ったほうが正しいかもしれないが、1例として多少の価値はあるだろう。多分。

なお、インスタンスサイズはxlarge。前後で変更なし。

CPU使用率にめちゃくちゃ余裕があるのはガチピーク負荷基準でRIを買っているから。これ、リニアにスケールしたい。が、Serverless v2比では全然安い。Auroraのリソース効率はムズい*1


メトリクスを眺めたのでWebアプリケーションの実測での参考として記録しておく。

性能が向上していた項目

CPU使用率以外は誤差の範囲だが、多少傾向としてレイテンシが下がっている項目があった。

CPU Utilization: 30~40%程度使用率が低下

宣伝上はr6g->r7gで最大30%、r7g->r8gで最大40%処理能力向上

まあまあそれらしく性能向上しているのではないか?

Select Latency: 1.5ms->1ms程度

Commit Latency: 2.8ms -> 2.5ms程度

この辺は誤差かな。 元々の負荷が低いのだろう。

Webサービス開発に生成AIが入り込んできている例

2026年3月末現在自分は株式会社はてなでソフトウェアエンジニアをやっているのだけれど、副業としてWebサービスの開発運用を手伝っている*1。そこでの開発に生成AIが入り込んできた感があるので、中小規模のサービス提供事業者の現場感を記録しておく。

  • 2026年3月末の入り込み具合
  • 2025以前の試みとの差
  • 所感

*1:このブログにある「はてな」っぽくないPHPの事例は概ねそこから出てきている

続きを読む

VPS1台で動いていたLAMPなLaravel5をServerlessなLaravel12にした

VPS1台で動いていた10年物のWebアプリケーションを、AWSのサーバレス環境にした例のメモ。

そのうち移行が必要なことは何年も前から分かっていたのだけれど大分億劫だったのが、昨今の生成AIを使えばそんなに手間をかけなくても移行できるのではないか? と思って試して、実際さほど手間をかけなくても移行できた気がしている。

PHPのコードが数千行程度の小規模なものなので手でやっても手間は大差なかった可能性もあるが、生成AIがきっかけにはなったので助かった。

  • ワンチャンCopilot Coding Agentがやってくれないか?
  • 生成AIでの移行感
    • Laravelのアップグレード
    • ファイルアップロード先の変更
    • Serverless Frameworkの構成
    • フロントエンド
  • まとめというか小並感
続きを読む

この半年の生成AIの仕事ぶりの成長に感動した

Claudeなら4.0から4.6のモデル世代差。

「感動した」という感情を発露しているだけで、ナレッジなどは特にないお気持ち記事です。

GitHub Copilot Coding Agentアプリケーションの言語間移植進行について、現状の進行状況を棚卸しし、完了までの計画を立てて貰っていた。

過去には棚卸しが全く行えず、架空の機能を列挙して完了を目指す激しいハルシネーションが発生していた。 一方で直近の世代では実際の進行状況、存在するTODOや機能を正しく列挙し、完了を目指すため計画を立てることが出来た。 そして、移植進行を指示することで実際に残余のTODOが消化されていった。

特別な工夫をしなくても、実際的な仕事を行えるようになったと感じる。 このパラダイムシフトは凄い。AI驚き屋になってしまいそうだ。

半年前の指示
最近の指示

一方で「移植が正しく行われたか?」は未検証で、あくまでコードベースで「一見移植した」だけに過ぎない。

妥当性を検証する必要がある。

今後の生成AI活用に当たっての鍵は、この総合的な検証をどう行うかになってくると思う。

人間が妥当性を確認していてはそこで律速することは目に見えている。

いかに生成AI自体が総合的な検証を行えるようにするのか? これが大事になってくるだろう。

見せてもらおうか、RDSのBlue/Greenデプロイの性能とやらを

先立つ2025年1月20日に以下のようなAWSのRDS Blue/Green Deploymentsについての記事が出た。

aws.amazon.com

なんでも、RDS(やAurora)をBlue/Greenデプロイで切り替える際のダウンタイムが5秒未満になるのだとか。

「マジ?」

どういう理屈でそうなるんだ? ということは、この辺から類推できるようなできないような。

Switching a blue/green deployment in Amazon RDS - Amazon Relational Database Service

Make sure that your network and client configurations don’t increase the DNS cache Time-To-Live (TTL) beyond five seconds, which is the default for RDS DNS zones.
 Otherwise, applications will continue to send write traffic to the blue environment after
 switchover.

DNSがちゃんとTTL通りに名前解決するようにしろ。ここに5秒というキーワードがある。

ということで、ちょっとBlue/Greenデプロイ時のDNS応答の様子を眺めてみた。

サンプル

サンプルはAurora for MySQLクラスタエンドポイントのホスト名で問い合わせたもの。

Blue/Greenデプロイを作る前

CNAMEレコードでWriterのホストを返すのを経由して、WriterのIPアドレスを解決している。

ここではTTLは60秒。

AWSの名前解決はALBなどのエイリアスレコードの場合も60秒なので、TTL60秒が標準なのだろう。

;; ANSWER SECTION:
hoge-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com. 60 IN CNAME hoge-aurora.xxxx.ap-northeast-1.rds.amazonaws.com.
hoge-aurora.xxxx.ap-northeast-1.rds.amazonaws.com. 60 IN A 172.31.12.95

Blue/Greenデプロイを作った後

応答内容は同じでTTLが5秒になった。

なるほど。これで行儀がよいクライアントなら5秒未満で接続先を切り替えることができるわけだ。

;; ANSWER SECTION:
hoge-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN CNAME hoge-aurora.xxxx.ap-northeast-1.rds.amazonaws.com.
hoge-aurora.xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN A 172.31.12.95

Greenに切り替えた後

CNAMEレコードがGreenのWriterのものになった。

ちゃんとTTL通りに接続先を解決しなおしていれば、5秒未満で接続先が切り替わる。

;; ANSWER SECTION:
hoge-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN CNAME hoge-ap-northeast-1c-green-yyyy.xxxx.ap-northeast-1.rds.amazonaws.com.
hoge-ap-northeast-1c-green-yyyy.xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN A 172.31.10.119

Blue/Greenデプロイを削除した後

CNAMEレコードがデプロイ前と同じものになるが、それが示す先はB/Gで切り替えたものと同じになっている。

TTLは5秒のままだが、少し待ってから再問合せしたらいつの間にか60秒になっていた。

;; ANSWER SECTION:
hoge-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN CNAME hoge-ap-northeast-1c.xxxx.ap-northeast-1.rds.amazonaws.com.
hoge-ap-northeast-1c.xxxx.ap-northeast-1.rds.amazonaws.com. 5 IN A 172.31.10.119

所感など

5秒未満のダウンタイムになる理屈はなんとなく分かった気がする。

実際には名前解決以外にもBlueへの問い合わせ失敗から再接続までのオーバヘッドなどがある、この理論値通りにはならない。

別にAWSの回し者ではないが、理論値に近づけたければRDS Proxyを挟んだり、チューニングされた接続ライブラリを使うのが良いのだろう。

この動作に最適化されているAWS公式のJDBCドライバはこちら

同日に最新版がリリースされているので、ガチでチューニングする際の参考になるのかもしれない(詳しくは見ていない)。

github.com