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?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

[Docker] Terraformで開発環境のMinIOにバケットを作成する方法

Last updated at Posted at 2024-01-15

概要

MinIOというAWS APIと互換性を持つストレージサービスを開発環境で使用しています。
今までShellを実行してバケットを作成していましたが、この度Terraformを使用してバケットを作成するようにしてみました。

実装

Docker環境で実装します。

Dockerfile

ベースイメージにDebianを指定し、MinIOTerraformをimageにインストールします。

ちなみにamd64を指定していますが、M1でも動きました。Intelを考慮する必要のない場合はlinux-amd64 / inux_amd64の部分をarmに変更した方がいいかもしれません。

  • Terraformのバージョンは現時点での最新にしているので適宜修正してください。
  • Railsを使用していたらイメージはRubyだったりするのですが、アーキテクチャの部分も適宜変更してください。
Dockerfile_minio
FROM debian:latest

RUN apt-get update && apt-get install -y wget unzip curl

# MinIOのインストール
RUN wget https://dl.min.io/server/minio/release/linux-amd64/minio \
    && chmod +x minio \
    && mv minio /usr/local/bin/minio

# Terraformのインストール
ARG TERRAFORM_VERSION="1.6.6"
RUN curl -O https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
    && unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
    && mv terraform /usr/local/bin/terraform \
    && rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip

ENV APP_ROOT /minio
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT

# MinIOの起動
CMD [ "minio", "server", "/data", "--console-address", ":9001" ]

docker-compose.yml

MinIOのデータは消えて欲しくないので名前付きボリュームで管理します。
terraform配下にはmain.tfを作成、Terafformを実行すると色々ファイルが生成されるので、コンテナ側のminio配下へ反映される様にマウントします。

  • ここで言うコンテナ側のminioとは、上記Dockerfileで定義したENV APP_ROOT /minioのことです。
docker-compose.yml
version: '3'
services:
  minio:
    build:
      context: .
      dockerfile: Dockerfile_minio
    environment:
      MINIO_ROOT_USER: user
      MINIO_ROOT_PASSWORD: password
    volumes:
      - minio_volume:/data
      - ./terraform:/minio
    ports:
      - "9000:9000"
      - "9001:9001"

main.tf

access_keysecret_keyは秘匿情報なので、本来は公開NGです。

今回はAWSではなく、コンテナで実行しているMinIOへの接続なので、コメントにある記述が必要になります。

terraform/main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  access_key          = "user"
  secret_key          = "password"
  region              = "ap-northeast-1"
  # MinIOでは s3_use_path_style = true が必要
  s3_use_path_style   = true

  endpoints {
    s3 = "http://minio:9000"
  }

  # 認証のエラーが出るため、以下の設定を追加して回避している
  skip_credentials_validation = true
  skip_requesting_account_id  = true
}

# バケットを作成する
resource "aws_s3_bucket" "development-bucket" {
  bucket = "dev-bucket"
}

また、Terraformを実行すると色々ファイルが生成されるので、git管理されない様にgitignoreへ対象を追加します。

gitignore
# 以下を追加
terraform/*
!terraform/main.tf

セットアップ方法

MinIOのコンテナを起動します。

docker-compose up -d minio

MinIOのコンテナに接続します。

docker exec -it sample-minio-1 /bin/bash
root@fc644eb4df32:/minio#

接続したら、コンテナから以下コマンドを実行してバケットを作成します。

# 1. Terraformの初期化
terraform init

# 2. Terraformの実行確認
terraform plan

# 3. Terraformの実行
terraform apply
# -> yesを入力してください。

バケットを削除したいときは、以下コマンドを実行します。

terraform destroy
# -> yesを入力してください。

補足

MinIOについて

MinIOはAWS APIと互換性を持つストレージサービスです。
本番、検証環境でAWS S3を使用しているサービスの場合、MinIOを使用して開発環境でも同じAPIを使用して開発を進めることができます。

Terrafomについて

Terrafomはクラウドインフラの設計をコード化する事ができるサービスです。
個人的な理解としては、GUIでポチポチして作っていたインフラをコード化して保守性を高めようねという感じです。

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?