【Terraform】既存S3の取り込み

IT
  • コマンドimportを使用することで、既存リソースの取り込みができる
    • 今あるリソースをtfファイルに取り込むことができる ※若干の語弊あり
  • 試しにS3のimportの流れを確認した
  • 注意:
    • もしかしたら、もっと効率の良いやり方があるかもです
    • 一部推測で記載している内容があります

概要:Terraformでの既存リソース取り込み

※話をシンプルにするため、正確ではない表現を多様します。ご容赦くださいm( )m

  • Terraformには大きく分けて2つの種類のファイルがある

    • tfファイル(〇〇.tf)
    • tfstateファイル(□□.tfstate)
  • リソース作成の際に開発者が実際に触るのはtfファイル

  • tfstateファイルはシステムが使用する

  • 今回importコマンドで作成できるのはtfstateファイル

  • 取り込む作業はimportで取り込んだtfstateファイルとtfファイルを差分を無くす作業になる

    • 差分の確認はコマンドでできるが、tfファイルを直すのは手作業での実施が必要
  • ※上記手作業を自動化するための機能として、importブロックがあるが、まだ実験的リリースの段階のため、今回は言及しない

実施手順

  • ①作業ディレクトリの作成
  • ②main.tfの作成
  • ③Terraformの初期化(terraform init)
  • ④リソースのインポート(terraform import)
  • ⑤planで差分比較→修正
  • ⑥tfファイルと既存リソースの紐付け(apply)

①作業ディレクトリの作成

  • Terraform実行時に複数のファイルが作成される
  • Terraform実行ディレクトリとしてディレクトリを用意する
  • 名前はなんでも良い
    • 今回はterraform-s3-importとした

②main.tfの作成

  • 今回は既存リソースの取り込みを行うが、tfファイルはあらかじめ作成しておかないといけない
  • 今回は以下のように作成
provider "aws" {
  region = "ap-northeast-1"  # 使用するAWSリージョン
}

resource "aws_s3_bucket" "import-bucket" {
  bucket = "【バケット名】"  # ユニークなS3バケット名
}
  • resource "aws_s3_bucket" "import-bucket" {}について
    • リソースの設定を記述する
    • aws_s3_bucket
    • リソースの種類の設定値、今回はS3のためaws_s3_bucket
    • 別種類のリソース(IAMとかLambdaとか)の場合は別の名称になる
    • import-bucket
    • tfファイルでの定義名。任意の値でOK
      • プログラムコードで設定する関数名や変数名のイメージ
    • importコマンド実行時に使用する
    • bucket = "【バケット名】"
    • バケット名を設定。取り込みたいバケット名を設定

③Terraformの初期化(terraform init)

  • ターミナル上、main.tfと同じディレクトリ階層でterraform initコマンドを実行
terraform init
  • main.tfが無いとエラーになるため、main.tf作成後にコマンドを実行する
  • ↑tfファイルが無いとエラーになるという意味です(ファイルの名前は任意です)
  • Terraform has been successfully initialized!と表示されたらOK

④リソースのインポート(terraform import)

  • importコマンドを実行
terraform import aws_s3_bucket.import-bucket 【バケット名】
  • コマンドの中身について
    • aws_s3_bucket = リソースの種類
    • import-bucket = tfファイルのresourceで設定した値と同じにする
    • 【バケット名】 = 取り込みたいS3のバケット名を設定
  • このコマンド実行によってtfstateファイルが作成される→次のステップでtfファイルと比較する

⑤planで差分比較→修正

  • planコマンドの実行(差分確認)
terraform plan
  • 一致しないリソースや設定が表示されるので、その情報からmain.tfを修正する
  • 修正したら、再度planコマンドを実行し、差分がなくなるまで繰り返す
  • No changesと出力されたら差分がなくなったのでOK

⑥tfファイルと既存リソースの紐付け(apply)

  • 【推測】この工程は必須ではない?
  • 差分がなくなったら、applyコマンドでリソースをdeploy
    • 差分のないapplyのため、リソースには影響なし
terraform apply
  • 【推測】このコマンド実行によって、システム的にmain.tfと実際のリソースが紐づくのでやっておいた方が良い?
  • 差分が無い場合はNo changesApply complete! Resources: 0 added, 0 changed, 0 destroyed.が出力される

コメント

タイトルとURLをコピーしました