4

これが正しい方法かどうかはわかりませんが、パッカーによるイメージのビルド時間を短縮したいと考えています。必要な手順の 1 つは、約 10 GB のデータをコピーしてイメージの一部にすることです。現在、シェル プロビジョナーを使用して、これをイメージに sftp しています。これには長い時間がかかります。代わりに、このデータをビルド時にアタッチできる EBS ボリュームに既に入れておきたいと考えています。Amazon 独自のネットワークにブロック デバイスとしてマウントされるため、転送は sftp よりもはるかに高速です。

パッカーでそのような方法を探してみましたが、あまりありません。amazon-ebs ビルダーで ami_block_device_mappings オプション パラメータを使用して ebs ボリュームをアタッチできるかどうかを試してみるつもりです。

私が知らないより良い方法があれば教えてください。ありがとう。

4

2 に答える 2

3

そのため、シェル プロビジョナーが最適なようです。今のところは。シェルプロビジョナーは、このようなことをすべてキャッチしているようです:)。ただし、ある時点で amazon-ebs ビルダーにパラメーターがあるとよいでしょう。たとえば、「attach_ebs_volume」のようなもの。とにかく、これが私がやった方法です:

  1. テンプレートの変数セクションに AWS 情報 (ebs_volume、instance_id など) を追加します。ENV からアクセス キーと秘密キーを取得するので、テンプレートには詳しく記載されていませんが、残りはテンプレートで定義するだけです。
  2. テンプレートのプロビジョナー ブロックで「environment_vars」パラメーターを使用して、変数をビルド マシンに渡します。
  3. {{.Vars}} を「execute_command」パラメーターに追加して、スクリプトの実行前に変数が定義されるようにします。
  4. install aws cli (渡されるスクリプトの一部)
  5. wget を介して meta_data からビルド マシンの instance_id を取得し、環境変数に割り当てます。
  6. aws cli コマンドを発行してボリュームをアタッチし、テンプレートから渡された環境変数を使用してコマンド オプションと wget コマンドからの instance_id を入力します。
  7. 通常どおりマウントします (マウントする前に数秒間スリープ状態にします。接続には少し時間がかかります。そうしないと、マウントが認識されず、マウントが失敗します。)

終わり。

誰かがもっとエレガントな方法を持っているなら...共有してください。

ありがとう。

于 2014-09-19T19:46:55.980 に答える
1

ami_block_device_mappingsが必要だと思います。

この例も役立つことがわかりました。

http://grahamc.com/blog/packer-ami-device-volume-types/

于 2015-02-10T16:51:09.617 に答える