AWS Linux インフラ クラウド

【AWS】ユーザーデータをもう一度実行する方法【EC2】

2021年11月6日

こんにちは、yassanです。

何かと便利でよく使いがちはユーザーデータですが、
もう一度ユーザーデータを使って何かの処理をしたくなった時に、困ってしまいますよね。

ユーザーデータはその特性上、起動時の最初の一回のみ実行するものです。
ですが、今回の方法を使えば、ユーザーデータを何度でも実行することができます。

ユーザーデータをもう一度実行する方法

ユーザーデータの編集と再実行

対象のインスタンスが実行中の場合は、停止します。

右上のメニューから、[ユーザーデータの編集]を選択し、ユーザーデータを下記のように書き換えます。

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 #この部分に実行したいスクリプトを記載する
--//--

変更を保存してから、インスタンスを起動することで、スクリプトが実行されます。

上記の記述では、インスタンスを起動するごとにユーザーデータが実行されます。

変更が反映されない場合

上記のフォーマットに従ってスクリプトを書いても、うまくいかない場合は以下の2つを試してみてください。

起動後、[2/2チェックが完了しました]の状態になるまで待つ

スクリプトの内容が長くて処理が完了する前に確認してしまっている可能性があります。

これは僕の体感にはなりますが、
通常のユーザーデータよりも実行に時間がかかっているような気がします。

処理が完了する前にsshやセッションマネージャでインスタンスにログインしてしまい、
確認しても変更が反映されていない...と言うことになりがちです。

確実なのは、EC2インスタンスのダッシュボードで[2/2チェックが完了しました]の状態になるまで
待つことです。

cloud-initのログの状態を確認する

下記のコマンドで、cloud-initサービスの状態を確認してみてください。

# systemctl status cloud-init.service

cloud-initが正常な状態でない場合は、ユーザーデータに記載したスクリプトが正しくない可能性があります。

ユーザーデータに書くスクリプトは、シェルスクリプトと若干異なるところもあります。
(例えば、実行ユーザーはrootとして実行するなど...)

なので、シェルスクリプトとして実行してうまくいったソースを、
そのままユーザーデータに貼り付けても、実行に失敗する可能性があります。

今一度、確認してみてください。

補足

なんでこんなことができんねんと不思議に思う方向けに補足の説明をしておきます。

Amazon Linux 2には、標準でcloud-initサービスが稼働しています。
cloud-initは、ユーザーデータを参照してOSの設定を行うサービスです。

cloud-initの詳しい説明は、下記のサイトが参考になるのでそちらで確認してください。
cloud-initを使ったLinux OSの初期設定 - Qiita

cloud-initのデフォルトの設定では、ユーザーデータの実行は最初の一回となっています。
cloud-initの設定を変更することで、ユーザーデータの実行頻度を変更することができます。

これは、ユーザーデータにMIMEパートファイル形式で記述することで実現します。
先程紹介したユーザーデータの10行~12行目で、cloud-initの頻度を変更しています。

と言うわけで結論としては、
MIMEパートファイル形式でcloud-initの設定の変更と実行したいユーザーデータを記載することで、
ユーザーデータをもう一度実行ができというわけでした。

AWS公式のドキュメントは下記の通りです。
EC2 インスタンスの初回起動後にユーザーデータを実行する

以上、ユーザーデータをもう一度実行する方法でした。

AWS学習におすすめの書籍

AWSについて、しっかりと基礎から学びたい、実践的なスキルを身につけたいと考えている方向けに、おすすめの書籍を紹介します。
これらの書籍は、実際にAWSエンジニアとして働く僕が参考にしている書籍です。

AWSエンジニア入門講座――学習ロードマップで体系的に学ぶ

AWSを使いこなすための前提となるITインフラの知識が足りない初学者にとって、どこからどのように学べばよいのかがわかりづらくなっています。そこで本書では、AWS学習サイト運営YouTuberである監修者自身が実サービスの導入で習得しながら体系化した「学習ロードマップ」に沿って、AWSのサービスとIT技術をやさしく解説していきます。

著者が作成した学習ロードマップに沿って、AWSやインフラストラクチャを体系的に学ぶことができます。
付属のロードマップの完成度が高く、学習に迷ったときや復習にも使えます。
これからAWSエンジニアを目指す方や、インフラストラクチャを基礎から学びたい方におすすめです。

Amazon Web Services 業務システム設計・移行ガイド

オンプレミス上に構築された業務システムをAWS上に移行するための「サービスの選定」「ネットワーク設計・構築」「サーバとデータの移し方」「運用・監視体制の構築」など。これまで多くの企業にAWSを導入し、コンサルティングフェーズから実際の設計・開発、運用フェーズまでの全行程に携わってきた著者陣のノウハウを凝縮して、一般的な企業にAWSを導入する際のベストプラクティスをお届けします。

実務を想定した様々なユースケースとそれに対するベストプラクティスを、設計構築から運用まで幅広くカバーして紹介しています。
タイトルからは移行に焦点を当てたように見えますが、僕としては移行に限らずエンタープライズとしてAWSを利用する上で知っておくべきことが記されていると思います。
より実践的な知識やノウハウを身に着けたい方、初学者から一皮むけたい方におすすめです。

-AWS, Linux, インフラ, クラウド
-, , ,