atlantisでterraform import / terraform state rm
これは何
terraform automation toolであるatlantisに以下のPRを実装したことで、terraform import / terraform state rm相当の機能をatlantis経由で実行出来るようになった
- feat: atlantis import by krrrr38 · Pull Request #2783 · runatlantis/atlantis · GitHub
- feat: state rm by krrrr38 · Pull Request #2880 · runatlantis/atlantis · GitHub
atlantis import / state rm
Terraform Pull Request Automation | Atlantis はterraform実行をPRで行うツールである。terraformの変更をPRで出した際にplanをPRに表示 → 内容を確認してapprove → atlantis apply
といったコマンドでterraform反映 → PR mergeのようなフローで操作が可能になる。
今回このatlantisに atlantis import addr id
と atlantis state rm addr
の機能を追加した。この機能を利用するには、 atlantis import
は v0.22.0
、atlantis state rm
は次リリースである v0.23.0
が必要となる。デフォルト設定のままだと利用出来ないのだが、 Server Configuration | Atlantis で、import
や state
を明示的に --allow-commands
へ許可するか、all
のような指定ですべてのコマンドを実行できるようにすることで利用出来るようになる。
これらの操作については2018年頃からissueが立っていたのだが、今回気が向いて作ることにした。というのも、これらの操作が出来るようになることで、直接localからterraform commandを実行することを極力減らせるためである。localからterraformを実行しないで良いのなら、local環境に強い権限を保持する必要がなくなる。
デフォルト設定でimportやstate rmが使えないのには理由がある。atlantis plan/applyでは、出したPRに対してcode reviewを実施してから反映を行うという、"正しい" フローでの反映が実施出来る。一方で、importなどの操作はdryrun操作などはなく、コメントを記載するだけで実行が出来てしまう。操作するのはtfstateのファイルのみなので、悪意ある操作があったとしても本番影響はない。一方でtfstateがおかしなことになってしまうことはよろしくなく、実行環境が正しく整うまでは利用出来ないような状態としている。
今回の実装では異なるtfstateを跨ぐstate操作や正しいコードレビューのようなフローは導入されず、ただ terraform import
/ terraform state rm
が出来るようになっただけである。これらの操作については tfmigrate + Atlantis でTerraformリファクタリング機能をCI/CDに組み込む - Qiita のようにtfmigrateをplan/applyの処理に組み込むことも別途検討すると良いのではないかと思う。それ以外にも、terragruntのようなツールを使いcustom workflowへ組み込むには、まだworkaroundなども必要な状態である。
もし興味がある方は、ぜひ触って見てfeedbackなどをして欲しい。