正論なんて諭んないで

cordx56のブログです

2024年のベストバイ

こんにちは。2024年も終わりが近づいています。いかがお過ごしでしょうか?

今回は、今年を振り返って、「あーこれは買って良かったな」と思えるような、ベストバイ商品をランキング形式で紹介します。 気になるものがあれば、質問してくれれば答えます。

なお、金額は現在調べて出てきたもので、購入場所や購入時期によって異なります。

ベストバイランキング

それでは、早速ベストバイランキングに入ります。

1位

これは2つ合わせて1位です。

イヤホン:THIEAUDIO Prestige LTD @ 209,000円

USB&Bluetooth DAC:Astell&Kern AK HB1 @ 24,750円

異常金額のイヤホンとそれを手軽に再生するためのDACです。 イヤホンはe-earphoneで高級イヤホンを聴きまくった結果、一目惚れしたイヤホンを数ヶ月悩み倒した結果買いました。 DACはBluetooth DACで予算5万円程度で、e-earphoneでイヤホンと組み合わせて一番良かったものを買いました。 予算内では一番高かったかな?

最も日常に影響を与えたものなので、堂々の1位です。

2位

これも2つ合わせて2位になりました。

タブレット:M4 iPad Pro 11インチ WiFiモデル @ 168,880円

キーボード:iPad Pro用Magic Keyboard @ 49,800円

異常高額タブレットと異常高額キーボードです。 11インチのiPad Proは、2018年の初代をずっと使ってきましたが、電池持ちも悪くなってきて(といってもまだ良い方なので驚きですが)、良い加減買い替えるか、で買い替えました。 Magic Keyboardは初めて買ったのですが、あの薄さであの体験は驚きです。 11インチモデルは小さいバッグにも入るので、気軽に持ち出せて便利です。 パソコンを持っていけない、持っていくのがつらい、パソコンを取り出すほどの作業ではない時に使っています。

こちらも日常に与えた影響が大きいので、2位にしました。

3位

VRChatアバター:ネージュ @ 4,000円

VRChatアバターのネージュくんです。 長らくルナトくんを愛用していたのですが、ネージュくんを遅ればせながら買ってみたら、メインアバターにまで押し上がりました。 ネージュくん自体はルナトくんと比べるとかわいい控えめの男の子という感じですが、そんなネージュくんをかわいく仕上げた改変が本当に大好きです。

写真もいっぱい撮り、VRChat生活に大きな影響を与えたので3位です。

4位

3Dプリンタ:Bambu Lab P1S @ 130,000円

エンクロージャ付きでABSなども印刷できる優れものの3Dプリンタです。 まだ買ったばかりですが、キーボード関連の小物などをたくさん印刷しています。

これから日常に大きな影響を与えてくれるだろうというわくわくも込めて、4位です。

5位

アナログレコード:syrup16g delayedead 発売20周年記念盤 @ 5,500円

レコードプレーヤー:Sound Burger @ 23,980円

大好きなバンドであるsyrup16gのアルバム「delayedead」の記念レコード盤と、レコードプレイヤーです。 音楽を聴くという意味ではSpotifyで十分なのですが、これは明確な所有感と再生をしているという実感の面でとても体験が良かったです。 初めて買った、聴いたレコードになりました。

番外編

番外編として、自分で買ったものではなく、人からもらったものや体験でベストだったものを紹介します。

1位

旅行:フレンドさんとサシで伊豆旅行

マジでよかったです。 なんとこのフレンドさんとはリアルではこれが初対面だったのですが、本当に仲良く、楽しくさせてもらいました。 ありがとう。

### 2位

リキュール:フランジェリコ

これはFFの人から贈ってもらったお酒です。 特別記念日とかだったわけではなく、元気を出して欲しいというメッセージと共にいただいたものでした。 とても元気が出ました。 ありがとう。

3位

3coinsのヘアゴム

