iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
DevOps

今晚我想來點 Terraform 佐 AWS系列 第 21

今晚我想來點親手打造的自製 Terraform 模組

  • 分享至 

  • xImage
  •  

嘗試過如果使用現成的模組後,接下來我們要試著製作自己的模組。

一個基本的模組 (module) 大概會有以下幾個檔案:

  • README.md 說明模組用途的文件
  • main.tf 主要的組態設定檔
  • variables.tf 定義模組的變數,變數會成為 module 區塊的引數 (arguments)
  • outputs.tf 定義模組的輸出,輸出會成為可以從模組外取得的資訊,可以用來傳遞資訊給其他組態

這次的自製模組,我們要在 AWS S3 建立託管的靜態網站。

建立模組資料夾

我們要建立一個名稱為 static-bucket 的模組。

在工作資料夾裡建立 modules 資料夾,再放入 static-bucket 資料夾

一個指令完成這件事:

$ mkdir -p modules/static-bucket

建立 README

建立 README.md 放入模組的說明

# Static S3 Bucket

This module will create aws s3 bucket

建立組態檔 main.tf

  • aws_s3_bucket 區塊建立 S3 的儲存貯體 (bucket) 設定成託管網站
  • 模組內不需要 provider 區塊
resource "aws_s3_bucket" "s3_bucket" {
  bucket = var.bucket_name

  acl    = "public-read"
  policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::${var.bucket_name}/*"
            ]
        }
    ]
}
EOF

  website {
    index_document = "index.html"
    error_document = "error.html"
  }

  tags = var.tags
}

建立組態檔 variables.tf

  • 沒的預設值的變數會是模組的必填的變數
  • 我們需要從模組外提供 bucket_name,宣告 bucket_name 不設定預設值
variable "bucket_name" {
  description = "the s3 bucket name."
  type        = string
}

variable "tags" {
  type    = map(string)
  default = {}
}

建立組態檔 outputs.tf

  • 輸出一些模組外需要的資料
output "arn" {
  description = "ARN of the bucket"
  value       = aws_s3_bucket.s3_bucket.arn
}

output "name" {
  description = "Name (id) of the bucket"
  value       = aws_s3_bucket.s3_bucket.id
}

output "website_endpoint" {
  description = "Domain name of the bucket"
  value       = aws_s3_bucket.s3_bucket.website_endpoint
}

下一步

到目前我們完成了自製的模組,檔案清單如下:

$ tree modules/
modules/
└── static-s3-bucket
    ├── README.md
    ├── main.tf
    ├── outputs.tf
    └── variables.tf

但是現在還沒辦法實際的運作。

下一步,我們要在根模組 (root module) 載入自製的模組,確定它是可以正常使用的。


上一篇
今晚我想來點 Terraform Registry 的共享模組
下一篇
今晚我想使用自製的 Terraform 模組
系列文
今晚我想來點 Terraform 佐 AWS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言