web-dev-qa-db-ja.com

PackerとTerraformでプロビジョニングするのはいつですか?

起動時にいくつかのパッケージでEC2インスタンスをプロビジョニングする必要がある状況で座っています。いくつかの(企業/企業)制約が存在します。

  • 特定のAMIの上にプロビジョニングする必要があります。これにより、LDAP/ADアクセスなどのエンタープライズ機能が追加されます。
  • これらの変更は、すべての内部開発マシンで使用されることを意図しています

主に2番目の制約のため、プロビジョニングを配置するのに最適な場所はどこかと思いました。これは私が思いついたものです

Terraformでのプロビジョニング

それが述べているように、私は単に必要なインスタンスのためにテラフォームでプロビジョニングします。これらのリソースをモジュールにパッケージ化すると、プロビジョニングが「リーク」しなくなります。欠点

  • モジュールの上に別のプロビジョニング手順を追加することはできませんか?
  • プロビジョニングを変更すると、適用時にインスタンスが破壊される可能性がありますか?
  • インストールしようとするパッケージのため、プロビジョニングに時間がかかる

Packerでのプロビジョニング

これは 前提 に基づいています。Packerを使用すると、AMIを「拡張」できるようにAMIの上にプロビジョニングできます。また、これはAWSでのみ使用されるため、他のビルダーは必ずしも使用しません。 Packerでプロビジョニングすると、Terraformコードがはるかにシンプルになり、起動するAMIだけなので、Terraformの適用が速くなります。

私にとって、これらの方法の両方が彼らの立場を持っています。しかし、私が本当に知りたいのは、TerraformプロビジョニングよりもPackerプロビジョニングをいつ選択するかです

14
Shiraaz.M

Packerを使用して完成した(またはほぼ完成した)イメージを作成すると、新しいインスタンスのデプロイにかかる時間が大幅に短縮され、自動スケーリンググループを使用できるようになります。

TerraformですべてのEC2インスタンスの作成時にChefやAnsibleなどのプロビジョナーを実行する場合は、新しいインスタンスをデプロイする必要があるときにプロビジョナーが実行するための時間を追加します。私の意見では、Packerを使用して構成を事前に事前に行い、AMIに可能な限りベイクし、次にユーザーデータスクリプト/ツールを使用して Consul-Template のように環境固有を提供する方が良いと思います違い。

パッカーは確かに画像の上に構築でき、実際には source_AMI を指定します。 AMIにタグを付けることを強くお勧めします source_AMI_filter PackerおよびTerraformの aws_AMIデータソース AMIパッカーに変更を加えると、Terraformはそれらを自動的にプルし、上に構築するか、次の機会に展開します。

私は個人的に、かなり基本的な強化を行い、デプロイされたすべてのインスタンスに必要な監視とロギングを設定し、PackerがAMIのルートボリュームを確実に暗号化する、かなり軽量の「ベース」AMIを焼きます。他のすべてのイメージは最新の「ベース」AMIから構築され、それらがインストール/構成されていることを確認したり、ルートボリュームの暗号化を心配したりする必要はありません。

設定をAMIにベイクすることで、不変のインフラストラクチャモデルに移行することもできます。これには、問題のあるインスタンスを常に破棄して、非常に迅速に新しいインスタンスに置き換えることができるという大きな利点があります。成熟度レベルによっては、インスタンスへのアクセスを削除して、インスタンスがデプロイされるとインスタンス上の何も変更できないようにすることもできます。これは、私の経験では、運用上の問題の主な要因です。

非常にまれに、AMIの焼き付けを非常に困難にする何かに遭遇する場合があり、そのような場合、作成時にTerraformプロビジョナーでプロビジョニングスクリプトを実行することを選択することがあります。 AMIをベイクするよりも既存のプロセスをTerraformでプロビジョナーを使用するように移動する方が簡単な場合もありますが、可能な場合は、物事をPackerに移動するようにプッシュします。

16
ydaetskcoR

私は同じ状況に遭遇しました。私の理解に従って

  • EC2インスタンスを頻繁に起動する場合は、1日に2〜3回言ってから、packerを使用してカスタマイズされたAMIを作成し、次にterraformを介してAMIを呼び出します。
  • ベースイメージ(packerによって作成されたAMI)が要件に基づいて頻繁に変更される場合は、packerを使用することをお勧めします。しかし、私にとって、packerスクリプトの実行には非常に時間がかかります。
  • パッカーでも同じことができます。要件をスクリプトで記述し、それをterraformで呼び出すことができます。すべてをterraformスクリプトに組み込むことで、時間を短縮できます

最後に、あなたの決定とEC2インスタンスを起動する頻度です。

1
MS_22