DEV Community

Cover image for Hybrid Cloud con Amazon ECS Anywhere e Hetzner
Federico Verdi
Federico Verdi

Posted on • Updated on

Hybrid Cloud con Amazon ECS Anywhere e Hetzner

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

  1. Creazione Istanza su Hetzner Cloud

Amazon AWS

  1. Configurazione Cluster ECS
  2. Registrazione Istanza External
  3. Configurazione Service ECS

Creazione Istanza su Hetzner Cloud

Come prima cosa ovviamente creiamo un account su Hetzner Cloud e logghiamoci all'interno della console.

Image description

Creiamo un progetto per ospitare le nostre "Istanze Esterne" che poi andremo a configurare e connettere al cluster di ECS più tardi.

Image description

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.

Image description

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 )

Image description

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.

Image description

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

Image description

Selezionare la gestione dei Cluster e premere Create Cluster per creare uno nuovo

Image description

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'è.

Image description


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

Image description

Clicchiamo su Register external instances

Image description

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

Image description

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

Image description


Configurazione Service ECS

Torniamo ora sulla tab Services e clicchiamo su Create in modo da lanciare il wizard di creazione del Service di ECS.

Image description

Selezioniamo Launch Type e successivamente come Launch Type scegliere External

Image description

A questo punto è necessario creare una Task Definition da assegnare al service che stiamo creando ..

Image description

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 )

Image description

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

Image description

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}"
}
Enter fullscreen mode Exit fullscreen mode

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

Image description

Dal momento che durante la creazione del service abbiamo specificato di voler attivi almeno 1 Task

Image description

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)