公式 Ubuntu AWS AMI での `apt-get update` の動作が一貫していない

公式 Ubuntu AWS AMI での `apt-get update` の動作が一貫していない

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 を認識したくない私のユースケースでは、遅延を追加することは許容できる解決策でした。

  1. https://docs.aws.amazon.com/AWSEC2/latest/ユーザーガイド/ユーザーデータ.html

関連情報