嘗試過如果使用現成的模組後,接下來我們要試著製作自己的模組。
一個基本的模組 (module) 大概會有以下幾個檔案:
README.md
說明模組用途的文件main.tf
主要的組態設定檔variables.tf
定義模組的變數,變數會成為 module
區塊的引數 (arguments)outputs.tf
定義模組的輸出,輸出會成為可以從模組外取得的資訊,可以用來傳遞資訊給其他組態這次的自製模組,我們要在 AWS S3 建立託管的靜態網站。
我們要建立一個名稱為 static-bucket
的模組。
在工作資料夾裡建立 modules
資料夾,再放入 static-bucket
資料夾
一個指令完成這件事:
$ mkdir -p modules/static-bucket
建立 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) 載入自製的模組,確定它是可以正常使用的。