これもFFの人にもらったものです。 最近ポニテにして、良いヘアゴムが見つかっていなかったのですが、この3coinsのヘアゴムはとても使いやすくて気に入っています。 美容とかに詳しい人だったので、流石だなと思いました。 ありがとうございました!

4位

カービィの巾着

薬を雑な袋にしまって持ち歩いていたら、それを見かねたフレンドさんに買ってもらいました。 使い勝手が良く、かわいい見た目でいい商品です。 100均らしいですが、満足度が高い一品でした。

おわりに

いかがでしたでしょうか! 今年は大変な一年でしたが、それを支えてくれたすべての物、体験に感謝します。

来年もよろしくお願いいたします!

恋人のくれた時間

恋人がくれた時間が壊れてしまった。

死別した恋人は、時計が好きだった。 時計を眺めては針を動かし、過去へ未来へと自由に放浪をするのが趣味だった。

恋人は研究者だった。 狭い家には時空間実験室があった。 恋人は実験が大好きで、よく夜中に実験室にこもっては10年後まで出てこなかったりした。 私は恋人が実験室から出てくるのを気長に待ったり、たまに実験室に入って実験の邪魔をしては、怒られて4分前につまみ出された。

恋人はよく時間をプレゼントしてくれた。 特に、毎年クリスマスには、長くて持ちきれないほどの時間をくれた。 外で時間をくれたときは、ぽろぽろこぼしてしまって、「もったいないよ〜」と言いながら儚そうな顔で時間を拾い集めていたのをよく覚えている。

恋人が死んでから、恋人がくれた時間はだんだん短くなっていった。 恋人が生きているうちには、短くなる時間より恋人がくれる時間の方が長くて、「こんな時間使いきれないね」と笑っていたが、恋人がいなくなってしまってからは時間は短くなる一方だった。

今日、起きたら、恋人のくれた時間は壊れていた。 朝おきて窓の外を見たら、太陽は西にいて、飛行機は後ろ向きに飛び、人は静止していた。 鏡を見たら私は幾分も老けていて、飼っている犬は子犬に戻っていた。 私の腕時計は過去の方向を向いていて、部屋の掛け時計は時間を潰していた。

恋人のことを忘れたわけではないが、恋人がいない生活に慣れてしまった罰かなと思って、実験室を覗き込んだら、実験室はできる前に戻っていた。

恋人の形見の腕時計をしてみると、その時計だけは正確に時を刻んでいた。 まるで時間を壊してしまった私を叱っているみたいで、おかしいようなさみしいような、そんな気持ちになって、そっと時計を外しては、実験室のある場所に静かに置いておいた。

遠い未来の朽ち果てた実験室では、幼い恋人が遊んでいた。

Tweet generatorのサービス提供を終了しました

こんにちは。

ご無沙汰しております。 ご無沙汰の記事がこれになってしまったことは何か寂しいような気もしますね。

3年以上にわたり提供していたWebサービスであるTweet generatorですが、この度サービスの提供を終了しました。 つい先ほどCNAMEレコードを書き換えましたので、キャッシュが尽きるに従い徐々にアクセスができなくなっていくかと思います。 時間が経ってDNSキャッシュが尽きたであろう頃に、アプリケーションサーバも停止しようと思っています。

サービス終了に踏み切った理由としては、Twitter APIの有料化と、ここ最近は収益状況が悪くなっていたことが挙げられます。

Tweet generatorはこれまでに50万を超えるユーザの方にご利用いただき、さまざまな反響をいただきました。 その過程で、私としても非常に勉強になることが多かったと思っています。 また、広告収入により一時的ではありましたが、生活に余裕も生まれました。 ある方は私のメールアドレスを探し出し、500円のAmazonギフトカードを贈ってくれました。 (この方には感謝を伝えることができないでいます。ありがとうございました!)

Tweet generatorのアクセス数が跳ね上がってから3年と少し経ちましたが、これは今でも忘れられない貴重な経験になっています。 今後はTweet generatorによって得られた経験などを踏まえ、適切な情報発信や新サービスの開発に努めていこうと思っています。

