アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Amazon/AWSDebianCentOS
【Amazon/AWS】インスタンス起動時に毎回ユーザーデータスクリプトを実行する
POSTED BY
2023-04-20

【Amazon/AWS】メモリ最適化インスタンスr6gdのDebianでNVMe SSDディスクをマウントする


の記事にて、インスタンスストアボリュームはマシン停止でファイルシステムごとすべて消えることが判明。

ので、最低限、起動時に毎回mkfs, mountする必要があるわけだが、インスタンス作成時に指定するユーザーデータスクリプトはcloud-initにより基本初回起動時にしか実行されない。しかし調べたら以下の記事がヒットした。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/execute-user-data-ec2/

これにより、好きなスクリプトを毎回起動時に実行できるので、そのスクリプトにmkfs, mountを書けばよいのではないか。
まずは、上記公式の例をそのままテストしてみた。

・インスタンスを停止(シャットダウン/halt)し、停止済みを確認しインスタンスを選択し、アクション→インスタンスの設定→ユーザーデータの編集を開く。

・以下スクリプトを「新しいユーザーデータ」「ユーザーデータをテキストで変更」ボックスに貼り付ける。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//

・[Save] (保存) して、インスタンスに戻り、「インスタンスを開始」する。

・マシンにログインして、/tmp/testfile.txt が出来上がっており中身がHello Worldであることを確認。

成功したので、

/bin/echo "Hello World" >> /tmp/testfile.txt

を、

/bin/bash /root/startup.sh

などと変更すれば、自作した、マシン内の/root/startup.shが実行されるはずである。

NVMe SSDをフォーマットしてマウントするスクリプト/root/startup.shを以下のように作成してみた。
なお、マシン停止→起動でNVMeは完全消去されるが、再起動ではそのままらしいので、ディスクの存在をチェックしてから実行している。

!/bin/bash

cd /root
echo "start script" > startup.log

ISMOUNT=`df -h | grep -c "/disk"`
if [ "$ISMOUNT" = "0" ]; then
 DISK=`lsblk | grep "220.7G" | awk '{print $1}'`
 mkfs -t ext4 /dev/$DISK >> startup.log 2>&1
 mount /dev/$DISK /disk >> startup.log 2>&1
fi

echo "end script" >> startup.log

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】