🔆

Lightsail に定期的にアクセスできなくなるので、インスタンスの再起動を自動化した

2024/01/06に公開

経緯

過去に Lightsail(WordPress) で個人ブログを運営していたのですが、数ヶ月に一度ブログにアクセスできなくなる事象が発生していました。
SSH接続はできるが、ブラウザからブログやWordPress管理画面へのアクセスができないという事象です。

インスタンス内のログを軽く確認しましたが原因は特定できず、再起動すれば解消するため暫定対応として再起動を自動化していました。
そのときの内容を記憶があるうちに残します。

構成

CloudWatch Synthetics Canary -> アラーム -> SNS -> Lambda

という構成です。
Canary では指定したURLに設定した時間間隔でリクエストを行い、死活監視ができます。
リクエストの結果アクセスできずアラームが発生したら Lambda を起動し、Lambda で Lightsail インスタンスを再起動するという内容です。
現在はアラームから直接 Lambda を起動できるようになったので、SNSは不要となるはずです。

Lambda のコード↓

import json
import boto3
region = 'ap-northeast-1'
client = boto3.client('lightsail', region_name=region)

def lambda_handler(event, context):
    jsn_str = json.dumps(event, ensure_ascii=False)
    print(jsn_str)
    client.reboot_instance( instanceName='<インスタンス名>')

さいごに

本来であればインスタンス内のログを確認するなどして原因を特定する必要がありますが、暫定対応としては利用できると思います。
なお、現在はその Lightsail は削除しましたが、結局原因は特定できませんでした。

参考資料

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Create.html

https://aws.amazon.com/jp/about-aws/whats-new/2023/12/amazon-cloudwatch-alarms-lambda-change-action/

Discussion