皆様には最後までサービスをご利用いただき、また支えていただきましたことを御礼申し上げるとともに、今後とも私や関連サービスをどうぞよろしくお願いいたします。

mixiさんでおしゃべりロボットを作っておりました

こんにちは。 確定申告が無事終了し、安堵しております。 みなさんはいかがお過ごしでしょうか? そろそろ新生活という方も多いのではないかと思います。 みなさんの新生活、応援しております。

さて、今回は株式会社ミクシィさんにインターンで参加させていただいておりましたので、そのことについて書いていきたいと思います。

応募

元々mixiさんとは、大学のサークルに来ていただいていた就活エージェントさんにBSCという1dayイベントを勧められたという経緯で関係がありました。 その後、インターンシップ情報が集まるスプレッドシートにmixiさんが記載されていたところから、インターンに応募させていただきました。 mixiさんの手がけている事業などは全然知らなかったのですが、求められているスキルと自分のスキルセットが合っていたこと、そして時給がそれなりに良かったこと1などが応募の決め手になりました。

面接は4回あり、人事面接、1回目のエンジニア面接、2回目のエンジニア面接、配属先部署面接、と言った感じでした。 インターンの面接で4回も面接をしたのは初めてだったので、驚きました。

配属

記事タイトルの通り、Romi事業部というところで、おしゃべりロボットの開発をしておりました。 Romiというのは、mixiさんのRomi事業部というところで開発されているおしゃべりロボットで、Romiに話しかけて会話を楽しんだり、Romiの方から話しかけてくれたりします。 mixi自体はバリバリWeb企業風という印象があったので、ロボットの開発をしているというのは少し驚きました。 ただ、ロボットだから組み込み、というわけではなく、Romiの会話を司る部分はAPIサーバを叩くようになっており、私はサーバサイドの開発をさせていただいておりました。

配属先については、事前の面談でご相談させていただいていて、私がPythonの研究をしていることなどからサーバでPythonを利用しているRomi事業部が気になるという旨を伝えて、配属先部署面接を組んでいただいた、と言った感じでした。

開発環境

開発環境は、入社時に貸与されるパソコンをWindows機かMacBookで選べると言った感じでした。 私はUS配列のMacBookを選んで、M1のMacBook Airが貸与されました。 ただ、Romi事業部では手元では開発は行わず、AWSのEC2上のUbuntuで開発を行なっていたので、MacBookはほとんどSSHとブラウザを利用するためにしか使っていないと言った感じでした。 開発環境はUbuntuのバージョンがちょっと古くて、aptで普通に入るNeovimがちょっと古いバージョンだったこと以外で困ったことは特になく、快適に開発することができました。

オフィス

mixiさんのインターンでは、こういった状況下ではありますが、リモートでも出社でも良いという方針だったので、週1回、メンターさんとの面談の日には出社する、といった感じでオフィスに通っておりました。

mixiさんのオフィスは、渋谷スクランブルスクエアという渋谷駅直結のビルにあり、28階から36階までがmixiさんのフロアという感じです。 35階には社食とカフェが入っており、安い価格で昼食を食べられたり、コーヒーはもちろん、チョコレートドリンクやアサイースムージーなどを飲むこともできます。 普通にコーヒーが飲みたいのであれば、各フロアにコーヒーメーカーが置いてあるので、いくらでも無料で飲むこともできました。 また、mixiでは各自にハーマンミラーのアーロンチェア2とKOKUYOの電動昇降デスクが用意されており、非常に快適に業務にあたることができました。

課題

課題は、最初に比較的簡単なチュートリアル的な課題をいくつか用意していただき、そのあとは積んであるタスクの中から、自分の気になった課題を選んで取り組むと言った感じでした。 私は一般的なサーバサイドエンジニアとしてインターンに参加させていただいたので、機械学習の部分には触れず、ルールベースで会話を行う部分の実装をひたすらやっておりました。

