La continua battaglia per abbattere i costi di AWS ci porta a cercare soluzioni "low price" spesso rinunciando a servizi e features come per esempio l'utilizzo di Orchestrator come Amazon ECS ( che personalmente adoro )..
E finalmente eccolo la .. Amazon ECS Anywhere!
Da poco tempo è possibile continuare ad utilizzare ECS sfruttando la parte "computazionale" di un altro cloud e non solo!
Ecco allora una guida su come configurare e utilizzare Amazon ECS Anywhere e il minimo di infrastruttura su Hetnzer Cloud.
Iniziamo ...
In questo tutorial affronteremo:
Hetzner
- Creazione Istanza su Hetzner Cloud
Amazon AWS
- Configurazione Cluster ECS
- Registrazione Istanza External
- Configurazione Service ECS
Creazione Istanza su Hetzner Cloud
Come prima cosa ovviamente creiamo un account su Hetzner Cloud e logghiamoci all'interno della console.
Creiamo un progetto per ospitare le nostre "Istanze Esterne" che poi andremo a configurare e connettere al cluster di ECS più tardi.
Una volta all'interno del progetto, premiamo su Add Server per creare la nostra istanza che ospiterà i vari container deployati sul cluster di ECS di Amazon ECS Anywhere.
Scegliamo il tipo di istanza desiderata, selezionando la distribuzione di Docker CE sotto App facendo attenzione al taglio .. mi spiego meglio.
Amazon ECS Anywhere fatturerà circa 7 euro mese per ogni Istanza Esterna configurata.. questo significa che "più container riusciremo a mettere su un'unica istanza esterna, più grande sarà il risparmio ottenuto rispetto ad ospitare gli stessi servizi direttamente su ECS/Fargate. Per questo tutorial configureremo un macchina piccola.. ma credo personalmente che convenga prendere poche istanze più grandi ( 8/16 core ) ed ospitare 7/12 container da 1 core. ( Attenzione anche al quantitativo di RAM )
Ricordiamoci di impostare una chiave SSH sul nostro account di Hetzner e di applicarla all'istanza, in modo da poterci connettere in SSH una volta creata l'istanza.
Terminato il processo di creazione spostiamoci su AWS per iniziare la creazione dell'infrastruttura di ECS; torneremo in seguito su Hetnzer per installare l'agent necessario alla registrazione dell'istanza sul cluster di ECS Anywhere.
Configurazione Cluster ECS
Accediamo al nostro account di AWS e selezioniamo il servizio di ECS
Selezionare la gestione dei Cluster e premere Create Cluster per creare uno nuovo
Iniziamo a creare il nostro cluster; Imputiamo un nome, selezioniamo External instances using ECS Anywhere e premiamo su Create lasciando tutto il resto così com'è.
Registrazione Istanza External
Adesso è il momento di registrare l'istanza esterna per connettere la macchina di Hetzner.
Selezioniamo il cluster appena creato ed editiamolo:
Selezioniamo Infrastructure
Clicchiamo su Register external instances
Si aprirà la modale di registrazione dell'istanza esterna; cliccando su Generate registration command verranno generati i comandi necessari all'installazione dell'Agent di ECS sia per Linux che per Windows ..
Copiamoci quello per Linux
E' ora di connettersi in SSH al server di Hetzner creato in precedenza e di lanciare il comando (Attenzione! non copiate direttamente questo sotto.. i codici di attivazione sono esemplificativi):
root@Production-Application02:~# curl --proto "https" -o "/tmp/ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" && bash /tmp/ecs-anywhere-install.sh --region "eu-west-1" --cluster "Hetzner" --activation-id "526ffc51-2baa-4534-9bd8-xxxxxxxxxx" --activation-code "xxxxxxxxxxxxx"
Una volta che sarà terminata l'installazione dell'agent l'istanza risulterà attiva su ECS
Configurazione Service ECS
Torniamo ora sulla tab Services e clicchiamo su Create in modo da lanciare il wizard di creazione del Service di ECS.
Selezioniamo Launch Type e successivamente come Launch Type scegliere External
A questo punto è necessario creare una Task Definition da assegnare al service che stiamo creando ..
Apriamo la gestione e creiamone una a partire da un JSON ( è solo un esempio, ovviamente va affinata a seconda del tipo di service o servizio che intendiamo deployare )
Sarà necessario creare un Role su Iam per eseguire il task;
Andiamo quindi sulla gestione di IAM e creiamo un ruolo su cui applichiamo la policy di base: AmazonECSTaskExecutionRolePolicy
Adesso possiamo creare la Task Definition...
Copiamo e incolliamo.. Attenzione a sostituire il placeholder per executionRoleArn con l'arn del ruolo appena creato
{
"requiresCompatibilities": [
"EXTERNAL"
],
"family": "who-am-i",
"containerDefinitions": [
{
"name": "WhoAmI",
"image": "traefik/whoami:latest",
"essential": true
}
],
"volumes": [],
"networkMode": "bridge",
"memory": "1024",
"cpu": "512",
"executionRoleArn": "{arn del Ruolo creato}"
}
Premiamo su create e concludiamo la creazione.
Sarà ora possibile tornare sul nostro service di ECS, selezionare la Task Definition appena creata, dargli un nome e premere Create
Dal momento che durante la creazione del service abbiamo specificato di voler attivi almeno 1 Task
Amazon ECS inizierà un processo di Deployment e tenterà di avviare il task all'interno del nostro Service.
Questo avvierà un container sulla nostra istanza esterna.
E' possibile accertarsi di questo, eseguendo un:
docker container ls
sulla macchina di Hetzner.
Se tutto è andato come dovrebbe, troverete il vostro container avviato e pronto all'uso.
Top comments (0)