Provision dịch vụ S3 với Terraform

Cập nhật lần cuối: 2024/08/30 08:49:28

ĐIỀU KIỆN

  • Cài đặt phiên bản Terraform từ v1.8 trở lên.
  • Cài đặt Go phiên bản từ 1.22 trở lên ( để xây dựng plugin )
  • Có thông tin về API key của tài khoản trên CMC Cloud ( cần báo admin của CMC Cloud active API key)

 

 

CÁC BƯỚC THỰC HIỆN

CMC cung cấp dịch vụ CMC S3, là dịch vụ lưu trữ dữ liệu dạng đối tượng, cung cấp khả năng lưu trữ không giới hạn và có thể truy xuất ở bất kỳ đâu thông qua Internet. 

 

Bước 1 : Tạo file s3.tf với các thông tin sau 

terraform {

          required_providers {

                    aws = {

                              source = "hashicorp/aws"

                              version = "5.52.0"

                    }

          }

}

 

provider "aws"{ 

     region = "us-east-1"

          s3_us_east_1_regional_endpoint = "s3.hn-1.cloud.cmctelecom.vn"

          s3_use_path_style = true

          access_key = ""       // access key của user, lấy thông tin trên Portal

          secret_key = "" // Secret key của user, lấy trên Portal

          endpoints {

                    s3      = "https://s3.hn-1.cloud.cmctelecom.vn" // endpoint của s3

     }

          

          skip_credentials_validation = true

          skip_requesting_account_id  = true

          skip_metadata_api_check     = true

}

 

Bước 2 : Chọn bucket policy muốn áp dụng cho bucket sẽ tạo. Ví dụ có thể tạo file policy1.tf với các thông tin sau 

{

          "Statement": [

                    {

                              "Action": [

                                        "s3:GetObject",

                                        "s3:GetObjectVersion"

                              ],

                              "Effect": "Allow",

                              "Principal": "*",

                              "Resource": [

                                        "arn:aws:s3:::bucket1/*"

                              ],

                              "Sid": "PublicReadGetObject"

                    }

          ],

          "Version": "2012-10-17"

}

 

Bước 3 : Tạo file bucket1.tf với các thông tin sau 

 

resource "aws_s3_bucket" "bucket1" {

   bucket        = "bucket1" // tên bucket

   force_destroy = true

}

 

resource "aws_s3_bucket_acl" "bucket1" {

   bucket = aws_s3_bucket.bucket1.id

   acl    = "public-read"// chọn acl

}

# Enable enable static web  cho S3 bucket

resource "aws_s3_bucket_website_configuration" "bucket1" { 

   bucket = aws_s3_bucket.bucket1.bucket

 

   index_document {

     suffix = "index.html"

   }

 

   error_document {

     key = "error.html"

   }

}

 

resource "aws_s3_bucket_policy" "public" {

   bucket = aws_s3_bucket.bucket1.id

   policy = file("policy1.json") // chọn bucket policy

}

# Enable versioning cho S3 bucket

resource "aws_s3_bucket_versioning" "versioning" {

   bucket = aws_s3_bucket.bucket1.id

 

   versioning_configuration {

     status = "Enabled"

   }

}

# Configure CORS cho S3 bucket

resource "aws_s3_bucket_cors_configuration" "cors" {

   bucket = aws_s3_bucket.bucket1.id

   cors_rule {

     allowed_headers = ["*"]

     allowed_methods = ["GET", "PUT", "POST", "DELETE", "HEAD"]

     allowed_origins = ["*"]

     expose_headers  = ["ETag"]

     max_age_seconds = 3000

   }

}

# Setup lifecycle policy cho S3 bucket

resource "aws_s3_bucket_lifecycle_configuration" "delete" {

   bucket = aws_s3_bucket.bucket1.id

 

   rule {

     id     = "rule1" // tên rule

     filter {

       prefix = "/log"  // chọn prefix

     }

     

     # Transition rule

    // transition {

    //   days          = 30  # Chọn thời gian sẽ chuyển storage class

    //   storage_class = "COLD" 

//     }

 

     # Expiration rule

     expiration {

       days = 60  # chọn thời gian hết hạn

     }

     

     # Status

     status = "Enabled"

   }

}

# Upload file lên bucket

resource "aws_s3_object" "file1" {

   bucket = aws_s3_bucket.bucket1.bucket

   key    = "index.html"  # chọn tên file sẽ hiển thị sau khi upload lên bucket

   source = "/usr/src/s3/index.html"  # đường dẫn của file muốn upload 

   acl    = "public-read"  # public file sau khi upload

}

 

Bước 4: Kiểm tra bucket đã tạo 

 

  • Kiểm tra với tài nguyên đã tạo trên Portal: 

Truy cập Portalv2 , trên thanh công cụ , chọn dịch vụ Simple Storage Service, sau đó tại mục Buckets, click vào bucket đã tạo. Tại đây sẽ hiển thị thông tin chi tiết bucket đã tạo.

 

    back to top

    logo

    © 2023, CMC Cloud. All rights reserved.

    Business Registration Certificate

    Giấy ĐKKD: 0102900049. Nơi cấp: Sở Kế hoạch & Đầu tư Thành phố Hà Nội

    Chịu trách nhiệm nội dung: Đặng Tùng Sơn