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+ }
0 commit comments