Romiではシナリオエディタというのを使って、Romiのルールベースの会話をカスタマイズすることができます。 ルールベースの会話では、モジュールというのを使って、さまざまな機能を実現しています。 例えば、 {owner_name} というモジュールを利用すると、シナリオの中で、オーナー(Romiのユーザのことです)の名前を読み上げることができます。 こういったモジュールの開発を中心に課題に取り組みました。

課題に取り組むにあたってはメンターさんや事業部の方々に色々教えていただいて、困ることなく課題に取り組むことができました。

成果発表会

最終日はオフィスの会議室を一室押さえていただき、成果発表を行いました。 15分ほど成果発表を行い、さらに10分くらい質疑応答といった感じで、30分ほど時間をとっていただきました。

成果発表会の最後に、メンターさんやマネージャーさんからは「とても手が速かった」「面接の時は技術全振り人間かと思ったが、ちゃんとサービスのことを考えて実装していて良かった」といったコメントをいただきました。 自分はそんなに手が速い方ではないかなと思っていたり、企画やサービスのことを考えながら実装することの難しさなどを感じていたので、そう言っていただけたことはちょっと驚きでもありました。

宣伝

というわけで、開発に参加させていただいたRomiですが、現在キャンペーンで公式ストアからの購入で本体価格が10%オフ、月会費が3ヶ月分無料になるそうです。 ロボットと会話してみたい、かわいらしいロボットが欲しい、といった方にはとても刺さるプロダクトになっているのではないかと思います。

ご購入や詳しくはこちらを参照していただければと思います。 ぜひご検討ください!

さいごに

mixiさんでの1ヶ月半は長いようで短いものでした。 mixiの、特にRomi事業部の皆様には大変お世話になりました。

これからもどうぞよろしくお願いいたします。


  1. 正直なところ、時給が悪かったら申し込んでいなかったんじゃないかなと思うくらいは時給がよかったです↩

  2. 一脚20万円以上する非常に有名なオフィスチェアです。最初に見た時は目を疑いましたが、社員さんに聞いたところアーロンチェアで間違いないとのことで、びっくりしました。↩

ピクシブさんでインターンをしておりました

こんにちは。 あけましておめでとうございます。 よく冷える日が続いていますね。 皆様も体調には気をつけてお過ごしください。

さて、タイトルの通り、昨年11月から今年1月までピクシブ株式会社さんでインターンをさせていただいておりました。 今回はピクシブさんでのインターンについて振り返る記事を書こうかと思います。

応募

元々は夏に開催されていた短期のインターンに申し込み、人数の関係でそのインターンには参加できず、ということだったのですが、ピクシブさんの方から冬または春のインターンか長期インターンもしくはアルバイトでの参加を提案していただき、最終的に長期インターンで参加させていただくこととなりました。

配属

配属先の部署決定に際しては、私の興味を持っていることなどを面談でしっかり確認していただきました。

最初はGoなどの静的型付き言語を扱っている部署が良いかななどと思っていたのですが、面談などで私がPythonの型注釈の研究をしていることなどを話したことから、ソースコードの静的解析を行ってる部署への配属をご提案いただき、その部署へ配属ということになりました。

開発環境

開発環境はフルリモートだったため、LinuxのAmazon WorkSpacesでした。 PhpStormのライセンスを割り当てていただき、ほとんどの開発をPhpStorm上で行うといった感じでした。

慣れない環境ではありましたが、そんなに苦労することもなかったなという印象です。

課題

課題については、メンターさんと相談しながら、そう長くはないインターン期間を有意義に過ごせるようにと課題を設定していただきました。 課題のほとんどはpixivやピクシブ百科事典といったサービスの開発を静的解析で支援するといった内容で、非常に面白かったです。

取り組んだ課題の中で一番面白く達成感があったのは、PHPの静的解析ツールであるPHPStanの拡張を書く、という課題でした。 pixivでは、ユーザ情報の取得を行う関数があり、その引数に渡すことによって返り値が変わるオプションが存在しているのですが、そのオプションの値を見て、返ってくる連想配列の型が変わるのをPHPStanに教える、というものでした。

