Terraformでs3にフォルダ・ディレクトリを作成する方法

プログラミング

こんにちは!

本日はTerraformでS3にフォルダ・ディレクトリを作成する方法を紹介します。

Terraformの”aws_s3_bucket_object”はメインの役割としてはS3に特定のファイルをアップロードするために使用するリソースで、フォルダを作成する記事は見つけられなかったため共有します。

S3上のファイルの管理を完全に自動化したい方は是非参考にしてください。

また、他にも普段の生活で役立つテクニックをご紹介していますので興味のある方は以下のリンクからご覧ください。

コードの書き方

TerraformでS3にフォルダ・ディレクトリを作成する際には以下のように記載します。

ファイルをアップロードする例はたくさんありますがフォルダ作成の例はなかったので残しておきます。

resource "aws_s3_bucket_object" "your_resource_name" {

  # S3のバケット名かバケットのリソースのidを書く
  bucket = "${aws_s3_bucket.your_backet_resource.id}"

  # S3上に作成したいフォルダのパスを書く
  key    = "Folder1/Folder2/Folder3"

  # sourceは書かない
  # source = "/dev/null"
}

以下それぞれのコードの意味について記載していきます。

resource

ディレクトリ作成のresourceは”aws_s3_bucket_object”を使います。

右側のリソース名は自分の考えた好きな名前をつけていただいて大丈夫です。

“aws_s3_bucket_object”はS3へのファイルアップロードとリソースが同じで非常に紛らわしいので注意してください。

resource "aws_s3_bucket_object" "your_resource_name" {

bucket

bucketの属性にはフォルダを作成するS3のバケット名をStringで入力します。

例の用に他のresourceの変数の値を参照したり、直接バケット名をStringで直書きしても大丈夫です。

  # S3のバケット名かバケットのリソースのidを書く
  bucket = "${aws_s3_bucket.your_backet_resource.id}"

key

keyの属性にはこれから作成したいフォルダの名前を記載します。

下記のように書くとS3バケットのroot直下に~/Folder1/Folder2/Folder3と3階層分のディレクトリが作成されます。

  # S3上に作成したいフォルダのパスを書く
  key    = "Folder1/Folder2/Folder3"

source

ここが一番重要です。(ここの書き方を知るまでにかなり時間がかかりました。)

sourceの属性ですが、フォルダを作る際には記載してはいけません。

同じ”aws_s3_bucket_object”のresourceを使ってファイルをアップロードする際にはこのkeyの属性にアップロードしたいローカルファイルのパスを書きますが、フォルダを作る際には書きません。

sourceを書かないことでS3へのファイルのアップロードではなくフォルダ作成のresourceとして機能します。

sourceを記載すると特定のファイルをアップロードする処理としてコードが動いてしまうので注意してください。

  # sourceは書かない
  # source = "/dev/null"

まとめ

今回はTerraformでS3上にフォルダを作成する方法を紹介しました。

個人的にはS3へのファイルのアップロードとresourceが同じこと、Web上にアップロード関連の記事しかないことが最高のハマりどころでした

S3上のファイルの管理を自動化したい方は是非参考にしてみてください。

また、他にも普段の生活で役立つテクニックをご紹介していますので興味のある方は以下のリンクからご覧ください。

コメント