curl --request POST \
--url https://loadbalancer.{region}.basaltic.sh/v1/load-balancers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "web-lb",
"type": "application",
"vpc": "c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9",
"subnet": "d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0",
"flavor": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"security_groups": [
"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f"
],
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"replica_count": 2,
"floating_ip": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"floating_ips": [
"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"
],
"tags": {
"environment": "production",
"team": "backend"
}
}
'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers"
payload = {
"name": "web-lb",
"type": "application",
"vpc": "c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9",
"subnet": "d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0",
"flavor": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"security_groups": ["d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f"],
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"replica_count": 2,
"floating_ip": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"floating_ips": ["f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"],
"tags": {
"environment": "production",
"team": "backend"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'web-lb',
type: 'application',
vpc: 'c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9',
subnet: 'd4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0',
flavor: 'e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1',
security_groups: ['d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f'],
desired_count: 2,
min_count: 1,
max_count: 5,
replica_count: 2,
floating_ip: 'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2',
floating_ips: ['f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2'],
tags: {environment: 'production', team: 'backend'}
})
};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/load-balancers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'web-lb',
'type' => 'application',
'vpc' => 'c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9',
'subnet' => 'd4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0',
'flavor' => 'e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1',
'security_groups' => [
'd1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f'
],
'desired_count' => 2,
'min_count' => 1,
'max_count' => 5,
'replica_count' => 2,
'floating_ip' => 'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2',
'floating_ips' => [
'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2'
],
'tags' => [
'environment' => 'production',
'team' => 'backend'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers"
payload := strings.NewReader("{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}"
response = http.request(request)
puts response.read_body{
"load_balancer": {
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"id": "4e1f8c2a-9b3d-4f6e-8a1c-2d5e7f9a0b3c",
"crn": "crn:loadbalancer:sa-saopaulo-1:my-account:load-balancer/web-lb",
"account_id": "6f9619ff-8b86-4d01-b42d-00cf4fc964ff",
"name": "web-lb",
"type": "application",
"status": "active",
"faults": [],
"subnet": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/prod-web",
"vpc": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod",
"name": "prod",
"cidr_ipv4": "10.0.0.0/16",
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "Production VPC for web and app tiers",
"cidr_ipv6": "2a13:9500:1a6:100::/60"
},
"route_table": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/route-table/prod-private-rt",
"name": "prod-private-rt"
},
"name": "prod-web",
"cidr_ipv4": "10.0.1.0/24",
"gateway_ipv4": "10.0.1.1",
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "Public web-tier subnet",
"cidr_ipv6": "2a13:9500:1a6:100::/64",
"gateway_ipv6": "2a13:9500:1a6:100::1"
},
"flavor_id": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"replica_count": 2,
"floating_ips": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:floating-ip/<uuid>",
"family": "ipv6",
"attached_to": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/public/interface/eth0",
"members": [
{
"interface": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/public/interface/eth0",
"instance": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:compute:sa-saopaulo-1:my-account:instance/web",
"name": "<string>"
}
},
"health": "unknown",
"reason": "unprobed",
"created_at": "2023-11-07T05:31:56Z",
"address_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"address": "212.66.52.71",
"visibility": "public",
"description": "Public IP for the web load balancer",
"health_check": {
"protocol": "http",
"port": 8080,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"path": "/healthz",
"matcher": "200-299"
},
"subnet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vpc_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"tags": {
"environment": "production",
"team": "backend"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"rollout_surge": true,
"autoscaling": {
"enabled": true,
"metrics": [
{
"source": "telemetry",
"target_type": "average_value",
"target_value": 100,
"name": "queue_depth",
"labels": {
"queue": "orders"
},
"sample_aggregation": "last",
"series_aggregation": "sum",
"expected_series": 1,
"window_seconds": 120,
"max_age_seconds": 90
}
],
"warmup_seconds": 180,
"cooldown_seconds": 60,
"scale_down_stabilization_seconds": 300,
"max_scale_out_step": 4,
"max_scale_in_step": 1,
"drain_seconds": 120
},
"autoscaling_status": {
"status": "pending",
"reason": "waiting for sustained lower demand",
"history": [
{
"at": "2023-11-07T05:31:56Z",
"from": 1,
"to": 1,
"reason": "<string>"
}
],
"evaluated_at": "2023-11-07T05:31:56Z",
"last_scaled_at": "2023-11-07T05:31:56Z"
},
"internal_ipv4": "203.0.113.50",
"internal_ipv6": "2001:db8::32",
"public_ipv6": "2a13:9500:1a6:101::a",
"floating_ip_id": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"dns_name": "web-lb.my-account.lb.sa-saopaulo-1.basaltic.sh"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "CONFLICT",
"message": "Resource with this name already exists",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Criar um balanceador de carga
curl --request POST \
--url https://loadbalancer.{region}.basaltic.sh/v1/load-balancers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "web-lb",
"type": "application",
"vpc": "c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9",
"subnet": "d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0",
"flavor": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"security_groups": [
"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f"
],
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"replica_count": 2,
"floating_ip": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"floating_ips": [
"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"
],
"tags": {
"environment": "production",
"team": "backend"
}
}
'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers"
payload = {
"name": "web-lb",
"type": "application",
"vpc": "c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9",
"subnet": "d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0",
"flavor": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"security_groups": ["d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f"],
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"replica_count": 2,
"floating_ip": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"floating_ips": ["f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"],
"tags": {
"environment": "production",
"team": "backend"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'web-lb',
type: 'application',
vpc: 'c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9',
subnet: 'd4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0',
flavor: 'e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1',
security_groups: ['d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f'],
desired_count: 2,
min_count: 1,
max_count: 5,
replica_count: 2,
floating_ip: 'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2',
floating_ips: ['f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2'],
tags: {environment: 'production', team: 'backend'}
})
};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/load-balancers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'web-lb',
'type' => 'application',
'vpc' => 'c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9',
'subnet' => 'd4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0',
'flavor' => 'e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1',
'security_groups' => [
'd1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f'
],
'desired_count' => 2,
'min_count' => 1,
'max_count' => 5,
'replica_count' => 2,
'floating_ip' => 'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2',
'floating_ips' => [
'f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2'
],
'tags' => [
'environment' => 'production',
'team' => 'backend'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers"
payload := strings.NewReader("{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"web-lb\",\n \"type\": \"application\",\n \"vpc\": \"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9\",\n \"subnet\": \"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0\",\n \"flavor\": \"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1\",\n \"security_groups\": [\n \"d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f\"\n ],\n \"desired_count\": 2,\n \"min_count\": 1,\n \"max_count\": 5,\n \"replica_count\": 2,\n \"floating_ip\": \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\",\n \"floating_ips\": [\n \"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2\"\n ],\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}"
response = http.request(request)
puts response.read_body{
"load_balancer": {
"desired_count": 2,
"min_count": 1,
"max_count": 5,
"id": "4e1f8c2a-9b3d-4f6e-8a1c-2d5e7f9a0b3c",
"crn": "crn:loadbalancer:sa-saopaulo-1:my-account:load-balancer/web-lb",
"account_id": "6f9619ff-8b86-4d01-b42d-00cf4fc964ff",
"name": "web-lb",
"type": "application",
"status": "active",
"faults": [],
"subnet": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/prod-web",
"vpc": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod",
"name": "prod",
"cidr_ipv4": "10.0.0.0/16",
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "Production VPC for web and app tiers",
"cidr_ipv6": "2a13:9500:1a6:100::/60"
},
"route_table": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/route-table/prod-private-rt",
"name": "prod-private-rt"
},
"name": "prod-web",
"cidr_ipv4": "10.0.1.0/24",
"gateway_ipv4": "10.0.1.1",
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "Public web-tier subnet",
"cidr_ipv6": "2a13:9500:1a6:100::/64",
"gateway_ipv6": "2a13:9500:1a6:100::1"
},
"flavor_id": "e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1",
"replica_count": 2,
"floating_ips": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:floating-ip/<uuid>",
"family": "ipv6",
"attached_to": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/public/interface/eth0",
"members": [
{
"interface": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/public/interface/eth0",
"instance": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "crn:compute:sa-saopaulo-1:my-account:instance/web",
"name": "<string>"
}
},
"health": "unknown",
"reason": "unprobed",
"created_at": "2023-11-07T05:31:56Z",
"address_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"tags": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"address": "212.66.52.71",
"visibility": "public",
"description": "Public IP for the web load balancer",
"health_check": {
"protocol": "http",
"port": 8080,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"path": "/healthz",
"matcher": "200-299"
},
"subnet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vpc_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"tags": {
"environment": "production",
"team": "backend"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"rollout_surge": true,
"autoscaling": {
"enabled": true,
"metrics": [
{
"source": "telemetry",
"target_type": "average_value",
"target_value": 100,
"name": "queue_depth",
"labels": {
"queue": "orders"
},
"sample_aggregation": "last",
"series_aggregation": "sum",
"expected_series": 1,
"window_seconds": 120,
"max_age_seconds": 90
}
],
"warmup_seconds": 180,
"cooldown_seconds": 60,
"scale_down_stabilization_seconds": 300,
"max_scale_out_step": 4,
"max_scale_in_step": 1,
"drain_seconds": 120
},
"autoscaling_status": {
"status": "pending",
"reason": "waiting for sustained lower demand",
"history": [
{
"at": "2023-11-07T05:31:56Z",
"from": 1,
"to": 1,
"reason": "<string>"
}
],
"evaluated_at": "2023-11-07T05:31:56Z",
"last_scaled_at": "2023-11-07T05:31:56Z"
},
"internal_ipv4": "203.0.113.50",
"internal_ipv6": "2001:db8::32",
"public_ipv6": "2a13:9500:1a6:101::a",
"floating_ip_id": "f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2",
"dns_name": "web-lb.my-account.lb.sa-saopaulo-1.basaltic.sh"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "CONFLICT",
"message": "Resource with this name already exists",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}loadbalancer:CreateLoadBalancer. Consulte permissões de balanceadores de carga para obter a lista completa, o que cada uma abrange e um exemplo de política.Autorizações
Um token bearer OAuth 2.0, enviado como Authorization: Bearer <token>. Esta é a forma recomendada de autenticação.
Obtenha o token trocando o par de chaves de acesso de uma conta de serviço em POST /v1/oauth/token com grant_type=client_credentials. Esse é o fluxo padrão de credenciais de cliente; bibliotecas compatíveis com OAuth podem obter e renovar o token para você.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Os tokens duram uma hora por padrão. O mesmo par de chaves de acesso também serve como credencial AWS SigV4 para o endpoint de objetos compatível com S3, que aceita somente esse método de autenticação.
Cabeçalhos
Chave opcional gerada pelo cliente que torna uma criação segura para reprodução. A reintentar uma solicitação com a mesma chave retorna o resultado original literalmente em vez de criar um recurso duplicado. A reutilização de uma chave com um corpo de solicitação diferente é rejeitada (422); uma solicitação cuja chave ainda está sendo processada retorna 409. Os registros são honrados por 24 horas. Use um UUID ou token exclusivo semelhante.
255Corpo
Relações aceitam um UUID, CRN ou nome imutável exato, classificado por sintaxe. Os grupos de VPC, sub-rede e segurança devem pertencer à conta do chamador nesta região. Os nomes de sub-rede são escopo pelo vpc. Flavor é uma referência de catálogo regional. Referências IP flutuantes aceitam somente UUID ou CRN. Todas as referências são resolvidas antes de gravar. Os endereços são fixos na criação; atualizações não podem substituí-los.
1..127 caracteres de [A-Za-z0-9._-] Os nomes de recursos não devem começar com o prefixo literal crn: ou ser UUIDs (formas canônicas, compactas, entre colchetes ou urn:uuid:, em qualquer caso).
"web-lb"
application, network "application"
VPC o LB vai viver. Deve corresponder à VPC da sub-rede.
"c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9"
Sub-rede às quais as instâncias de LB se conectam. O IP virtual é alocado a partir desta sub-rede.
"d4e5f6a7-b8c9-4012-d3e4-f5a6b7c8d9e0"
Calcule o tipo de instância para cada instância de LB.
"e5f6a7b8-c9d0-4123-e4f5-a6b7c8d9e0f1"
Grupos de segurança anexados a cada NIC de réplica (forma ALB da AWS). Uma placa de rede VPC sem grupo de segurança nega todo o tráfego de dados, portanto, as portas de ouvinte devem ser abertas por um grupo de segurança listado aqui. Reaplicado a réplicas de substituição. O caminho do plano de controle do LB (configuração do agente + heartbeat através do ponto de extremidade de metadados) é sempre permitido e não precisa de nenhum.
["d1b6f3a8-4c2e-4a9d-8f7b-1e5c3a2d9b4f"]
Alvo estável dentro de min_count e max_count.
1 <= x <= 102
Capacidade mais baixa vinculada.
1 <= x <= 101
Capacidade superior limitada, incluindo aumento de lançamento.
1 <= x <= 105
Rastreamento de destino compartilhado por pools de instâncias e balanceadores de carga. As atualizações substituem a política. Defina enabled=false para manter as configurações e usar o dimensionamento manual. Cada métrica recomenda uma contagem desejada; a maior recomendação vence. Observações ausentes, obsoletas ou incompletas impedem o dimensionamento, mas não bloqueiam o dimensionamento recomendado por outra métrica válida. As decisões obedecem aos recursos min_count/max_count, warmup, cooldown, estabilização, limites de passo e cotas. O estado sobrevive às reinicializações do controlador. As políticas ativas possuem desired_count; as alterações manuais são aceitas e a avaliação automática é retomada após o tempo de espera. A telemetria personalizada requer telemetria:ReadMetrics na mesma conta.
Show child attributes
Show child attributes
Alias de entrada obsoleto de desired_count; envie apenas um. O padrão desejado é 1. Os limites omitidos são padrão para o desejado.
1 <= x <= 102
Public IPv4 abreviatura. Não pode ser combinado com floating_ips. Não aloca IPv6 público.
"f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"
IPs flutuantes livres existentes desta conta e região, no máximo um por família e visibilidade (privado/público, IPv4/IPv6). Os endereços privados devem pertencer à sub-rede selecionada. As famílias privadas ausentes são alocadas automaticamente para cada família ativada nessa sub-rede. Os endereços públicos são opcionais e exigem uma rota padrão de família correspondente para um gateway da Internet; gateways NAT e somente de saída não se qualificam. O IPv6 requer uma sub-rede habilitada para IPv6. Endereços de propriedade ou anexados ao pool não estão disponíveis. Na exclusão, os endereços fornecidos são separados e retidos; as alocações privadas automáticas são liberadas. Não pode ser combinado com floating_ip.
4["f6a7b8c9-d0e1-4234-f5a6-b7c8d9e0f1a2"]
Show child attributes
Show child attributes
{
"environment": "production",
"team": "backend"
}
Resposta
Criado
Show child attributes
Show child attributes

