AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULEDの注意点

体験談

ある日、AWSからAWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULEDの通知が届きました。いわゆる「リタイア通知」です。

内容を確認すると何やら物騒なことが書かれています。 Due to this degradation your instance could already be unreachable. つまり既にインスタンスにアクセスできなくなっている可能性があるということを意味します。

私の(誤った)認識ではこの文章はあくまで「保険」的なニュアンスで書かれているものであり、通知文に記載されている対応期限前に突然サーバーが落ちる可能性は流石に低いだろうと、たかを括っていました。

とはいえ念の為、対象インスタンスを確認しにいくとインスタンスの状態は「✅実行中」ですが、メトリクスの部分で「特定時間帯からデータがない状態」が発生しているではありませんか。

ファッ!? (゜Д゜;) まさにこんな顔になっていたと思います。 この時点でなんだか悪い予感がしてきます。

次にターゲットグループを見にいったら、案の定「✖️異常」状態になっているインスタンスが1つあり、確信に変わりました。サーバが、、、落ちて、、、いました。 (幸い、冗長化はしていたのでサービス自体に大きな影響はありませんでした。)

「もうこうなったら今、リタイア通知の件の対応をしてしまおう」ということで、ターゲットグループから対象インスタンスを外し、「インスタンスの停止」と「インスタンスの起動」を行い、無事に復旧しました。 (※補足:インスタンスの再起動ではダメらしい)

時間帯的にもそんなにアクセスが多くはなかったので、なんとか無事でしたがヒヤリとした体験談でした。

まとめ

この時ほど「冗長化しておいて良かったぁぁ」と実感したことはありませんでした。 一方で死活監視部分の甘さもかなり痛感した出来事となりました。

コストが多少かかるとしても今回のような事象が発生し得るので、冗長化はしておくことをお勧めします。 ここまでお読み頂き、ありがとうございました。 少しでも学びになれば幸いです。

Amazon Linux2023のEC2でOpenSSL 3.4.0にバージョンアップする方法

EC2(Amazon Linux2023)にデフォルトで入っているOpenSSLのバージョンアップの対応手順をまとめました。

ゴール

OpenSSL 3.4.0

現状

OpenSSL 3.0.8

対応手順

1. OpenSSL公式HPから対象のソースコードをダウンロードして展開する

cd /usr/local/src/
sudo wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
sudo tar xvf openssl-3.4.0.tar.gz

2. 必要なPerl周りのモジュールをインストールしておく

sudo yum install perl perl-FindBin perl-Module-Load-Conditional perl-Test-Harness perl-CPAN

🚨次の手順で設定ファイルを実行した際に下記のエラーが出るため

Can't locate FindBin.pm in @INC (you may need to install the FindBin module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /usr/local/src/openssl-3.4.0/Configure line 15.
BEGIN failed--compilation aborted at /usr/local/src/openssl-3.4.0/Configure line 15.

3. 設定ファイル実行

cd openssl-3.4.0
sudo ./config

※下記が出れば成功
**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

4. コンパイル及びインストールを行う

sudo make
sudo make install

5. lib64のパスを通す

.bashrcファイルの最後の行にexport LD_LIBRARY_PATH=/usr/local/lib64を追加する。

sudo vi ~/.bashrc

🚨次の手順でバージョン確認をする際にパスが通っておらず下記のエラーが出るため

openssl: /lib64/libssl.so.3: version `OPENSSL_3.4.0' not found (required by openssl)
openssl: /lib64/libssl.so.3: version `OPENSSL_3.2.0' not found (required by openssl)
openssl: /lib64/libcrypto.so.3: version `OPENSSL_3.0.9' not found (required by openssl)
openssl: /lib64/libcrypto.so.3: version `OPENSSL_3.3.0' not found (required by openssl)
openssl: /lib64/libcrypto.so.3: version `OPENSSL_3.4.0' not found (required by openssl)
openssl: /lib64/libcrypto.so.3: version `OPENSSL_3.2.0' not found (required by openssl)

6. 再起動する

sudo reboot

7. バージョンアップされていることを確認する

openssl version

※下記が出ればOK
OpenSSL 3.4.0 22 Oct 2024 (Library: OpenSSL 3.4.0 22 Oct 2024)

Cloudflare×Next.jsで低コスト高パフォーマンスの個人サービスをリリースした話

はじめに

今回は、CloudflareとNext.jsを使って個人サービス(https://techrecruitindex.com)を開発し、低コストで高パフォーマンスなWebサービスをリリースした経験を共有します。年間わずか1,716円(11.48ドル)で、Google PageSpeed Insightsでほぼ満点を獲得するサービスをリリースしました。

リリースした個人サービスについて

IT企業の技術ブログと採用情報を一元化し、効率的に検索できるサービスです。 主な特徴は以下です。

  • 500社以上のIT企業の情報を集約
  • 技術ブログと採用ページへのクイックアクセス
  • 企業名での検索機能

ユーザーが興味のあるIT企業の技術ブログや採用HPへワンクリックでアクセスすることができます。

技術スタック

  • Next.js(TypeScript)
  • Tailwind CSS
  • Cloudflare Pages
  • GitHub

技術選定理由

個人サービスをリリースする上で、今回はパフォーマンスとコスト(金額的/時間的など)に着目して開発していきたいと考えていました。 その上で私は下記の理由で今回の技術スタックを選択しました。

  1. 低コスト運用: Cloudflare Pagesの無料枠で十分なホスティング機能を活用可能
  2. 高速なパフォーマンス: Next.jsの静的サイト生成(SSG)とCloudflareのCDNによる高速配信
  3. 簡単なデプロイ: GitHubとCloudflare Pagesの連携による自動デプロイ
  4. 効率的な開発: Next.jsの充実した機能とTailwind CSSによる効率的なUI開発

パフォーマンスと運用コスト

結果として、以下のようなパフォーマンスと運用コストを達成しました。

Google PageSpeed Insightsスコア

年間運用コスト: 1,716円(11.48ドル)

まとめ

初めてCloudflare(Pages)を利用しましたが、個人的には非常に便利なサービスであると実感しました。 特に個人開発をする者にとっては大きなメリットがあるのではないでしょうか。 次はWorkersの方も利用してみたいと思います。

本記事をお読みいただきまして、ありがとうございました。