Under en incident är den värsta känslan att veta att svaret finns ”någonstans i Scaleway-konsolen”… och ändå lägga 10 minuter på att klicka runt mellan zoner, instanser och baremetal för att hitta den enda server du faktiskt behöver.
Det här problemet med Scaleway Slack lookup drabbar DevOps-ansvariga först, men jourhavande sysadmins och även någon enstaka engineering manager känner av det också. Du vill ha ett snabbt, konsekvent sätt att identifiera rätt maskin via tagg, namn, publik IP eller zon, och sedan dela resultatet utan att behöva skriva om det tre gånger.
Det här arbetsflödet gör en enkel POST-förfrågan till en strukturerad serverträff som du kan klistra in direkt i Slack, vilket innebär färre konsolrundor och tydligare incidentuppdateringar. Nedan ser du vad det gör, vad du behöver och hur du anpassar det till din miljö.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutlig output:
n8n Workflow Template: Scaleway till Slack: direkt serveruppslag
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code search Tags"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code search Name"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code search public_ip"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code search zone"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Error"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook1"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook2"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook3"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook4"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get scw instance by zone"]
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Zone Instance", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get scw baremetal by zone"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out ZONE_INSTANCE", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If ZONE_BAREMETAL in ZONE_IN..", pos: "b", h: 48 }
n0 --> n2
n2 --> n3
n2 --> n4
n2 --> n5
n2 --> n6
n2 --> n15
n2 --> n8
n7 --> n1
n1 --> n19
n4 --> n9
n3 --> n12
n6 --> n11
n5 --> n10
n17 --> n0
n17 --> n16
n19 --> n17
n16 --> n20
n18 --> n17
n20 --> n18
n20 --> n17
end
subgraph sg1["Flow 2"]
direction LR
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Scalway Machines"]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n13 --> n14
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2,n20 decision
class n7,n8,n9,n10,n11,n12,n15,n16,n18,n13 api
class n0,n3,n4,n5,n6 code
classDef customIcon fill:none,stroke:none
class n0,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n15,n16,n18,n13 customIcon
Problemet: serveruppslag tar tid när snabbhet är avgörande
Att slå upp ”rätt server” låter enkelt – tills det inte är det. I Scaleway har du ofta flera zoner, en mix av instanser och baremetal, och namngivningsstandarder som var ”tillräckligt bra” för sex månader sedan. Så du söker på namn, sedan söker du på tagg, sedan korscheckar du en IP någon klistrade in i Slack, och sedan inser du att du var i fel zon. Under tiden fortsätter incidentkanalen att rulla och din uppdatering är redan inaktuell.
Det summerar snabbt. Och problemet handlar inte bara om tid, utan om tillförlitlighet under press.
- Du gör ofta samma uppslag två gånger eftersom någon ber om ”bara IP:t” eller ”bara zonen” efter att du redan har postat en skärmbild.
- Manuell filtrering blir inkonsekvent, så två personer kan ”hitta” olika servrar för samma förfrågan.
- Konsolnavigering är långsam när du hoppar mellan instanser och baremetal över flera zoner.
- Incidentuppdateringar tappar tydlighet eftersom detaljerna (status, typ, taggar) inte delas i ett prydligt, repeterbart format.
Lösningen: fråga Scaleway en gång och få en strukturerad träff att dela i Slack
Det här n8n-arbetsflödet fungerar som en ”server lookup-endpoint” för teamet. En webhook tar emot en enkel JSON-payload med två fält: vad du vill söka på (taggar, namn, public IP eller zon) och värdet du vill söka efter. Därifrån hämtar arbetsflödet serverinventeringar från Scaleways API över dina konfigurerade zoner för både instanser och baremetal, och normaliserar sedan de råa API-svaren till en konsekvent struktur. Därefter skickar det resultaten genom rätt filter baserat på din input så att du bara får tillbaka matchande servrar. Slutligen svarar det direkt med en strukturerad JSON-array (eller ett hjälpsamt fel), som du kan vidarebefordra till Slack, bifoga i en incidentuppdatering eller mata in i en annan automation.
Arbetsflödet startar med ett autentiserat webhook-anrop. Sedan loopar det igenom din zonlista, hämtar inventering för instanser och baremetal, transformerar allt till ett standardiserat ”serverinfo”-format och kör ett riktat filter. Du får svaret i ett svar, redo att dela.
Det du får: automation vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att teamet kör i 6 zoner och att ni använder både instanser och baremetal. Manuellt betyder en kontroll som ”hitta servern via IP” ofta att du öppnar konsolen, byter zon några gånger och sedan kollar i den andra produktvyn, vilket lätt blir runt 5 minuter per zon när du räknar in kontextbyten (ungefär 30 minuter). Med det här arbetsflödet skickar du en förfrågan (eller låter Slack skicka den), väntar på att API-anropen blir klara och får tillbaka en filtrerad lista på cirka en minut. Det är ungefär en halvtimme ner till ”kopiera svaret och klistra in”.
Det du behöver
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Scaleway API för att hämta inventering för instanser och baremetal
- Slack för att dela uppslagsresultat i era kanaler
- Scaleway API-token (hämta den i Scaleway Console → API keys)
Kunskapsnivå: medel. Du klistrar in en API-token, sätter zonlistor och testar en webhook-förfrågan med basic auth.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En autentiserad webhook tar emot din uppslagsförfrågan. Du skickar search_by (tags, name, public_ip eller zone) plus search-värdet. Basic authentication skyddar endpointen så att vem som helst inte kan inventera din infrastruktur.
Din input mappas och zonlistan förbereds. n8n normaliserar inkommande fält och bryter sedan ut zonkonfigurationen så att den kan iterera snyggt över flera Scaleway-regioner.
Scaleway-data hämtas och transformeras. Arbetsflödet loopar igenom zoner, anropar Scaleway API för instanser och (när det är tillämpligt) baremetal, och kör sedan ett transformeringssteg så att båda datakällorna ser likadana ut för resten av arbetsflödet.
Rätt filter körs och ett svar returneras. Ett routningssteg skickar den aggregerade listan till rätt filtreringsrutin, och n8n svarar med antingen matchningarna, den ofiltrerade listan eller ett tydligt felmeddelande som du kan visa i Slack.
Du kan enkelt ändra zonlistorna så att de matchar din faktiska footprint och sedan routa slutsvaret till Slack (eller e-post) efter behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: konfigurera webhook-triggern
Det här arbetsflödet startar när ett externt system skickar en POST-förfrågan till den inkommande webhooken och returnerar resultat via response-noder.
- Lägg till en Incoming Webhook Trigger-nod och ställ in HTTP Method till
POST. - Ställ in Path till
a6767312-3a4c-4819-b4fe-a03c9e0ade5c. - Ställ in Response Mode till
responseNodeså att response-noderna kan returnera nyttolasten. - Inloggningsuppgifter krävs: Anslut era httpBasicAuth-uppgifter i Incoming Webhook Trigger.
Steg 2: anslut Scaleway-indata och zonlistor
Fånga filterindata och definiera Scaleway-zonerna som ska frågas innan ni delar upp dem i enskilda objekt.
- I Map Input Fields, ställ in search_by till
{{ $json.body.search_by }}och search till{{ $json.body.search }}. - I Map Input Fields, ersätt Scaleway-X-Auth-Token-värdet
[CONFIGURE_YOUR_API_KEY]med er Scaleway API-nyckel. - Behåll ZONE_INSTANCE som arrayen
["fr-par-1", "fr-par-2", "fr-par-3", "nl-ams-1", "nl-ams-2", "nl-ams-3", "pl-waw-1", "pl-waw-2", "pl-waw-3"]. - Behåll ZONE_BAREMETAL som arrayen
["fr-par-1", "fr-par-2", "nl-ams-1", "nl-ams-2", "pl-waw-2", "pl-waw-3"]. - I Split Zone List, ställ in Field To Split Out till
ZONE_INSTANCEför att bearbeta varje zon individuellt. - Verifiera att Split Zone List flödar in i Iterate Zones för att starta per-zon-loopen.
[CONFIGURE_YOUR_API_KEY] i Map Input Fields kommer alla Scaleway-anrop att misslyckas med autentiseringsfel.Steg 3: sätt upp zoniterering och Scaleway API-anrop
Det här steget loopar igenom zoner, hämtar compute- och baremetal-servrar och avgör om baremetal-uppslag behövs.
- I Iterate Zones, behåll standardinställningarna för att batcha igenom den uppdelade zonlistan.
- I Fetch Instance by Zone, ställ in URL till
=https://api.scaleway.com/instance/v1/zones/{{ $('Split Zone List').item.json.ZONE_INSTANCE }}/servers. - I Fetch Instance by Zone, ställ in headers: X-Auth-Token till
{{ $('Map Input Fields').item.json['Scalway-X-Auth-Token'] }}och Content-Type tillapplication/json. - I Check Baremetal Zone, bekräfta att villkoret använder att
{{ $('Map Input Fields').item.json.ZONE_BAREMETAL }}innehåller{{ $('Iterate Zones').item.json.ZONE_INSTANCE }}. - I Fetch Baremetal by Zone, ställ in URL till
=https://api.scaleway.com/baremetal/v1/zones/{{ $('Split Zone List').item.json.ZONE_INSTANCE }}/serversoch återanvänd samma header-värden som för instance-anropet.
Steg 4: normalisera serverdata och routa filter
Serverdata normaliseras och routas sedan baserat på den begärda filtertypen.
- I Transform Server Data, behåll JavaScript-logiken som extraherar
name,tags,public_ip,type,state,zoneochuser. - Koppla Iterate Zones till Transform Server Data så att varje batch bearbetas innan filtrering.
- I Route Filter Type, säkerställ att varje regel använder
{{ $('Map Input Fields').first().json.search_by }}och rätt värden:tags,name,public_ip,zoneochnull. - Bekräfta flödet Transform Server Data → Route Filter Type, och vidare till respektive filternod.
extra och är kopplad till Return Error Response om filtret är ogiltigt.Steg 5: konfigurera filter och response-noder
Filternoderna begränsar resultaten efter tagg, namn, IP eller zon och svarar via webhookens response-noder.
- I Filter by Tags, behåll filteruttrycket som kontrollerar
{{ $('Map Input Fields').first().json.search }}iserver.json.tags. - I Filter by Name, behåll filteruttrycket som kontrollerar
{{ $('Map Input Fields').first().json.search }}iserver.json.name. - I Filter by Public IP, behåll filteruttrycket som kontrollerar
{{ $('Map Input Fields').first().json.search }}iserver.json.public_ip. - I Filter by Zone, behåll filterlogiken som angivet (observera att den för närvarande kontrollerar
public_ipmot sökningen). - Koppla filternoderna till deras response-noder: Filter by Tags → Send Tag Results, Filter by Name → Send Name Results, Filter by Public IP → Send IP Results, Filter by Zone → Send Zone Results.
- Säkerställ att Send Unfiltered Results är kopplad till regeln i Route Filter Type som matchar
null. - Behåll Return Error Response med Response Body satt till
{ "error": "no search by {{ $('Map Input Fields').item.json.search_by }} available. You can search by : tags, name, public_ip, zone" }.
public_ip, inte zone. Uppdatera dess JavaScript om ni avser riktig zonfiltrering.Steg 6: konfigurera verktygsuppslagning (valfritt)
Verktygsgrenen kan anropa en annan webhook för att begära parametrar för serveruppslag och iterera igenom dem.
- I Utility: Invoke Server Lookup, ställ in URL till
https://sup-n8n.unipile.com/webhook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxoch Method tillPOST. - Inloggningsuppgifter krävs: Anslut era httpBasicAuth-uppgifter i Utility: Invoke Server Lookup.
- Behåll body-parametrarna: search_by och search för att styra uppslagsförfrågan.
- Bekräfta flödet Utility: Invoke Server Lookup → Utility: Iterate Items om ni planerar att använda den här grenen.
Steg 7: testa och aktivera ert arbetsflöde
Validera webhooken, säkerställ att Scaleway-anropen lyckas och aktivera därefter arbetsflödet för produktion.
- Använd test-URL:en för Incoming Webhook Trigger för att skicka en POST-body med
search_byochsearch. - Verifiera att Transform Server Data skickar ut normaliserade serverobjekt och att ett svar returneras via rätt Send ... Results-nod.
- Bekräfta att körningen lyckas genom att kontrollera webhookens response body för serverposter (eller JSON-felet från Return Error Response om den är ogiltig).
- När allt är validerat, slå på arbetsflödet till Active för produktion.
Vanliga fallgropar
- Scaleway API-uppgifter kan gå ut eller sakna rätt behörigheter. Om det slutar fungera: kontrollera din token i området ”Edit Fields (Set)” och bekräfta först i Scaleway Console att nyckeln fortfarande är giltig.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera outputs för alltid.
Vanliga frågor
Cirka 30 minuter om du redan har din Scaleway-token och zonerna till hands.
Nej, ingen kodning krävs. Du klistrar främst in uppgifter, justerar zonlistor och testar ett par webhook-förfrågningar.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna med Scaleway API-användning (oftast försumbar för enkla inventeringsuppslag).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverdrift.
Ja, men då lägger du till ett extra steg. Behåll befintligt webhook-svar för API-användare och lägg sedan till en Slack message-action efter den filterväg du bryr dig om (till exempel efter ”Filter by Public IP”). Vanliga anpassningar är att formatera outputen som ett kort Slack-vänligt block, bara returnera servrar som är ”running” och tagga en kanal baserat på zon.
Oftast beror det på en ogiltig eller utgången Scaleway API-token. Skapa en ny token i Scaleway Console och uppdatera den där arbetsflödet sätter autentiseringsheadern (noden ”Edit Fields (Set)” är den vanligaste platsen). Om tokenen är okej, kontrollera att dina zoner stämmer, eftersom en felaktig zon kan se ut som ”no data” och ge förvirrande tomma resultat. Rate limiting är ovanligt för det här användningsfallet, men om du bombar endpointen under ett avbrott kan det hända.
Några tusen servrar är inga problem för de flesta upplägg, eftersom det i praktiken bara är API-hämtning + filtrering, och du kan alltid self-hosta n8n för att skala antalet körningar utifrån din serverkapacitet.
För det här användningsfallet är n8n oftast ett bättre val, eftersom du gör insamling via API över flera zoner, förgreningar och datanormalisering i en och samma körning – och de plattformarna blir snabbt klumpiga (och dyra) när flödet inte är en enkel trigger/action i två steg. n8n ger dig också möjlighet att self-hosta, vilket spelar roll om du vill ha obegränsade interna uppslag och bättre kontroll över credentials. Zapier eller Make kan ändå fungera om du bara någonsin frågar en zon och inte bryr dig om hur svaret formas. Om du vill ha Slack-anpassad formatering, fallback-beteenden och skyddsräcken som allowlists för zoner håller n8n sig läsbart när det växer. Prata med en automationsexpert om du vill ha hjälp att välja.
När detta väl rullar blir serveridentifiering en vana som tar ett meddelande, inte ett miniprojekt i konsolen. Arbetsflödet hanterar de repetitiva uppslagen så att dina incidentuppdateringar förblir snabba och trovärdiga.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.