我正在努力:
1-创建一个bucket
2-上传静态网站文件到它
3-将bucket配置为静态网站
4-配置route53将子域转发到bucket网站,而不是使用s3中丑陋的url。
地形文件被创建,我可以访问网站。然而,我需要运行两次地形应用程序:
1-第一次运行将创建bucket,上传站点文件,并为静态站点进行所需的bucket配置。但是route53记录资源将失败并出现错误
Error: Missing required argument
â
â with module.ui_site.aws_route53_record.www-a,
â on modules\UI\route53.tf line 14, in resource "aws_route53_record" "www-a":
â 14: name = aws_s3_bucket.site.website_domain
â
â The argument "alias.0.name" is required, but no definition was found.
2秒的运行将创建route53记录。
地形文件:
resource "aws_s3_bucket" "site" {
bucket = "${var.ui_bucket_name}.${var.root_domain}"
}
resource "aws_s3_bucket_public_access_block" "site" {
bucket = aws_s3_bucket.site.id
block_public_acls = false
block_public_policy = false
ignore_public_acls = false
restrict_public_buckets = false
}
resource "aws_s3_bucket_website_configuration" "site" {
bucket = aws_s3_bucket.site.id
index_document {
suffix = "index.html"
}
error_document {
key = "index.html"
}
}
resource "aws_s3_bucket_ownership_controls" "site" {
bucket = aws_s3_bucket.site.id
rule {
object_ownership = "BucketOwnerPreferred"
}
}
resource "aws_s3_bucket_acl" "site" {
bucket = aws_s3_bucket.site.id
acl = "public-read"
depends_on = [
aws_s3_bucket_ownership_controls.site,
aws_s3_bucket_public_access_block.site
]
}
resource "aws_s3_bucket_policy" "site" {
bucket = aws_s3_bucket.site.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "PublicReadGetObject"
Effect = "Allow"
Principal = "*"
Action = "s3:GetObject"
Resource = [
aws_s3_bucket.site.arn,
"${aws_s3_bucket.site.arn}/*",
]
},
]
})
depends_on = [
aws_s3_bucket_public_access_block.site
]
}
module "template_files" {
source = "hashicorp/dir/template"
base_dir = "${path.module}/../../../client_ui/build"
}
resource "aws_s3_object" "site" {
bucket = aws_s3_bucket.site.bucket
for_each = module.template_files.files
key = each.key
content_type = each.value.content_type
# The template_files module guarantees that only one of these two attributes
# will be set for each file, depending on whether it is an in-memory template
# rendering result or a static file on disk.
source = each.value.source_path
content = each.value.content
# Unless the bucket has encryption enabled, the ETag of each object is an
# MD5 hash of that object.
etag = each.value.digests.md5
}
#######################################################
#######################################################
#######################################################
## Route53
data "aws_route53_zone" "zone" {
name = var.root_domain
private_zone = false
}
resource "aws_route53_record" "www-a" {
zone_id = data.aws_route53_zone.zone.zone_id
name = aws_s3_bucket.site.bucket
type = "A"
alias {
name = aws_s3_bucket.site.website_domain
zone_id = aws_s3_bucket.site.hosted_zone_id
evaluate_target_health = true
}
depends_on = [
aws_s3_bucket_website_configuration.site
]
}
我在路由53记录的依赖部分尝试了不同的资源:bucketresource、bucket_website resource。
但它仍在失败