例えば、次のようなユーザデータの取得を行う関数があるとすると、

User_Common::getGenericDataById(11)
// array{user_id: string, user_status: string, user_account: string, user_name: string}|false

返り値の型はコメントで示したようになります。

この関数には第二引数にオプションを渡すことができ、オプションによって返ってくる連想配列が変わります。

User_Common::getGenericDataById(11, ['expand_serialized_field' => true, 'additional_fields' => ['serialized']]);
// array{user_id: string, user_status: string, user_account: string, user_name: string, user_contact: array{Twitter: string}, show_foobar: bool, foobar: array}|false

返り値の型はコメントで示したようになります。

こういったオプションによる型の変化は通常の静的解析では知ることができず、詳細な型をつけることができません。 実際、現状のpixivのソースコードでは array|false としか型をつけられていませんでした。

PHPStanの拡張を書くことにより、このオプションの値が静的に求まる場合は、詳細な型をPHPStanに教えることができます。

ということで、実際にPHPStanの拡張を書き、ユーザ情報の取得に関わる関数について、詳細な型をつけることができました。

PHPを書いたのはかなりしばらくぶりで、静的解析となると全く触ったことがなかったですが、メンターさんに優しく詳しく教えていただき、たくさんの学びがありました。

最終課題発表

最終日には取り組んだ課題について発表する場を設けていただきました。 私が取り組んだ課題はPHPStanを利用したPHPでの静的解析に関するものがほとんどだったため、「静的解析とpixiv開発支援」という課題テーマで発表させていただきました。

さいごに

ピクシブさんでのインターンは面白く、多くの学びが得られたインターンでした。 ピクシブの皆様、長いようで短かった三か月間、ありがとうございました。

これからもどうぞよろしくお願いします。

Tweet generatorのサーバをVPSからAWSに移行しました。

こんにちは。 急に秋の気配がやってきましたね。 研究が進んでおらず冷や汗をかいております。

今回はこれまでVPS上で運用していたTweet generatorをAWSに移行したので、そのことについて書いていきます。

Tweet generatorはこれまで約50万ユーザの方に支えられ、小さいプログラムながら大きなサービスへと成長することができました。 その過程で、可能な限り運用費をケチったシンプルなVPSでの運用に限界を感じたことは多々ありました。 ストレージ逼迫による約37万ユーザ分の学習データの破棄、アクセスが多かった時期には読み込みが非常に遅いなどの問題がありました。 しかしながら、Tweet generatorも収益化を行ってから1年以上が経ち、得られた収益により様々な恩恵を受けることがありました。 収益化を行っているからには、私にはこのサービスをユーザの皆様に快適に利用していただけるよう努める義務があると思っております。

今回はそんな気持ちを抱きながら、より安定した長期稼働の為に行ったAWSへの移行を、検討から実際の移行についてまとめました。 またTweet generatorの話かよ、と思われるかもしれませんが、まぁ結構大変だったので聞いてくださるとありがたいです。

検討

まずは移行の検討を行った背景について説明します。

まず、これまでTweet generatorを運用していたサーバは、私の公開しているほとんどのサービスの運用を一手に担うConoHaのVPSサーバでした。 ConoHaは学生にやさしく、10%割引で各種サービスを利用することができます。 このサーバ上では常時5つ程度のWebサービス、Discord botなどが動いており、CPUリソースもメモリリソースも常時それなりに逼迫しているという状況でした。

この段階ですでにやばいのですが、2020年2月頃、急にTweet generatorへのトラフィックが増加し始め、一番ひどいときは通常時500ミリ秒以内程度のテキスト生成に数十秒かかるほどにサーバを圧迫していました。

