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などで差分がなくなるように調整し完了となります。
作業の簡単里は裏腹に、本番環境とかにこれをやるのはドキドキする。。
そっちの方が大変なんじゃないかと思う今日この頃