Skip to content

Commit 2c2a395

Browse files
committed
feat: 解决方案accelerate-static-website tf文件完成
1 parent 7233118 commit 2c2a395

File tree

5 files changed

+259
-0
lines changed

5 files changed

+259
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
## Introduction
2+
<!-- DOCS_DESCRIPTION_CN -->
3+
本示例用于实现解决方案[网站静态资源访问加速](https://www.aliyun.com/solution/tech-solution/oss-x-cdn), 涉及到内容分发网络(CDN)、云解析(DNS)、对象存储服务(OSS)等资源的部署。
4+
<!-- DOCS_DESCRIPTION_CN -->
5+
6+
<!-- DOCS_DESCRIPTION_EN -->
7+
This example is used to implement solution [Accelerate Static Website](https://www.aliyun.com/solution/tech-solution/oss-x-cdn), which involves the creation and deployment of resources such as Content Delivery Network (CDN), Alibaba Cloud DNS, Object Storage Service (OSS).
8+
<!-- DOCS_DESCRIPTION_EN -->
9+
10+
<!-- BEGIN_TF_DOCS -->
11+
## Providers
12+
13+
| Name | Version |
14+
|------|---------|
15+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
16+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
17+
18+
## Modules
19+
20+
No modules.
21+
22+
## Resources
23+
24+
| Name | Type |
25+
|------|------|
26+
| [alicloud_cdn_domain_config.domain_config1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cdn_domain_config) | resource |
27+
| [alicloud_cdn_domain_config.domain_config2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cdn_domain_config) | resource |
28+
| [alicloud_cdn_domain_config.domain_config3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cdn_domain_config) | resource |
29+
| [alicloud_cdn_domain_new.domain](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cdn_domain_new) | resource |
30+
| [alicloud_dns_record.domain_record](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/dns_record) | resource |
31+
| [alicloud_oss_bucket.oss_bucket](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/oss_bucket) | resource |
32+
| [alicloud_ram_policy.policy](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ram_policy) | resource |
33+
| [alicloud_ram_role.role](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ram_role) | resource |
34+
| [alicloud_ram_role_policy_attachment.attach](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ram_role_policy_attachment) | resource |
35+
| [random_integer.default](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/integer) | resource |
36+
| [alicloud_cdn_service.open_cdn](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/cdn_service) | data source |
37+
| [alicloud_oss_service.open_oss](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/oss_service) | data source |
38+
| [alicloud_ram_roles.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/ram_roles) | data source |
39+
40+
## Inputs
41+
42+
| Name | Description | Type | Default | Required |
43+
|------|-------------|------|---------|:--------:|
44+
| <a name="input_bucket_name_prefix"></a> [bucket\_name\_prefix](#input\_bucket\_name\_prefix) | 存储空间名称前缀,长度为3~63个字符,必须以小写字母或数字开头和结尾,可以包含小写字母、数字和连字符(-)。需要全网唯一性,已经存在的不能在创建。 | `string` | `"bucket-example"` | no |
45+
| <a name="input_domain_name"></a> [domain\_name](#input\_domain\_name) | 域名(当前阿里云账号下已备案的域名,不包含前缀) | `string` | n/a | yes |
46+
| <a name="input_domain_prefix"></a> [domain\_prefix](#input\_domain\_prefix) | 域名前缀 | `string` | n/a | yes |
47+
| <a name="input_region"></a> [region](#input\_region) | 地域 | `string` | `"cn-hangzhou"` | no |
48+
| <a name="input_scope"></a> [scope](#input\_scope) | 选择加速区域。加速区域为仅中国内地和全球时,服务域名必须备案。 | `string` | `"domestic"` | no |
49+
<!-- END_TF_DOCS -->
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
data "alicloud_cdn_service" "open_cdn" {
2+
enable = "On"
3+
}
4+
5+
data "alicloud_oss_service" "open_oss" {
6+
enable = "On"
7+
}
8+
9+
resource "random_integer" "default" {
10+
min = 100000
11+
max = 999999
12+
}
13+
14+
resource "alicloud_oss_bucket" "oss_bucket" {
15+
bucket = "${var.bucket_name_prefix}-${random_integer.default.result}"
16+
}
17+
18+
resource "alicloud_cdn_domain_new" "domain" {
19+
domain_name = "${var.domain_prefix}.${var.domain_name}"
20+
cdn_type = "web"
21+
scope = var.scope
22+
sources {
23+
content = "${alicloud_oss_bucket.oss_bucket.id}.${alicloud_oss_bucket.oss_bucket.extranet_endpoint}"
24+
type = "oss"
25+
priority = 20
26+
port = 80
27+
weight = 10
28+
}
29+
}
30+
31+
resource "alicloud_cdn_domain_config" "domain_config1" {
32+
domain_name = alicloud_cdn_domain_new.domain.domain_name
33+
function_name = "filetype_based_ttl_set"
34+
function_args {
35+
arg_name = "file_type"
36+
arg_value = "jpg,png,jpeg"
37+
}
38+
function_args {
39+
arg_name = "weight"
40+
arg_value = "99"
41+
}
42+
function_args {
43+
arg_name = "ttl"
44+
arg_value = "2592000"
45+
}
46+
}
47+
48+
resource "alicloud_cdn_domain_config" "domain_config2" {
49+
domain_name = alicloud_cdn_domain_new.domain.domain_name
50+
function_name = "l2_oss_key"
51+
function_args {
52+
arg_name = "private_oss_auth"
53+
arg_value = "on"
54+
}
55+
function_args {
56+
arg_name = "perm_private_oss_tbl"
57+
arg_value = ""
58+
}
59+
}
60+
61+
resource "alicloud_cdn_domain_config" "domain_config3" {
62+
domain_name = alicloud_cdn_domain_new.domain.domain_name
63+
function_name = "image_transform"
64+
function_args {
65+
arg_name = "filetype"
66+
arg_value = "jpeg"
67+
}
68+
function_args {
69+
arg_name = "webp"
70+
arg_value = "off"
71+
}
72+
function_args {
73+
arg_name = "orient"
74+
arg_value = "off"
75+
}
76+
function_args {
77+
arg_name = "slim"
78+
arg_value = "90"
79+
}
80+
function_args {
81+
arg_name = "enable"
82+
arg_value = "on"
83+
}
84+
}
85+
86+
resource "alicloud_dns_record" "domain_record" {
87+
name = var.domain_name
88+
host_record = var.domain_prefix
89+
type = "CNAME"
90+
value = alicloud_cdn_domain_new.domain.cname
91+
}
92+
93+
# 授权CND访问OSS
94+
data "alicloud_ram_roles" "default" {
95+
name_regex = local.AliyunCDNAccessingPrivateOSSRole.name
96+
}
97+
98+
resource "alicloud_ram_role" "role" {
99+
count = length(data.alicloud_ram_roles.default.names) > 0 ? 0 : 1
100+
role_name = local.AliyunCDNAccessingPrivateOSSRole.name
101+
assume_role_policy_document = local.AliyunCDNAccessingPrivateOSSRole.document
102+
description = local.AliyunCDNAccessingPrivateOSSRole.description
103+
}
104+
105+
resource "alicloud_ram_policy" "policy" {
106+
policy_name = "${local.AliyunCDNAccessingPrivateOSSRolePolicy.name}-${alicloud_oss_bucket.oss_bucket.id}"
107+
policy_document = local.AliyunCDNAccessingPrivateOSSRolePolicy.document
108+
description = local.AliyunCDNAccessingPrivateOSSRolePolicy.description
109+
}
110+
111+
resource "alicloud_ram_role_policy_attachment" "attach" {
112+
role_name = local.AliyunCDNAccessingPrivateOSSRole.name
113+
policy_name = alicloud_ram_policy.policy.policy_name
114+
policy_type = "Custom"
115+
116+
depends_on = [alicloud_ram_role.role]
117+
}
118+
119+
locals {
120+
AliyunCDNAccessingPrivateOSSRole = {
121+
name = "AliyunCDNAccessingPrivateOSSRole"
122+
description = "用于CDN回源私有OSS Bucket角色的授权角色"
123+
document = <<-JSON
124+
{
125+
"Statement": [
126+
{
127+
"Action": "sts:AssumeRole",
128+
"Effect": "Allow",
129+
"Principal": {
130+
"Service": [
131+
"cdn.aliyuncs.com"
132+
]
133+
}
134+
}
135+
],
136+
"Version": "1"
137+
}
138+
JSON
139+
}
140+
AliyunCDNAccessingPrivateOSSRolePolicy = {
141+
name = "AliyunCDNAccessingPrivateOSSRolePolicy"
142+
description = "用于CDN回源某一私有OSS Bucket角色的授权策略,包含OSS的只读权限"
143+
document = <<-JSON
144+
{
145+
"Version": "1",
146+
"Statement": [
147+
{
148+
"Action": [
149+
"oss:List*",
150+
"oss:Get*"
151+
],
152+
"Resource": [
153+
"acs:oss:*:*:${alicloud_oss_bucket.oss_bucket.id}",
154+
"acs:oss:*:*:${alicloud_oss_bucket.oss_bucket.id}/*"
155+
],
156+
"Effect": "Allow"
157+
}
158+
]
159+
}
160+
JSON
161+
}
162+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
output "accelerate_domain_name" {
2+
description = "加速域名"
3+
value = alicloud_cdn_domain_new.domain.domain_name
4+
}
5+
6+
output "cname_domain_name" {
7+
description = "CNAME域名"
8+
value = alicloud_cdn_domain_new.domain.cname
9+
}
10+
11+
output "origin_server" {
12+
description = "源站"
13+
value = "${alicloud_oss_bucket.oss_bucket.id}.${alicloud_oss_bucket.oss_bucket.extranet_endpoint}"
14+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
provider "alicloud" {
2+
region = var.region
3+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
variable "region" {
2+
description = "地域"
3+
type = string
4+
default = "cn-hangzhou"
5+
}
6+
7+
variable "bucket_name_prefix" {
8+
type = string
9+
description = "存储空间名称前缀,长度为3~63个字符,必须以小写字母或数字开头和结尾,可以包含小写字母、数字和连字符(-)。需要全网唯一性,已经存在的不能在创建。"
10+
validation {
11+
condition = can(regex("^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$", var.bucket_name_prefix))
12+
error_message = "必须为3-63个字符,以小写字母或数字开头和结尾,可包含小写字母、数字和连字符(-)"
13+
}
14+
default = "bucket-example"
15+
}
16+
17+
variable "domain_name" {
18+
description = "域名(当前阿里云账号下已备案的域名,不包含前缀)"
19+
type = string
20+
}
21+
22+
variable "domain_prefix" {
23+
description = "域名前缀"
24+
type = string
25+
}
26+
27+
variable "scope" {
28+
type = string
29+
description = "选择加速区域。加速区域为仅中国内地和全球时,服务域名必须备案。"
30+
default = "domestic"
31+
}

0 commit comments

Comments
 (0)