Skip to content

Commit f2b3b98

Browse files
committed
the-headless-architecture-solution-of-alibaba-cloud-sae
1 parent 2b81859 commit f2b3b98

File tree

4 files changed

+233
-0
lines changed

4 files changed

+233
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
## Introduction
2+
3+
<!-- DOCS_DESCRIPTION_CN -->
4+
本示例用于实现解决方案[10分钟完成前后端分离架构升级(SAE版)](https://www.aliyun.com/solution/tech-solution-deploy/2866912), 涉及到专有网络(VPC)、交换机(VSwitch)、Serverless应用引擎(SAE)等资源的创建。
5+
<!-- DOCS_DESCRIPTION_CN -->
6+
7+
<!-- DOCS_DESCRIPTION_EN -->
8+
This example is used to implement solution [The Headless Architecture Solution of Alibaba Cloud(SAE)](https://www.aliyun.com/solution/tech-solution-deploy/2866912). It involves the creation, and deployment of resources such as Virtual Private Cloud (VPC), VSwitch, Serverless App Engine (SAE).
9+
<!-- DOCS_DESCRIPTION_EN -->
10+
11+
<!-- BEGIN_TF_DOCS -->
12+
## Providers
13+
14+
| Name | Version |
15+
|------|---------|
16+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
17+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
18+
19+
## Modules
20+
21+
No modules.
22+
23+
## Resources
24+
25+
| Name | Type |
26+
|------|------|
27+
| [alicloud_sae_application.sae_backend_app](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_application) | resource |
28+
| [alicloud_sae_application.sae_frontend_app](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_application) | resource |
29+
| [alicloud_sae_config_map.nginx_config_map](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_config_map) | resource |
30+
| [alicloud_sae_load_balancer_internet.sae_slb_frontend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_load_balancer_internet) | resource |
31+
| [alicloud_sae_load_balancer_intranet.sae_slb_backend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_load_balancer_intranet) | resource |
32+
| [alicloud_sae_namespace.sae_namespace](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/sae_namespace) | resource |
33+
| [alicloud_security_group.security_group_backend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group) | resource |
34+
| [alicloud_security_group.security_group_frontend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group) | resource |
35+
| [alicloud_slb_load_balancer.slb_backend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/slb_load_balancer) | resource |
36+
| [alicloud_slb_load_balancer.slb_frontend](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/slb_load_balancer) | resource |
37+
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vpc) | resource |
38+
| [alicloud_vswitch.vswitch_1](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
39+
| [alicloud_vswitch.vswitch_2](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
40+
| [alicloud_vswitch.vswitch_3](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
41+
| [alicloud_vswitch.vswitch_4](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
42+
| [random_string.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
43+
| [alicloud_zones.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/zones) | data source |
44+
45+
## Inputs
46+
47+
| Name | Description | Type | Default | Required |
48+
|------|-------------|------|---------|:--------:|
49+
| <a name="input_region"></a> [region](#input\_region) | n/a | `string` | `"cn-hangzhou"` | no |
50+
<!-- END_TF_DOCS -->
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
provider "alicloud" {
2+
region = var.region
3+
}
4+
5+
data "alicloud_zones" "default" {
6+
available_resource_creation = "VSwitch"
7+
}
8+
9+
resource "random_string" "suffix" {
10+
length = 8
11+
lower = true
12+
upper = false
13+
numeric = false
14+
special = false
15+
}
16+
17+
locals {
18+
common_name = random_string.suffix.id
19+
}
20+
21+
resource "alicloud_vpc" "vpc" {
22+
cidr_block = "192.168.0.0/16"
23+
vpc_name = "vpc-${local.common_name}"
24+
}
25+
26+
resource "alicloud_vswitch" "vswitch_1" {
27+
vpc_id = alicloud_vpc.vpc.id
28+
cidr_block = "192.168.1.0/24"
29+
zone_id = data.alicloud_zones.default.zones[0].id
30+
vswitch_name = "vswitch-1-${local.common_name}"
31+
}
32+
33+
resource "alicloud_vswitch" "vswitch_2" {
34+
vpc_id = alicloud_vpc.vpc.id
35+
cidr_block = "192.168.2.0/24"
36+
zone_id = data.alicloud_zones.default.zones[0].id
37+
vswitch_name = "vswitch-2-${local.common_name}"
38+
}
39+
40+
resource "alicloud_vswitch" "vswitch_3" {
41+
vpc_id = alicloud_vpc.vpc.id
42+
cidr_block = "192.168.3.0/24"
43+
zone_id = data.alicloud_zones.default.zones[1].id
44+
vswitch_name = "vswitch-3-${local.common_name}"
45+
}
46+
47+
resource "alicloud_vswitch" "vswitch_4" {
48+
vpc_id = alicloud_vpc.vpc.id
49+
cidr_block = "192.168.4.0/24"
50+
zone_id = data.alicloud_zones.default.zones[1].id
51+
vswitch_name = "vswitch-4-${local.common_name}"
52+
}
53+
54+
resource "alicloud_security_group" "security_group_frontend" {
55+
vpc_id = alicloud_vpc.vpc.id
56+
security_group_name = "sg-fe-${local.common_name}"
57+
}
58+
59+
resource "alicloud_security_group" "security_group_backend" {
60+
vpc_id = alicloud_vpc.vpc.id
61+
security_group_name = "sg-be-${local.common_name}"
62+
}
63+
64+
resource "alicloud_sae_namespace" "sae_namespace" {
65+
namespace_name = "sae-ns-${local.common_name}"
66+
namespace_id = "${var.region}:${local.common_name}"
67+
enable_micro_registration = false
68+
}
69+
70+
resource "alicloud_sae_config_map" "nginx_config_map" {
71+
namespace_id = alicloud_sae_namespace.sae_namespace.namespace_id
72+
name = "nginx"
73+
data = jsonencode({ "default.conf" : <<EOF
74+
server {
75+
listen 80;
76+
listen [::]:80;
77+
server_name localhost;
78+
79+
access_log /var/log/nginx/host.access.log main;
80+
81+
location / {
82+
root /usr/share/nginx/html;
83+
index index.html index.htm;
84+
}
85+
86+
# error_page 404 /404.html;
87+
88+
89+
# redirect server error pages to the static page /50x.html
90+
error_page 500 502 503 504 /50x.html;
91+
location = /50x.html {
92+
root /usr/share/nginx/html;
93+
}
94+
95+
location /saeTest/ {
96+
proxy_pass http://${alicloud_slb_load_balancer.slb_backend.address}:8080/saeTest/;
97+
}
98+
}
99+
EOF
100+
101+
})
102+
103+
}
104+
105+
resource "alicloud_sae_application" "sae_backend_app" {
106+
app_name = "sae-be-${local.common_name}"
107+
namespace_id = alicloud_sae_namespace.sae_namespace.id
108+
auto_config = false
109+
vpc_id = alicloud_vpc.vpc.id
110+
security_group_id = alicloud_security_group.security_group_backend.id
111+
vswitch_id = "${alicloud_vswitch.vswitch_2.id},${alicloud_vswitch.vswitch_4.id}"
112+
timezone = "Asia/Beijing"
113+
replicas = "2"
114+
cpu = "500"
115+
memory = "2048"
116+
package_type = "Image"
117+
jdk = "Dragonwell 21"
118+
image_url = "registry.${var.region}.aliyuncs.com/sae-serverless-demo/sae-demo:web-springboot-hellosae-v1.0"
119+
programming_language = "java"
120+
}
121+
122+
resource "alicloud_slb_load_balancer" "slb_backend" {
123+
load_balancer_name = "slb-be-${local.common_name}"
124+
vswitch_id = alicloud_vswitch.vswitch_2.id
125+
load_balancer_spec = "slb.s2.small"
126+
address_type = "intranet"
127+
}
128+
129+
resource "alicloud_sae_load_balancer_intranet" "sae_slb_backend" {
130+
app_id = alicloud_sae_application.sae_backend_app.id
131+
intranet_slb_id = alicloud_slb_load_balancer.slb_backend.id
132+
intranet {
133+
protocol = "HTTP"
134+
port = 8080
135+
target_port = 8080
136+
}
137+
}
138+
139+
resource "alicloud_sae_application" "sae_frontend_app" {
140+
app_name = "sae-fe-${local.common_name}"
141+
namespace_id = alicloud_sae_namespace.sae_namespace.id
142+
auto_config = false
143+
vpc_id = alicloud_vpc.vpc.id
144+
security_group_id = alicloud_security_group.security_group_frontend.id
145+
vswitch_id = "${alicloud_vswitch.vswitch_1.id},${alicloud_vswitch.vswitch_3.id}"
146+
timezone = "Asia/Beijing"
147+
replicas = "2"
148+
cpu = "500"
149+
memory = "2048"
150+
package_type = "Image"
151+
image_url = "registry.${var.region}.aliyuncs.com/sae-serverless-demo/sae-demo:web-dashboard-hellosae-v1.0"
152+
programming_language = "other"
153+
config_map_mount_desc_v2 {
154+
config_map_id = alicloud_sae_config_map.nginx_config_map.id
155+
mount_path = "/etc/nginx/conf.d/default.conf"
156+
key = "default.conf"
157+
}
158+
}
159+
160+
resource "alicloud_slb_load_balancer" "slb_frontend" {
161+
load_balancer_name = "slb-fe-${local.common_name}"
162+
vswitch_id = alicloud_vswitch.vswitch_1.id
163+
load_balancer_spec = "slb.s2.small"
164+
address_type = "internet"
165+
}
166+
167+
resource "alicloud_sae_load_balancer_internet" "sae_slb_frontend" {
168+
app_id = alicloud_sae_application.sae_frontend_app.id
169+
internet_slb_id = alicloud_slb_load_balancer.slb_frontend.id
170+
internet {
171+
protocol = "HTTP"
172+
port = 80
173+
target_port = 80
174+
}
175+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "web_url" {
2+
description = "示例网站地址/Sample website address"
3+
value = "http://${alicloud_slb_load_balancer.slb_frontend.address}"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
variable "region" {
2+
type = string
3+
default = "cn-hangzhou"
4+
}

0 commit comments

Comments
 (0)