【Terraform】Terraform ~ AWS S3 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/04/05/000224
https://dk521123.hatenablog.com/entry/2023/04/08/220411

の続き。

前回は、AWS Glueを扱ったが、
Glue JobのスクリプトやJarなどのファイルを
S3上に置く必要がでてきたので、
Terraform でどうするかを調べてみた。

目次

【1】公式ドキュメント
【2】サンプル
 例1:S3バケットにファイルをアップロードする
 例2:複数ファイルをアップロードする
【3】Tips
 1)${path.module}
【4】AWSへのデプロイ手順

【1】公式ドキュメント

* S3上にファイルを置くには「aws_s3_object」が必要

aws_s3_object
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_object

補足:aws_s3_bucket_object

* 「aws_s3_bucket_object」は、非推奨APIで使うと、警告がでる
 => 警告が「Use aws_s3_object instead」的にでる
 => 以下のサイト参照。

https://wiki.kazuma.tokyo/terraform%E3%81%AEaws_s3_bucket_object%E3%81%AEdeprecated%E5%AF%BE%E5%BF%9C/

aws_s3_bucket_object ()
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_object

【2】サンプル

例1:S3バケットにファイルをアップロードする

# [0]-1 To define setting values
locals {
  env = "dev" # or stage or prod
  target_s3_bucket_name = "your-bucket-name"
  glue_job_script_class = "com.demo.Hello"
  glue_job_script_jar_location = "s3://your-bucket-name/demo/glue/utils.jar"
  glue_job_templocation = "s3://your-bucket-name/temp/"
}

# [0]-2:To specify AWS
provider "aws" {
  region = "us-west-2"
  default_tags {
    tags = {
      env = local.env
    }
  }
}

# [1] Update a file
resource "aws_s3_object" "update_hello_file" {
  bucket = local.target_s3_bucket_name
  key    = "profile"
  acl    = "private"  # or can be "public-read"
  source = "${path.module}/sample/hello.txt"
  etag = md5(filebase64("${path.module}/sample/hello.txt"))
}

例2:複数ファイルをアップロードする

resource "aws_s3_object" "update_hello_files" {
  for_each = fileset("sample/", "*")
  bucket = local.target_s3_bucket_name
  key = each.value
  source = "${path.module}/sample/${each.value}"
  etag = md5(filebase64("${path.module}/sample/${each.value}"))
}

【3】Tips

1)${path.module}

* モジュールのディレクトリを指す

https://y-ni-shi.hatenablog.com/entry/2020/06/22/235254

【4】AWSへのデプロイ手順

[1] 環境変数 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKEN
 をセットする(※1を参照のこと)
[2] terraformコマンドを実行していく
~~~~~~~~~~~~~~~
terraform init

terraform plan

terraform apply
~~~~~~~~~~~~~~~

※1:Linuxの場合

export AWS_ACCESS_KEY_ID=XXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXX
export AWS_SESSION_TOKEN=XXXXXX

※1:Windowsの場合

set AWS_ACCESS_KEY_ID=XXXXXX
set AWS_SECRET_ACCESS_KEY=XXXXXX
set AWS_SESSION_TOKEN=XXXXXX

参考文献

https://linuxopsys.com/topics/upload-files-to-s3-using-terraform

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
Terraform ~ Docker ~
https://dk521123.hatenablog.com/entry/2023/04/10/193239
Amazon S3 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/03/06/212734
Amazon S3 ~ Boto3編 ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004