example/iaas-az-loadbalancer #13
11 changed files with 308 additions and 8 deletions
44
examples/iaas-cross-az-loadbalancer/.terraform.lock.hcl
generated
Normal file
44
examples/iaas-cross-az-loadbalancer/.terraform.lock.hcl
generated
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/random" {
|
||||
version = "3.8.1"
|
||||
constraints = ">= 3.6.3"
|
||||
hashes = [
|
||||
"h1:u8AKlWVDTH5r9YLSeswoVEjiY72Rt4/ch7U+61ZDkiQ=",
|
||||
"zh:08dd03b918c7b55713026037c5400c48af5b9f468f483463321bd18e17b907b4",
|
||||
"zh:0eee654a5542dc1d41920bbf2419032d6f0d5625b03bd81339e5b33394a3e0ae",
|
||||
"zh:229665ddf060aa0ed315597908483eee5b818a17d09b6417a0f52fd9405c4f57",
|
||||
"zh:2469d2e48f28076254a2a3fc327f184914566d9e40c5780b8d96ebf7205f8bc0",
|
||||
"zh:37d7eb334d9561f335e748280f5535a384a88675af9a9eac439d4cfd663bcb66",
|
||||
"zh:741101426a2f2c52dee37122f0f4a2f2d6af6d852cb1db634480a86398fa3511",
|
||||
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||
"zh:a902473f08ef8df62cfe6116bd6c157070a93f66622384300de235a533e9d4a9",
|
||||
"zh:b85c511a23e57a2147355932b3b6dce2a11e856b941165793a0c3d7578d94d05",
|
||||
"zh:c5172226d18eaac95b1daac80172287b69d4ce32750c82ad77fa0768be4ea4b8",
|
||||
"zh:dab4434dba34aad569b0bc243c2d3f3ff86dd7740def373f2a49816bd2ff819b",
|
||||
"zh:f49fd62aa8c5525a5c17abd51e27ca5e213881d58882fd42fec4a545b53c9699",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/stackitcloud/stackit" {
|
||||
version = "0.91.0"
|
||||
constraints = ">= 0.87.0"
|
||||
hashes = [
|
||||
"h1:8de9n+Roq6Z2Ltp9poBBBN9a4zSpx73VLpgFS5mTyoI=",
|
||||
"zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f",
|
||||
"zh:0ed12db90276ccd2d6f87135b7dd078657823c3ca33121c6a157d0bdf08f801e",
|
||||
"zh:160b32bcf1d01666784cf8469e10e0a38d4c3d24c80c0c5be470cc63ef27ea62",
|
||||
"zh:32e1909037235c24138b74131c6fb12ac99003f79750f1768ca5468cc05da6b0",
|
||||
"zh:4376f1cdafbb35ad5f220e28153741908390b23161d9eae3828f7830039ce8ef",
|
||||
"zh:458b054781ef6165d9136fc3d667f9bf37319e37d0f19300bbb63b703de2599d",
|
||||
"zh:54a1864cf1315a118c043f834e02f2a1ca0ecbc8c2a246460589a95847da6c80",
|
||||
"zh:83424712926ccef3c60cc011dfa298721bdbaee3598a0c8459da46bc6b7424cc",
|
||||
"zh:a3c38ebffdbca21dd177b06acf891bed1a903907ba252d0219d91ff0ecf9d861",
|
||||
"zh:c6325e583b77aa1e9df94e3b4b12479d7bf12c66a2ace71c1b8f64e46ac5c37e",
|
||||
"zh:de6db8deeee895af5670df2449c8b8c34df051277f8a6e2f19c5c9ec1f0ddb12",
|
||||
"zh:e18b05e7d8356caa6103c5c80b5ea373be3ff255b453cf577c68798ffe1b93ce",
|
||||
"zh:f4d9215f7a2888c882892642539b2edd3ea97cb25904e4fa358db4f001c3ccd0",
|
||||
"zh:f94d0c0c2bf843867122ababc8d8066d52257e68bbcb5c62a603f77c581e9668",
|
||||
]
|
||||
}
|
||||
33
examples/iaas-cross-az-loadbalancer/00-provider.tf
Normal file
33
examples/iaas-cross-az-loadbalancer/00-provider.tf
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Define required providers
|
||||
terraform {
|
||||
required_version = ">= 0.14.0"
|
||||
required_providers {
|
||||
stackit = {
|
||||
source = "stackitcloud/stackit"
|
||||
version = ">= 0.87.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
version = ">= 3.6.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "stackit" {
|
||||
default_region = var.stackit_region
|
||||
service_account_key_path = var.stackit_service_account_key_path
|
||||
}
|
||||
37
examples/iaas-cross-az-loadbalancer/01-variables.tf
Normal file
37
examples/iaas-cross-az-loadbalancer/01-variables.tf
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
variable "stackit_project_id" {
|
||||
type = string
|
||||
default = "d75e6aab-b616-4b42-ae3b-aaf161ad626d"
|
||||
}
|
||||
|
||||
variable "stackit_region" {
|
||||
type = string
|
||||
default = "eu01"
|
||||
}
|
||||
|
||||
variable "stackit_service_account_key_path" {
|
||||
type = string
|
||||
default = "../../keys/stackit-sa.json"
|
||||
}
|
||||
|
||||
resource "stackit_key_pair" "admin_keypair" {
|
||||
name = "admin-keypair-12345"
|
||||
public_key = chomp(file("~/.ssh/id_rsa.pub"))
|
||||
}
|
||||
|
||||
variable "jumphost_flavor" {
|
||||
default = "c2i.1"
|
||||
}
|
||||
20
examples/iaas-cross-az-loadbalancer/02-network.tf
Normal file
20
examples/iaas-cross-az-loadbalancer/02-network.tf
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
resource "stackit_network" "network" {
|
||||
project_id = var.stackit_project_id
|
||||
name = "network01"
|
||||
ipv4_nameservers = ["1.1.1.1", "9.9.9.9"]
|
||||
ipv4_prefix = "172.17.1.0/24"
|
||||
}
|
||||
27
examples/iaas-cross-az-loadbalancer/03-machine01.tf
Normal file
27
examples/iaas-cross-az-loadbalancer/03-machine01.tf
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
module "test-machine01" {
|
||||
source = "../../modules/test-machine"
|
||||
|
||||
project_id = var.stackit_project_id
|
||||
network_id = stackit_network.network.network_id
|
||||
availability_zone = "eu01-1"
|
||||
|
||||
name = "machine01"
|
||||
machine_type = var.jumphost_flavor
|
||||
disk_size = 500
|
||||
|
||||
user_data = templatefile("${path.module}/apache-debug-user.yaml", {})
|
||||
}
|
||||
27
examples/iaas-cross-az-loadbalancer/04-machine02.tf
Normal file
27
examples/iaas-cross-az-loadbalancer/04-machine02.tf
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
module "test-machine02" {
|
||||
source = "../../modules/test-machine"
|
||||
|
||||
project_id = var.stackit_project_id
|
||||
network_id = stackit_network.network.network_id
|
||||
availability_zone = "eu01-2"
|
||||
|
||||
name = "machine02"
|
||||
machine_type = var.jumphost_flavor
|
||||
disk_size = 500
|
||||
|
||||
user_data = templatefile("${path.module}/apache-debug-user.yaml", {})
|
||||
}
|
||||
84
examples/iaas-cross-az-loadbalancer/05-loadbalancer.tf
Normal file
84
examples/iaas-cross-az-loadbalancer/05-loadbalancer.tf
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Copyright 2026 Schwarz Digits Cloud GmbH & Co. KG
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
resource "stackit_public_ip" "public_ip" {
|
||||
project_id = var.stackit_project_id
|
||||
|
||||
lifecycle {
|
||||
ignore_changes = [network_interface_id]
|
||||
}
|
||||
}
|
||||
|
||||
resource "stackit_loadbalancer" "this" {
|
||||
project_id = var.stackit_project_id
|
||||
name = "lb-example-1"
|
||||
disable_security_group_assignment = true
|
||||
|
||||
target_pools = [
|
||||
{
|
||||
name = "pool-1"
|
||||
target_port = 80
|
||||
targets = [
|
||||
{
|
||||
display_name = "lb-target-1"
|
||||
ip = module.test-machine01.primary_ip
|
||||
},
|
||||
{
|
||||
display_name = "lb-target-2"
|
||||
ip = module.test-machine02.primary_ip
|
||||
}
|
||||
]
|
||||
active_health_check = {
|
||||
healthy_threshold = 10
|
||||
interval = "3s"
|
||||
interval_jitter = "3s"
|
||||
timeout = "3s"
|
||||
unhealthy_threshold = 10
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
listeners = [
|
||||
{
|
||||
display_name = "listener1"
|
||||
port = 80
|
||||
protocol = "PROTOCOL_TCP"
|
||||
target_pool = "pool-1"
|
||||
},
|
||||
]
|
||||
|
||||
networks = [
|
||||
{
|
||||
network_id = stackit_network.network.network_id
|
||||
role = "ROLE_LISTENERS_AND_TARGETS"
|
||||
}
|
||||
]
|
||||
|
||||
external_address = stackit_public_ip.public_ip.ip
|
||||
|
||||
options = {
|
||||
// for private loadbalancer usage
|
||||
/*private_network_only = false*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
output "lb_external_address" {
|
||||
value = stackit_loadbalancer.this.external_address
|
||||
}
|
||||
|
||||
/*output "lb_private_ip_address" {
|
||||
// for private loadbalancer usage
|
||||
value = stackit_loadbalancer.lb_example.private_address
|
||||
}*/
|
||||
9
examples/iaas-cross-az-loadbalancer/MAINTAINERS.md
Normal file
9
examples/iaas-cross-az-loadbalancer/MAINTAINERS.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Maintainers
|
||||
|
||||
General maintainers:
|
||||
|
||||
- Mauritz Uphoff (Mauritz.Uphoff@digits.schwarz)
|
||||
|
||||
This example is actively maintained. The owner is responsible for reviewing and updating dependencies and functionalities on a monthly basis.
|
||||
For questions, issues, or feature requests, please email general maintainers.
|
||||
Please include the BP name and version in your request. We will track your request as an issue.
|
||||
5
examples/iaas-cross-az-loadbalancer/README.md
Normal file
5
examples/iaas-cross-az-loadbalancer/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# IaaS cross AZ Loadbalancer
|
||||
|
||||
## Overview
|
||||
|
||||
A classic highly-available architecture: provisioning multiple VMs across different Availability Zones (AZs) and putting them behind a STACKIT Load Balancer.
|
||||
22
examples/iaas-cross-az-loadbalancer/apache-debug-user.yaml
Normal file
22
examples/iaas-cross-az-loadbalancer/apache-debug-user.yaml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#cloud-config
|
||||
users:
|
||||
- name: debug
|
||||
groups: sudo
|
||||
shell: /bin/bash
|
||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||
lock_passwd: false
|
||||
passwd: "$6$JZBVJ2zsw/o4C1UJ$FskGQWf.nqwj.o9bHbxkSGvSilQcHt03KdPYlgsiE3L77tNqFj0/vnlCXSf.SRb4jR2xsHk/.OlEyT16Txj4J." # hashed version of 'House123!'
|
||||
|
||||
chpasswd:
|
||||
expire: false
|
||||
|
||||
ssh_pwauth: true
|
||||
|
||||
packages:
|
||||
- apache2
|
||||
|
||||
runcmd:
|
||||
- systemctl enable apache2
|
||||
- systemctl start apache2
|
||||
- echo "<h1>Hello from STACKIT Instance</h1><p>Hostname $(hostname)</p>" > /var/www/html/index.html
|
||||
- chown www-data:www-data /var/www/html/index.html
|
||||
|
|
@ -12,14 +12,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
terraform {
|
||||
required_providers {
|
||||
stackit = {
|
||||
source = "stackitcloud/stackit"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "stackit_volume" "boot_volume" {
|
||||
project_id = var.project_id
|
||||
name = "${var.name}-volume"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue