Skip to content

Commit a6a32bc

Browse files
authored
docs(is_instance_group_manager): added example and related documents (IBM-Cloud#6296)
* docs(is_instance_group_manager): added example and related documents * docs(is_instance_group_manager): added example and related documents
1 parent e874617 commit a6a32bc

File tree

1 file changed

+228
-5
lines changed

1 file changed

+228
-5
lines changed

website/docs/r/is_instance_group_manager.html.markdown

Lines changed: 228 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ provider "ibm" {
2222
```
2323

2424
## Example usage
25-
The following example creates an instance group manager.
25+
26+
### Basic Instance Group Manager
27+
The following example creates a basic instance group manager.
2628

2729
```terraform
2830
resource "ibm_is_vpc" "example" {
@@ -36,14 +38,18 @@ resource "ibm_is_subnet" "example" {
3638
ipv4_cidr_block = "10.240.64.0/28"
3739
}
3840
41+
data "ibm_is_image" "ubuntu" {
42+
name = "ibm-ubuntu-20-04-6-minimal-amd64-6"
43+
}
44+
3945
resource "ibm_is_ssh_key" "example" {
4046
name = "example-ssh"
41-
public_key = "SSH_KEY"
47+
public_key = file("~/.ssh/id_ed25519.pub")
4248
}
4349
4450
resource "ibm_is_instance_template" "example" {
4551
name = "example-template"
46-
image = ibm_is_image.example.id
52+
image = data.ibm_is_image.ubuntu.id
4753
profile = "bx2-8x32"
4854
4955
primary_network_interface {
@@ -80,22 +86,231 @@ resource "ibm_is_instance_group_manager" "example" {
8086
min_membership_count = 1
8187
}
8288
83-
resource "ibm_is_instance_group_manager" "example" {
89+
resource "ibm_is_instance_group_manager" "scheduled" {
8490
name = "example-instance-group-manager"
8591
instance_group = ibm_is_instance_group.example.id
8692
manager_type = "scheduled"
8793
enable_manager = true
8894
}
8995
```
9096

97+
### Example with Load Balancer, Autoscaling, and Scheduled Managers
98+
An example to set up an instance group with both autoscaling and scheduled managers working together with a load balancer, addresses the need of both automatic scaling based on metrics and scheduled scaling for predictable workload patterns.
99+
100+
```terraform
101+
102+
resource "ibm_is_instance_template" "webserver" {
103+
name = "${var.prefix}-webserver-template"
104+
image = data.ibm_is_image.ubuntu.id
105+
profile = "cx2-2x4"
106+
107+
primary_network_interface {
108+
subnet = ibm_is_subnet.example.id
109+
security_groups = [ibm_is_security_group.webserver.id]
110+
}
111+
112+
vpc = ibm_is_vpc.example.id
113+
zone = ibm_is_subnet.example.zone
114+
keys = [ibm_is_ssh_key.example.id]
115+
116+
# User data for web server setup
117+
user_data = base64encode(<<-EOF
118+
#!/bin/bash
119+
apt-get update
120+
apt-get install -y nginx
121+
systemctl start nginx
122+
systemctl enable nginx
123+
124+
# Configure nginx for health checks
125+
echo "server { listen 80; location /health { return 200 'OK'; } }" > /etc/nginx/sites-available/health
126+
ln -s /etc/nginx/sites-available/health /etc/nginx/sites-enabled/
127+
systemctl reload nginx
128+
EOF
129+
)
130+
}
131+
132+
# Load Balancer for the instance group
133+
resource "ibm_is_lb" "webapp_lb" {
134+
name = "${var.prefix}-load-balancer"
135+
subnets = [ibm_is_subnet.example.id]
136+
type = "private"
137+
138+
# Enable logging for monitoring (optional)
139+
logging = true
140+
}
141+
142+
# Backend pool for the load balancer
143+
resource "ibm_is_lb_pool" "webapp_backend_pool" {
144+
name = "${var.prefix}-backend-pool"
145+
lb = ibm_is_lb.webapp_lb.id
146+
algorithm = "round_robin"
147+
protocol = "http"
148+
health_delay = 60
149+
health_retries = 5
150+
health_timeout = 30
151+
health_type = "http"
152+
health_monitor_url = "/health"
153+
}
154+
155+
# Load balancer listener
156+
resource "ibm_is_lb_listener" "webapp_listener" {
157+
lb = ibm_is_lb.webapp_lb.id
158+
port = 80
159+
protocol = "http"
160+
default_pool = ibm_is_lb_pool.webapp_backend_pool.id
161+
}
162+
163+
# Security group for web servers
164+
resource "ibm_is_security_group" "webserver" {
165+
name = "${var.prefix}-webserver-sg"
166+
vpc = ibm_is_vpc.example.id
167+
}
168+
169+
resource "ibm_is_security_group_rule" "webserver_http" {
170+
group = ibm_is_security_group.webserver.id
171+
direction = "inbound"
172+
remote = "0.0.0.0/0"
173+
tcp {
174+
port_min = 80
175+
port_max = 80
176+
}
177+
}
178+
179+
resource "ibm_is_security_group_rule" "webserver_ssh" {
180+
group = ibm_is_security_group.webserver.id
181+
direction = "inbound"
182+
remote = "0.0.0.0/0"
183+
tcp {
184+
port_min = 22
185+
port_max = 22
186+
}
187+
}
188+
189+
# Instance Group with Load Balancer integration
190+
resource "ibm_is_instance_group" "webapp_ig" {
191+
name = "${var.prefix}-instance-group"
192+
instance_template = ibm_is_instance_template.webserver.id
193+
instance_count = 3
194+
subnets = [ibm_is_subnet.example.id]
195+
# Load balancer integration
196+
application_port = 80
197+
load_balancer = ibm_is_lb.webapp_lb.id
198+
load_balancer_pool = element(split("/", ibm_is_lb_pool.webapp_backend_pool.id), 1)
199+
200+
# Lifecycle management to prevent conflicts with auto-scaling
201+
lifecycle {
202+
ignore_changes = [
203+
instance_count,
204+
]
205+
}
206+
207+
timeouts {
208+
create = "15m"
209+
delete = "15m"
210+
update = "10m"
211+
}
212+
}
213+
214+
# Autoscaling Manager - Handles automatic scaling based on metrics
215+
resource "ibm_is_instance_group_manager" "webapp_autoscaler" {
216+
name = "${var.prefix}-autoscale-manager"
217+
aggregation_window = 120
218+
instance_group = ibm_is_instance_group.webapp_ig.id
219+
220+
cooldown = 120
221+
manager_type = "autoscale"
222+
enable_manager = true
223+
max_membership_count = 10
224+
min_membership_count = 2
225+
}
226+
227+
# CPU-based scaling policy for the autoscaler
228+
resource "ibm_is_instance_group_manager_policy" "webapp_cpu_policy" {
229+
name = "${var.prefix}-cpu-scaling-policy"
230+
instance_group = ibm_is_instance_group.webapp_ig.id
231+
instance_group_manager = ibm_is_instance_group_manager.webapp_autoscaler.manager_id
232+
metric_type = "cpu"
233+
metric_value = 70
234+
policy_type = "target"
235+
}
236+
237+
# Memory-based scaling policy (optional additional policy)
238+
resource "ibm_is_instance_group_manager_policy" "webapp_memory_policy" {
239+
name = "${var.prefix}-memory-scaling-policy"
240+
instance_group = ibm_is_instance_group.webapp_ig.id
241+
instance_group_manager = ibm_is_instance_group_manager.webapp_autoscaler.manager_id
242+
metric_type = "memory"
243+
metric_value = 80
244+
policy_type = "target"
245+
}
246+
247+
# Scheduled Manager - Handles time-based scaling actions
248+
resource "ibm_is_instance_group_manager" "webapp_scheduler" {
249+
name = "${var.prefix}-scheduled-manager"
250+
instance_group = ibm_is_instance_group.webapp_ig.id
251+
manager_type = "scheduled"
252+
enable_manager = true
253+
}
254+
255+
# Scheduled action to scale down during off-peak hours (5 PM daily)
256+
resource "ibm_is_instance_group_manager_action" "webapp_scale_down_evening" {
257+
name = "${var.prefix}-scale-down-evening"
258+
instance_group = ibm_is_instance_group.webapp_ig.id
259+
instance_group_manager = ibm_is_instance_group_manager.webapp_scheduler.manager_id
260+
261+
# target_manager specifies which manager's limits to modify
262+
target_manager = ibm_is_instance_group_manager.webapp_autoscaler.manager_id
263+
264+
# Scale down at 5:05 PM daily (17:05 UTC)
265+
cron_spec = "05 17 * * *"
266+
267+
# Adjust the autoscaler's limits for off-peak hours
268+
min_membership_count = 2
269+
max_membership_count = 4
270+
}
271+
272+
# Scheduled action to scale up for peak hours (8 AM daily)
273+
resource "ibm_is_instance_group_manager_action" "webapp_scale_up_morning" {
274+
name = "${var.prefix}-scale-up-morning"
275+
instance_group = ibm_is_instance_group.webapp_ig.id
276+
instance_group_manager = ibm_is_instance_group_manager.webapp_scheduler.manager_id
277+
278+
# target_manager specifies which manager's limits to modify
279+
target_manager = ibm_is_instance_group_manager.webapp_autoscaler.manager_id
280+
281+
# Scale up at 8:05 AM daily (08:05 UTC)
282+
cron_spec = "05 08 * * *"
283+
284+
# Adjust the autoscaler's limits for peak hours
285+
min_membership_count = 3
286+
max_membership_count = 10
287+
}
288+
289+
# Weekend scale-down action (Saturday midnight)
290+
resource "ibm_is_instance_group_manager_action" "webapp_weekend_scale_down" {
291+
name = "${var.prefix}-weekend-scale-down"
292+
instance_group = ibm_is_instance_group.webapp_ig.id
293+
instance_group_manager = ibm_is_instance_group_manager.webapp_scheduler.manager_id
294+
295+
target_manager = ibm_is_instance_group_manager.webapp_autoscaler.manager_id
296+
297+
# Scale down at midnight on Saturday (00:05 UTC)
298+
cron_spec = "05 00 * * 6"
299+
300+
min_membership_count = 1
301+
max_membership_count = 3
302+
}
303+
304+
```
305+
91306
## Argument reference
92307
Review the argument references that you can specify for your resource.
93308

94309
- `aggregation_window` - (Optional, Integer) The time window in seconds to aggregate metrics prior to evaluation.
95310
- `cooldown` - (Optional, Integer) The duration of time in seconds to pause further scale actions after scaling has taken place.
96311
- `enable_manager` - (Optional, Bool) Enable or disable the instance group manager. Default value is **true**.
97312
- `instance_group` - (Required, String) The instance group ID where instance group manager is created.
98-
- `manager_type` - (Optional, String) The type of instance group manager. Default value is `autoscale`.
313+
- `manager_type` - (Optional, String) The type of instance group manager. Default value is `autoscale`. Valid values are `autoscale` and `scheduled`.
99314
- `max_membership_count`- (Required, Integer) The maximum number of members in a managed instance group.
100315
- `min_membership_count` - (Optional, Integer) The minimum number of members in a managed instance group. Default value is `1`.
101316
- `name` - (Optional, String) The name of the instance group manager.
@@ -116,3 +331,11 @@ The `ibm_is_instance_group_manager` resource can be imported by using the instan
116331
```
117332
$ terraform import ibm_is_instance_group_manager.manager r006-eea6b0b7-babd-47a8-82c5-ad73d1e10bef/r006-160b9a68-58c8-4ec3-84b0-ad553c111115a
118333
```
334+
335+
## Related Resources
336+
337+
- [`ibm_is_instance_group`](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/is_instance_group) - Creates the instance group
338+
- [`ibm_is_instance_group_manager_policy`](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/is_instance_group_manager_policy) - Defines scaling policies for autoscale managers
339+
- [`ibm_is_instance_group_manager_action`](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/is_instance_group_manager_action) - Creates scheduled actions for scheduled managers
340+
- [`ibm_is_lb`](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/is_lb) - Load balancer for distributing traffic
341+
- [`ibm_is_lb_pool`](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/is_lb_pool) - Backend pool for load balancer

0 commit comments

Comments
 (0)