きょうまで

aws cloudformation
windows server 2012 R2

cfn-initのcommandsで時間がかかる。一つずつコマンド終了後にデフォルトで60秒の待機時間がある。waitAfterCompletionで0に設定できる。
AWS::CloudFormation::Init - AWS CloudFormation
再起動を待ってcfn-initを続ける場合は、foreverを指定する。

cfn-initのcommandsの実行時に日本語の出力があるとUnicodeEncodeErrorで失敗する。とりあえず、コマンドの出力をリダイレクトして回避
sqlcmd -i file.sql > nil
UserDataのscriptタグではエラーは出ない。ただしログの日本語部分は文字化け。
*1 *2

EBSをアッタチしてもwindowsではボリュームがoffline
get-disk | ? isoffline | set-disk -isoffline $false

EBSをデタッチするときに必要なwindowsのボリュームの探し方
Windows EC2 インスタンスのボリュームへのディスクのマッピング - Amazon Elastic Compute Cloud
(get-volume $driveLetter | Get-Partition | get-disk).Location
MSFT_Disk class (Windows)
Hard Disk Location Path Format

YAMLでテンプレート
関数は!で書けるけど連続して書けない場合がある
Fn::Base64: !Sub
!Select[!Ref Value, [1,2,3]]

属性はGetAttとピリオドで取得
!GetAtt ResourceName.attribute

Fn::GetAZs: region
regionを空にした場合はAWS::Regionの値
リージョンにあるすべてのazからアカウントが使用できるazが決められているので、見えるazはアカウントごとに違う。

cfn-init windowsの場合
設定キーの実行順序
package, sources, file, commands, services

*1:レジストリでcmdの文字コードを変更してしまっても解決できるかも。試してない

*2:新しいwindowsでならcmdの文字コードがよくなってるらしいのでまた違った対応ができるかも。試してない