そしてそれなりに重めの学習済みマルコフ連鎖モデルは50GBしかなかったVPSのストレージを即座に食い尽くし、何度かの学習済みマルコフ連鎖モデルの破棄とストレージの追加契約とVPSのアップグレードを余儀なくされました。 この時点ではまだTweet generatorは収益化していなかったため、アクセスが来れば来るほど私が損するという状況にありました。

そして2020年5月頃、友人が広告とか置けばいいんじゃないかと言っていたのをふと思い出し、収益化を行いました。 結果として、すぐにサーバ代をペイするくらいの収益が得られるようになりました。

この時点ではまだサーバ代をケチる精神が健在だったため、この1台にできるだけサービスを詰め込む運用でしばらく運用を続けていました。 Tweet generator自体の設計のやばさもあったため、2020年12月頃には学習済みマルコフ連鎖モデルの管理をファイルベースからPostgreSQLでの管理に切り替え、また学習済みマルコフ連鎖モデルの破棄を行いました。 こうして、つい先日までのVPSでの運用が続きました。

しかしながら、私自身業務でAWSに触る機会が増え、AWSでの堅牢で可用性の高いサービス運用について知見を深めていくと共に、Tweet generatorの運用がやばいということを強く感じるようになりました。 また、個人的に仕事などが増えたことから金銭的な余裕が生まれ、AWSをポケットマネーで自由に触ってみようと思い、趣味でもAWSを触ることにしました。

こうしてAWSでの運用の知見が蓄積されていき、AWSでの運用を検討するに至りました。

AWSでの運用を検討した際に、まずうれしかったのは、またアクセスが集中することがあっても、オートスケールする設計が簡単に組めることでした。 また、もしまたアクセスが集中した場合、その場合はストレージの逼迫が考えられたので、ストレージ容量も簡単にスケールするようなDBが求められました。

AWSはこれらの点をすべて満たしてくれています。

また、他社サービス、具体的にはGCPなども検討しましたが、AWSで求められる機能は実現でき、かつ業務などでAWSを使うことが多いのにわざわざGCPを使うこともないだろうと思い、AWSで運用することを決めました。

要件

今回の移行で求められた要件を書いていきます。

ダウンタイムは最小に

まず今回の移行にあたっての目標は、ダウンタイムを最小にして移行させることでした。

Tweet generatorにはおおよそ毎秒リクエストが飛んできています。 また、ダウンタイムが長引けば、広告収入減につながります。

以上の事情から、ダウンタイムは最小にすることが求められました。

データ損失なく

これは完全に趣味として、データ損失なく移行を進めたいという気持ちがありました。 技術的にも金銭的にも、かかる費用を考えればこれまでのデータを破棄して、まっさらなDBでサービスを継続するのが楽でした。

しかし、実際の企業のサービスなどではそんなことは言ってられないでしょう。 折角の機会なんだからデータ損失なく移行させられたら面白いじゃん?と思い、自分の技術力の範囲でできるだけデータ損失なく移行させようと思いました。

移行

ここからは、実際の移行にあたって発生した問題などについて書いていきたいと思います。

コンピューティングリソースの移行

これは普通にEC2上にdocker-composeでコンテナ群を立ち上げる方式で、EC2インスタンスをオートスケーリンググループで立ち上げてやることにしました。 負荷分散は普通にALBでやってあげている感じです。

コンピューティングリソースの移行はそんなに苦労しなかったのですが、唯一苦労した点と言えば、Graviton、つまりaarch64なAWSインスタンスへのdocker-composeのインストールでした。 docker-composeの公式はaarch64向けのバイナリを配布していません。 結論から言うとこちらの回答を参考にしたらすんなりと行きました。

何故苦労してまでaarch64を使いたかったのかというと、価格とパフォーマンスが良かったからです。 詳しくはこちらの記事がわかりやすくてよいでしょう。 Tweet generatorの場合だと、t3.microを時間単価0.0104USDで使うところを、t4g.microを時間単価0.0084USDで使うことができます。 もちろん、性能の比較は難しいですが、単純にvCPU数とRAM容量を見た限りでは、この二つに差異はありません。 また適当な機会にt3.microも導入して、ALBレスポンスタイムやロードアベレージがどうなるかを調査するなどして、性能については詳しく追っていきたいと思っています。

