1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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などは指定しても無視されるかエラーになると思います)

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


以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?