2021年4月に正式サービス化されたさくらのクラウドのオブジェクトストレージをTerraformから操作する方法について記載します。
はじめに
さくらのクラウド向けのプロバイダー terraform-provider-sakuracloudにはsakuracloud_bucket_objectといったリソースが存在するのですが、これは旧オブジェクトストレージ向けで現在では利用できなくなっています。
(近いうちに該当コードは削除される予定です)
代わりにAWSプロバイダーを利用することでオブジェクトストレージの一部操作が可能となっています。この記事ではAWSプロバイダーを利用してオブジェクトストレージを操作する方法について記載します。
この記事で利用したTerraform/AWSプロバイダーのバージョン
- Terraform: v0.14
- AWSプロバイダー: v3.36.0
前提条件
- バケットの作成はAPIから行えないためTerraformからは行えません
- バケットに対する操作(ACL/CORS/バージョニングの設定など)は↑の理由から行えません
準備
- さくらのクラウドのコントロールパネルからサイト/バケットを作成しておく
(参考: https://manual.sakura.ad.jp/cloud/objectstorage/about.html#objectstrage-site-create) - サイト作成時に表示されるアクセスキー/シークレットを控えておく
- コントロールパネルからバケットを作成する
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_bucketのbucket部分を各々の環境に合わせて書き換えてください。
指定可能なパラメータについては以下ドキュメントを参照してください。
参考: aws_s3_bucket_objectのドキュメント
なおaclについてはpublic-readとprivateのみが利用可能なようです。
(他の値を指定してもapplyでエラーにならない点に注意)
また、provider "aws"ブロックではaccess_keyとsecret_keyを直接書く形にしていますが、Shared Credentials File(~/.aws/credentialsみたいなやつ)も使えるはずです。
参考: AWSプロバイダー: Shared Credentials File
注意点
aws_s3_bucket_objectの全てのパラメータが利用できるとは限りません。
(試していませんがおそらくstorage_classなどは指定しても無視されるかエラーになると思います)
ご利用の際は各自で必要な動作確認を行ってください。
以上です。