DBの移行

DBはVPS上でDockerを使い立ち上げていたPostgreSQLからRDSのPostgreSQLに移行しました。

結論から言うと、DBの移行には普通にSQLダンプを使って移行した後、自前で作ったマイグレーションツールを使って細かい差分を吸収してやりました。

DMSとの闘い

当初はAWSのサービスであるDatabase Migration Service、DMSを用いてDBの移行を行う予定でした。

しかし、DMSでは学習済みマルコフ連鎖モデルを保持しているテーブルの移行に何故かエラーも吐かずに終了してしまいました。 これは全くの原因不明で、この調査の為に数日を溶かしたのですが、結局何もわからず、DMSでのDB移行を諦めました。

ダンプファイルとの闘い

結局、普通にダンプを利用することにしました。 まずは移行元データベースのダンプを取ってきて、ダンプしたSQLを利用してRDSにデータを突っ込んでやります。 このダンプファイルが294GBありました。 294GBも何を保持しているんですかね……

ダンプファイルを今度はRDS上のPostgreSQLに突っ込みます。 この作業に162時間かかりました。 皆さんがSQLを話し終わるまで162時間かかった校長先生かな?

さらにこの手続きが終わった後、ダンプからの移行中に発生した移行元DBの変更を移行先DBに反映してやるために、お手製ツールで移行元DBと移行先DBの差分を取ってきて反映、みたいなことをしました。

これだけの時間、これだけのリソースを消費して移行したデータなので、十分に活用していきたいですね1……

DNSの移行

最後に行ったのはDNSの移行です。

移行に伴いTweet generatorのドメイン名を変更することも考えたのですが、前回ドメイン名を変更したときに、既にTwitter上には古いドメイン名でのリンクが大量に転がっていたため、古いドメイン名からのリダイレクト処理をずっと走らせる必要がありました。 今回もそれをやるのは避けたかったこともあり、同じドメイン名でサーバの移行のみをすることにしました。

基本的に行ったことは、これまでVPSに向いていたAレコードをALBのドメイン名のCNAMEに置き換えてあげることだけでした。

しかし、DNSは基本的にTTLの間はキャッシュがきくので、移行直後は移行元サーバと移行先サーバの両方にリクエストが来ます。

この際、特に対策を取らないと移行元でのDBへの変更は移行先DBへ反映されません。 そのため、事前にAWSのセキュリティグループでVPSのIPアドレスからRDSへのアクセスを許可するように設定しておき、移行のタイミングで移行元サーバのアクセス先DBをRDSに変更することで、移行のタイミングで移行元サーバと移行先サーバ共にRDSにアクセスするように変更しました。

こうすることで、DNSの移行期間中も、データを失うことなくサービスを継続させることができました。

結果

結果として、ダウンタイム2時間以内で、ユーザテーブルとマルコフ連鎖モデルテーブルに関しては2データ損失なく移行を終えることができました。 いや結構ダウンしとるな?

ダウンタイムは、停止後に最終のデータ移行を行ったのと、移行後のデータベースに異常がないかの確認、特にsequenceテーブルが壊れてしまっていたのでそれの修正と、移行元サーバのアクセス先DBの変更の為にどうしても必要になりました。

最後に

長くなりましたが、Tweet generatorのAWSへの移行はこんな感じで行いました。

サーバ移行を真面目にやったのは初めてだったのですが、なかなか苦労しました。 今後はもうあまりやりたくないですね……

もしこの記事が今後AWSに触れる方などの参考になることがあれば幸いです。

最後になりましたが、これからもどうぞよろしくお願いいたします。


  1. まぁ活用法がなくて困ってるんですが↩

  2. 生成ログデータとセッションデータは保持することによって得られる利点に比べて移行が大変だったので、そこは無視することにしました↩