LoginSignup
3
4

More than 5 years have passed since last update.

Packer + Terraformで管理しているインスタンスをダウンタイムなしで差し替える

Posted at

前提

  1. packerからAtlasのArtifactにAMIを登録している
  2. ArtifactからTerraformでインスタンスを建てている
  3. Route53を使って建てたインスタンスに名前を振っている

つまりすごく限定されたパターン。

どうしたいか

Terraformの管理内で、インスタンスを止めずに、同じ名前を新しいインスタンスに割り当てつつ、新しいインスタンスのアプリケーションが立ち上がったのを確認してからRoute53の名前を付け替えたい。

素直にやろうとすると、PackerでビルドしてArtifactを差し替えた後にterraform applyした途端に

  1. インスタンス停止
  2. 新しいAMIからインスタンスが立ち上がる
  3. Route53の名前が書き換える

ので全くダメ。

どうするか

aws_instance.nameというリソース名を使っているとして

  1. packerでビルドしてArtifactを差し替える
  2. terraform.tfsateファイルから対象インスタンスのaws_instance.nameの部分のみを削除してserial:を一つ上げておく
  3. terraform apply -target aws_instance.nameでインスタンスだけ立ち上げる
  4. 新しく立ち上がったインスタンスでアプリケーションが動いていることを確認する
  5. terraform applyでRoute53が新しいインスタンスのほうでも更新される
  6. 古いインスタンスはTerraformの管理外になったので手動で削除
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4