apt
公式の Ubuntu イメージ ( )で、さまざまな矛盾したエラーが発生しますami-83e769fb
。Packer を使用して AMI を構築していますが、約 40% の確率で失敗します。スクリプトを再実行すると成功します。
私のスクリプトは次のように実行されます:
sudo apt-get clean all
sudo apt-get update
パッケージをインストールする前に。
時々、このエラーが発生します:
amazon-ebs: W: GPG error: http://archive.ubuntu.com/ubuntu artful InRelease: Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_artful_InRelease into data and signature failed
amazon-ebs: E: The repository 'http://archive.ubuntu.com/ubuntu artful InRelease' is not signed.
apt-get update
ヒットする時もあればhttp://us-west-2.ec2.archive.ubuntu.com/ubuntu
、ヒットしない時もあります。
パッケージが見つからない場合もあります ( またはapache2
などpython3
)。
なぜこの動作に一貫性がないか理解できません。
apt-get update
公式の Ubuntu AMI を安定して動作させるにはどうすればよいですか?
答え1
使用している場合は、cloud-init
完了するまで待つことができます。
while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
echo 'Waiting for cloud-init...'
sleep 1
done
例: packer json:
{
"type": "shell",
"inline": [
"while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done"
]
}
参照:
答え2
プロビジョニング前のpacker.json:
"provisioners": [
{
"type": "shell",
"inline": ["/usr/bin/cloud-init status --wait"]
},
答え3
私自身もこの問題に遭遇しましたが、これは cloud-init が実行時に EC2 インスタンスの設定中であるために発生するものと考えていますapt-get
。インスタンスの起動直後に実行されるスクリプトに 30 秒の遅延を挿入することで解決しました。より良い方法は、cloud-init にスクリプトの実行を依頼するUser Data
か、パッケージのインストールと更新を処理させることです [1]。cloud-init を認識したくない私のユースケースでは、遅延を追加することは許容できる解決策でした。