前回
前回の記事でEC2インスタンスへのリリース時に自動でAMIを取得できるようにしました。実際はCodeDeployのAfterinstallフックで行っています。
発生した問題
aws ec2 create-image
コマンドの直前に行っていたファイル操作がAMIに反映されていませんでした。具体的にはmv
やcp
とごくごく一般的なコマンドかと思います。
最初はスクリプトのバグを疑ったのですが、aws ec2 create-image
の直前までは間違いなく正しく動作していることが確認できたため、AMIの取得についてAWSサポートに問い合わせました。AMIの仕様として直前の状態を保存する場合があるのかななど確認したかったからです。
結果
もろもろログを渡した結果AWSからは
ファイルシステムへの変更がディスクに書き込まれる前に AMI の作成が開始されたことがこの度の事象の原因ではないかと推察しております。
恐れ入りますが、AMI 作成前にファイルシステムバッファをディスクに書き込むため、aws ec2 create-image
の実行直前に sync コマンドを実行するように AfterInstall フックスクリプトを修正して、改めてデプロイをお試しいただけますでしょうか。
との指摘だったので
aws ec2 create-image
の前にたった一行sync
コマンドを入れるだけで解決しました。
おそらくインスタンス外部からの操作になるのでまだ書き込まれていないバッファを考慮せずAMIが取得されたのだと思います。