Article Outline
先日、aws-cliでec2のユーザーデータを追加する際に引っかかった。 結論、ユーザーデータの追加方法は2種類あり、それぞれファイルのまま引き渡したりエンコードが必要だったりと違いがある。AWS公式ドキュメント
まずあとから追加する場合は、modify-instance-attribute
を使用する。
ここで、指定する引数は次の2パターンだ
- --attribute --value userData <value>
- --user-data <value>
それぞれどちらでもユーザーデータをセットできる。具体的には以下のように指定する。 それぞれmacでの検証
case1:引数はスクリプト分そのまんま&かつ未エンコードの値をそのまま渡す
aws ec2 modify-instance-attribute --instance-id i-***** \
--user-data echo Hello
case2: 引数はbase64でエンコード済みのファイルを指定
# base64 encode
base64 user_data.txt > encoded_user_data.txt
aws ec2 modify-instance-attribute --instance-id i-***** \
--attribute userData --value file://encoded_user_data.txt
私の確認した限りでは未エンコのファイルはエラーになり、エンコ済みのスクリプト文はデコードされずにセットされてしまう…もしかしたら別の方法でも行けるのかもしれない。
今回の話をややこしくしている原因として、インスタンスを起動(生成)するコマンドrun-instances
がある。
この場合、引数--user-data
へ先程と同様にファイルもしくはスクリプト文字列を指定するのであるが、この場合base64エンコードは内部で実行されるため必要がない。
引数の指定の仕方も1種類となっているため、同じ要領でセットするとはまるので注意が必要。