Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@yamamoto-febc

さくらのクラウドのオブジェクトストレージをTerraform + AWSプロバイダーで操作する方法

2021年4月に正式サービス化されたさくらのクラウドのオブジェクトストレージをTerraformから操作する方法について記載します。

はじめに

さくらのクラウド向けのプロバイダー terraform-provider-sakuracloudにはsakuracloud_bucket_objectといったリソースが存在するのですが、これは旧オブジェクトストレージ向けで現在では利用できなくなっています。
(近いうちに該当コードは削除される予定です)

代わりにAWSプロバイダーを利用することでオブジェクトストレージの一部操作が可能となっています。この記事ではAWSプロバイダーを利用してオブジェクトストレージを操作する方法について記載します。

この記事で利用したTerraform/AWSプロバイダーのバージョン

  • Terraform: v0.14
  • AWSプロバイダー: v3.36.0

前提条件

  • バケットの作成はAPIから行えないためTerraformからは行えません
  • バケットに対する操作(ACL/CORS/バージョニングの設定など)は↑の理由から行えません

準備

tfファイルの作成

こんな感じのtfファイルで操作できます。

# 利用するプロバイダーを宣言
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# さくらのクラウド向けにAWSプロバイダーを設定
provider "aws" {
  alias      = "sacloud"
  region     = "jp-north-1"
  access_key = var.s3_access_key
  secret_key = var.s3_secret_key
  endpoints {
    s3 = "https://s3.isk01.sakurastorage.jp"
  }

  skip_credentials_validation = true
  skip_region_validation      = true
  skip_requesting_account_id  = true
  skip_metadata_api_check     = true
}

#================================================

# アクセスキー/シークレットを設定する
variable "s3_access_key" {
  # 直接tfファイル上に書く場合は以下コメントアウトを解除して記載する
  #default = "your-access-key"
}
variable "s3_secret_key" {
  # 直接tfファイル上に書く場合は以下コメントアウトを解除して記載する
  #default = "your-secret-key"
}

#================================================

# 作成済みのバケットを参照
data "aws_s3_bucket" "example" {
  provider = aws.sacloud

  bucket   = "your-bucket-name" #作成したバケット名を指定
}

# オブジェクトの作成
resource "aws_s3_bucket_object" "object" {
  provider = aws.sacloud

  bucket = data.aws_s3_bucket.example.id
  key    = "example.txt"
  source = "example.txt"
  etag   = filemd5("example.txt")
  acl    = "public-read"
}

アクセスキーは実行時に指定するか環境変数や.tfvars経由で指定しておいてください。
バケット名についてはaws_s3_bucketbucket部分を各々の環境に合わせて書き換えてください。

指定可能なパラメータについては以下ドキュメントを参照してください。
参考: aws_s3_bucket_objectのドキュメント

なおaclについてはpublic-readprivateのみが利用可能なようです。
(他の値を指定してもapplyでエラーにならない点に注意)

また、provider "aws"ブロックではaccess_keysecret_keyを直接書く形にしていますが、Shared Credentials File(~/.aws/credentialsみたいなやつ)も使えるはずです。

参考: AWSプロバイダー: Shared Credentials File

注意点

aws_s3_bucket_objectの全てのパラメータが利用できるとは限りません。
(試していませんがおそらくstorage_classなどは指定しても無視されるかエラーになると思います)

ご利用の際は各自で必要な動作確認を行ってください。


以上です。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?