Hai bisogno di automatizzare la distribuzione del container Docker? Hai sentito parlare di AWS Elastic Beanstalk? AWS Elastic Beanstalk è un altro servizio eccellente per la distribuzione e il ridimensionamento di applicazioni e servizi Web.
In questo tutorial imparerai come distribuire un'applicazione su AWS Elastic Beanstalk utilizzando EB CLI e GitHub Actions.
Pronto? Continua a leggere e inizia a ridimensionare le tue applicazioni!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere quanto segue:
- AWS Command-Line Interface (CLI) – Questo tutorial utilizza AWS CLI v2.
- Utente AWS con autorizzazione Elastic Beanstalk.
- EB CLI v3.14.6 installato
- Un account GitHub e un repository GitHub già configurato.
Creazione di un host Web statico Docker
Per dimostrare come distribuire un container Docker, avrai prima bisogno di un'app da distribuire. E per questa demo utilizzerai un file HTML.
1. Esegui git clone
comando seguente per clonare un file HTML da un repository GitHub.
git clone [email protected]:Adam-the-Automator/aws-elastic-beanstalk.git
2. Quindi, crea un Dockerfile con il tuo editor di testo preferito nella radice del repository che hai clonato (passaggio uno) e popola il file con il codice seguente.
Il codice seguente mostra l'output del codice HTML (index.html
).
# Get NGINX base image
FROM nginx
# Add the index file to nginx
ADD index.html /usr/share/nginx/html/
# Expose port to enable elastic beanstalk and connect to the Docker container
EXPOSE 80
3. Esegui il docker build
comando seguente per creare un contenitore Docker del tuo file HTML chiamato html
nella directory di lavoro.
docker build -t html .
4. Ora, esegui docker run
comando seguente per eseguire il contenitore Docker (html
) che hai creato in precedenza (passaggio tre).
Il --name
flag dice a Docker il nome (justhtml
) da utilizzare quando si fa riferimento al contenitore all'interno della rete. Mentre il -p
flag mappa la porta del tuo localhost (8080
) al porto del container Docker (80
).
docker run --name justhtml -p 8080:80 html
5. Infine, apri il tuo browser web e vai a http://localhost:8080/ per verificare di poter accedere al contenitore Docker (HTML).
Se tutto funziona bene, vedrai la pagina HTML mostrata di seguito.
Distribuzione dell'applicazione su Elastic Beanstalk tramite l'AWS CLI
Hai verificato che il tuo container Docker sia accessibile sul tuo host, quindi è il momento di distribuire la tua applicazione su AWS Elastic Beanstalk. Utilizzerai l'interfaccia a riga di comando EB per distribuire il tuo container Docker (html) in AWS Elastic Beanstalk.
Supponendo che tu abbia già configurato l'AWS CLI, non devi fare nulla per configurare l'EB CLI. Come mai? EB CLI utilizza le stesse credenziali di AWS CLI.
1. Esegui eb init
comando seguente per inizializzare un ambiente Elastic Beanstalk per il tuo progetto. L'ambiente consente a Elastic Beanstalk di identificare il tipo di applicazione che desideri distribuire.
eb init
Dopo aver eseguito il comando, riceverai una richiesta per compilare i dettagli. Di seguito, per questo esempio sono state utilizzate le seguenti opzioni.
- Regione predefinita:
3
- Nome dell'applicazione:
html
- Sembra che tu stia utilizzando Docker. È corretto?
Y
- Seleziona un ramo della piattaforma:
1
- Vuoi continuare con CodeCommit?
N
- Vuoi configurare SSH per le tue istanze?
N
2. Quindi, esegui eb create
comando seguente per creare un ambiente per la tua applicazione su Elastic Beanstalk. Fondamentalmente, distribuisci la tua applicazione ed Elastic Beanstalk gestirà il resto come il bilanciamento del carico
Se Git è stato inizializzato nel tuo progetto, assicurati di eseguire il commit di tutte le modifiche prima di creare un'applicazione su Elastic Beanstalk. Come mai? EB CLI utilizza l'archivio Git del commit più recente.
eb create
Premi Invio per utilizzare il valore predefinito per un Nome ambiente , Prefisso DNS CNAME e tipo di bilanciamento del carico dato che stai lavorando solo su un'app HTML.
Ma quando ti viene chiesto di abilitare le richieste Spot Fleet, digita n
, poiché questa opzione fornisce istanze on demand facoltative che non sono necessarie qui, quindi premi Invio.
Un gruppo con scalabilità automatica viene fornito automaticamente quando hai eseguito per la prima volta
eb create
comando.I trigger predefiniti aumentano quando il traffico di rete medio in uscita da ciascuna istanza è superiore a 6 MB e diminuiscono quando il traffico di rete in uscita è inferiore a 2 MB in un periodo di cinque minuti.
Dato che la tua applicazione è solo HTML, è improbabile che si verifichi il ridimensionamento dell'applicazione.
3. Infine, esegui eb open
comando seguente per aprire l'applicazione sul browser Web predefinito direttamente da Elastic Beanstalk.
eb open
Verifica dell'applicazione AWS Elastic Beanstalk
Ora che hai distribuito la tua applicazione, vedrai tutte le utili funzionalità aggiunte alla tua applicazione. Per prima cosa verificherai dove Elastic Beanstalk ha archiviato il file dell'applicazione.
Per avere accesso al file dell'applicazione:
1. Accedi alla console AWS con l'utente aggiunto nella configurazione dell'AWS CLI.
2. Fare clic su Tutto Servizi menu a discesa, fai clic su Archiviazione scheda, quindi seleziona S3 .
3. Nella dashboard di S3, fare clic sul progetto per visualizzare le informazioni sull'applicazione.
Come mostrato di seguito, vedi la tua applicazione negli Oggetti elenco.
4. Infine, fai clic sull'elenco a discesa Tutti i servizi e fai clic sulla scheda Calcola, quindi seleziona EC2 per accedere alla dashboard di EC2 .
Nella dashboard EC2, puoi vedere le risorse EC2 che eseguono la tua applicazione, in modo simile a quello riportato di seguito. Ma attenzione, i dati di seguito potrebbero differire dai tuoi.
Inoltre, puoi eseguire eb status
comando qui sotto per vedere maggiori dettagli sulla tua applicazione.
eb status
Aggiornamento di un'applicazione AWS Elastic Beanstalk
Quando sono state apportate modifiche alla tua applicazione, dovrai eseguire eb deploy
il comando per creare e distribuire un'altra versione della tua applicazione.
Apri il tuo file HTML (index.html ) e sostituisci quello che hai nel <style>
tagga con quello qui sotto. Il codice seguente cambia il colore di sfondo della tua applicazione.
<style>
body{
background-color: rgb(0, 255, 55);
}
</style>
Ora, esegui i seguenti comandi per deploy
le modifiche e open
la tua applicazione sul tuo browser web.
eb deploy
eb open
Al termine della distribuzione, l'applicazione si apre automaticamente nel browser con le nuove modifiche apportate.
Distribuzione dell'applicazione su Elastic Beanstalk con GitHub Actions
Oltre all'utilizzo di EB CLI, l'utilizzo di GitHub Actions è un altro modo conveniente per distribuire il container Docker su Elastic Beanstalk. GitHub Actions ti consente di automatizzare le cose ripetitive durante lo sviluppo. Con GitHub Actions, imposti le istruzioni e le invii a GitHub.
Al momento, quando apporti modifiche, esegui tu stesso il comando di distribuzione. Ma in questa demo, imposterai GitHub Actions per eseguire i comandi di distribuzione per te.
Questa configurazione è utile se stai sviluppando una pipeline che esegue test ed esegue altri controlli.
1. Crea una directory denominata .github/workflows nella directory principale del tuo progetto. Questa directory è dove memorizzerai il tuo file di flusso di lavoro.
2. Successivamente, crea un file con il tuo nome preferito nella directory .github/workflows. Ma per questo esempio, il file si chiama main.yml .
Copia e incolla il codice qui sotto in main.yml file, che esegue le seguenti operazioni:
- Crea un lavoro che ottiene l'ultimo push al tuo repository e lo comprime (Elastic Beanstalk richiede di comprimere la cartella del progetto).
- Formatta il timestamp e utilizza i timestamp formattati come etichetta della versione.
- Distribuisci il repository su Elastic Beanstalk.
name: Deployment From Github To AWS
on:
# activates the workflow when there is a push on the main branch
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest # the operating system your job will run on
steps:
- name: Checkout Latest Repo
# checks out your repository under the GitHub workspace so that your workflow can access it
uses: actions/[email protected]
- name: Generate Deployment Package
# zip all files except .git
run: zip -r deploy.zip * -x '*.git*'
- name: Get timestamp
uses: gerred/actions/[email protected]
id: current-time
- name: Run string replace
uses: frabert/[email protected]
id: format-time
with:
# replaces '[:\.]+' in the timestamp with '-'
pattern: '[:\.]+'
string: "${{ steps.current-time.outputs.time }}"
replace-with: '-'
flags: 'g'
- name: Deploy to EB
uses: einaregilsson/[email protected]
with:
# Input the credentials you used to setup AWS CLI and credentials for the application environment
aws_access_key: AKIATI3RC11111YQ3TAU
aws_secret_key: Urr46HfaaaaaabbbbbcccaC/+YpWFtJFbRQN27xF
application_name: html
environment_name: html-dev3
version_label: "${{ steps.format-time.outputs.replaced }}"
region: us-west-2
deployment_package: deploy.zip
In genere, in un progetto live, vorresti inserire le credenziali in GitHub Secrets.
3. Esegui i seguenti comandi sulla radice del tuo progetto per eseguire il commit e inviare il codice al tuo repository GitHub.
git add . # adds changes to staging area
git commit -m "update" # commits your changes
git push # Push to GitHub
4. Ora apri il tuo browser web e vai al tuo progetto su GitHub. Fai clic su Azioni scheda, quindi fai clic sul tuo commit corrente.
Come nell'immagine seguente, puoi confermare che la tua applicazione è stata distribuita.
5. Infine, esegui il comando seguente per eseguire l'applicazione.
eb open
Di seguito, puoi vedere che le azioni GitHub hanno distribuito correttamente le modifiche.
Conclusione
Durante questo tutorial, hai imparato come distribuire un'applicazione su Elastic Beanstalk tramite il terminale con EB CLI e GitHub Actions.
Ormai conosci già diversi modi per distribuire la tua applicazione su Elastic Beanstalk, quindi puoi scegliere quella più adatta alle tue esigenze.
Come pensi di costruire su questa nuova conoscenza? Forse stai implementando un'applicazione a tutti gli effetti?