データレイクのおじさん

Noteもやってます:https://note.com/yukinkoyuki

terraform で既存のS3バケットの情報を引っこ抜いてくる

既存との戦い

一から作るサービルならまだしも、 歴史のあるサービスを移行するときなどは、元々の状況を活かしつつ、新しい価値を生み出していくことが求められる。

とかっこいいことを言ってみたものの、 今回は既存のS3バケットの設定を持ってきて、そのバケットに対してライフサイクルの設定などを行いたい! そのため、今まで手で行ってきたものをコード化しようと言う試みです。

 

構成

env

    stg

       - main.tf
       - backend.tf (s3をバックエンドにしている)

 module
          s3 

            - main.tf

stg配下のmain.tfに記載されている、S3モジュールは以下のような設定です。

module "s3" {
  source = "../module/s3"
  providers = {
    aws.oregon     = aws.oregon
  }
}

ライトにS3から

今回はterrafrom importを使って既存のS3バケットの設定を取り込んでいこうと思います。

s3配下のmain.tfに対して、以下のように取り込みたいリソースを記載します。

resource "aws_s3_bucket" "test-sample-sample" {
  provider = aws.oregon
}

env配下に移動し以下のコマンドを実行します。 ちょっとしたコツはmodule.s3.のように絶対パスで対象のリソースまでの道筋を指定することです。 module.s3がないと、対象のリソースを見つけることができず、importすることができません。

terrafrom import resourceまでの絶対パス バケット名 の記法

terraform import module.s3.aws_s3_bucket.test-sample-sample test.sample.sample

取り込み完了です

あとは、terrafrom palnなどで差分がなくなるように調整し完了となります。

作業の簡単里は裏腹に、本番環境とかにこれをやるのはドキドキする。。

そっちの方が大変なんじゃないかと思う今日この頃