Personalizzazione di software su server Linux - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione di software su server Linux

Questa sezione descrive il tipo di informazioni che puoi includere in un file di configurazione per personalizzare il software sulle istanze che EC2 eseguono Linux. Per informazioni generali sulla personalizzazione e la configurazione degli ambienti Elastic Beanstalk, consulta Configurazione degli ambienti Elastic Beanstalk. Per informazioni sulla personalizzazione del software sulle EC2 istanze che eseguono Windows, consulta. Personalizzazione di software su server Windows

È possibile che tu voglia personalizzare e configurare il software da cui dipende la tua applicazione. È possibile aggiungere comandi da eseguire durante il provisioning delle istanze, definire utenti e gruppi Linux e scaricare o creare direttamente file nelle istanze dell'ambiente. Questi file potrebbero essere dipendenze richieste dall'applicazione (ad esempio, pacchetti aggiuntivi dal repository yum) oppure file di configurazione, ad esempio file di configurazione come la sostituzione di un file di configurazione del proxy per sostituire impostazioni specifiche impostate in modo predefinito da Elastic Beanstalk).

Note
  • Sulle piattaforme Amazon Linux 2, invece di fornire file e comandi nei file di configurazione con estensione .ebextensions, si consiglia di utilizzare Buildfile. Procfile e gli hook di piattaforma quando possibile per configurare ed eseguire codice personalizzato sulle istanze dell'ambiente durante il provisioning delle istanze. Per i dettagli su questi meccanismi, consulta Estensione delle piattaforme Elastic Beanstalk Linux.

  • YAMLsi basa su un'indentazione coerente. Utilizza lo stesso livello di rientro quando sostituisci del contenuto in un file di configurazione di esempio e assicurati che il tuo editor di testo utilizzi gli spazi e non le tabulazioni per il rientro.

I file di configurazione supportano le seguenti chiavi utilizzabili sul server Linux in cui è in esecuzione l'applicazione.

Le chiavi sono elaborate nell'ordine in cui sono elencate qui.

Controlla gli eventi del tuo ambiente durante lo sviluppo e il test dei file di configurazione. Elastic Beanstalk ignora un file di configurazione contenente errori di convalida, ad esempio una chiave non valida, e non elabora le altre chiavi contenute nello stesso file. In questi casi, Elastic Beanstalk aggiunge un avviso nel log degli eventi.

Pacchetti

Puoi utilizzare la chiave packages per scaricare e installare pacchetti di componenti e applicazioni.

Sintassi

packages: name of package manager: package name: version ... name of package manager: package name: version ... ...

È possibile specificare più pacchetti in ciascuna chiave del programma di gestione dei pacchetti.

Formati di pacchetto supportati

Elastic Beanstalk supporta attualmente i seguenti programmi di gestione dei pacchetti: yum, rubygems, python e rpm. I pacchetti sono elaborati nel seguente ordine: rpm, yum, quindi rubygems e python. Non vi è alcun ordine tra rubygems e Python. All'interno di ogni programma di gestione dei pacchetti, l'ordine di installazione non è garantito. Utilizza un programma di gestione dei pacchetti supportato dal sistema operativo in uso.

Nota

Elastic Beanstalk supporta due programmi di gestione dei pacchetti sottostanti per Python, ovvero pip ed easy_install. Tuttavia, nella sintassi del file di configurazione, devi specificare python come nome del programma di gestione dei pacchetti. Quando si utilizza un file di configurazione per specificare un pacchetto Python manager, Elastic Beanstalk usa Python 2.7. Se la tua applicazione si basa su un'altra versione di Python, è possibile specificare i pacchetti da installare in un file requirements.txt. Per ulteriori informazioni, consulta Specificazione delle dipendenze utilizzando un file dei requisiti su Elastic Beanstalk.

Specificazione delle versioni

In ogni programma di gestione dei pacchetti, ogni pacchetto è specificato come nome di pacchetto ed elenco di versioni. La versione può essere una stringa, un elenco di versioni oppure una stringa o un elenco vuoto. Una stringa o un elenco vuoto indica che deve essere utilizzata la versione più recente. Per rpm manager, la versione è specificata come percorso a un file su disco o a. URL I percorsi relativi non sono supportati.

Se specifichi una versione di un pacchetto, Elastic Beanstalk tenta di installare tale versione anche se una versione più recente del pacchetto è già installata sull'istanza. Se una versione più recente è già installata, la distribuzione non riesce. Solo alcuni programmi di gestione dei pacchetti supportano più versioni. Per ulteriori informazioni, consulta la documentazione del programma di gestione dei pacchetti utilizzato. Se non specifichi una versione e una versione del pacchetto è già installata, Elastic Beanstalk non installa una nuova versione, in quanto presuppone che intendi continuare a utilizzare la versione esistente.

Frammento di esempio

Il seguente frammento specifica una versione URL per rpm, richiede l'ultima versione a yum e la versione 0.10.2 di chef a rubygems.

packages: yum: libmemcached: [] ruby-devel: [] gcc: [] rpm: epel: http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rubygems: chef: '0.10.2'

Gruppi

È possibile utilizzare la chiave per creare gruppi Linux/ e assegnare gruppi. groups UNIX IDs Per creare un gruppo, aggiungi una nuova coppia chiave-valore che esegue la mappatura di un nuovo nome di gruppo a un ID di gruppo facoltativo. La chiave "groups" può contenere uno o più nomi di gruppo. La tabella seguente elenca le chiavi disponibili.

Sintassi

groups: name of group: {} name of group: gid: "group id"

Opzioni

gid

Un numero di ID di gruppo.

Se viene specificato un ID di gruppo e il nome di gruppo esiste già, la creazione del gruppo non riuscirà. Se un altro gruppo è associato a l'ID di gruppo specificato, il sistema operativo può rifiutare la creazione del gruppo.

Frammento di esempio

Il seguente frammento specifica un gruppo denominato groupOne senza assegnare un ID di gruppo e un gruppo denominato groupTwo che ha specificato un valore di ID di gruppo pari a 45.

groups: groupOne: {} groupTwo: gid: "45"

Utenti

È possibile utilizzare la users chiave per creare utenti UNIX Linux/ sull'istanza. EC2

Sintassi

users: name of user: groups: - name of group uid: "id of the user" homeDir: "user's home directory"

Opzioni

uid

Un ID utente. Il processo di creazione non riesce se esiste un nome utente con un ID utente differente. Se l'ID utente è già assegnato a un utente esistente, il sistema operativo può respingere la richiesta di creazione.

groups

Un elenco di nomi di gruppo. L'utente viene aggiunto a ogni gruppo nell'elenco.

homeDir

La home directory dell'utente.

Gli utenti vengono creati come utenti di sistema non interattivo con una shell /sbin/nologin. Questa è un'impostazione predefinita e non può essere modificata.

Frammento di esempio

users: myuser: groups: - group1 - group2 uid: "50" homeDir: "/tmp"

Origini

È possibile utilizzare la sources chiave per scaricare un file di archivio da un archivio pubblico URL e decomprimerlo in una directory di destinazione sull'istanza. EC2

Sintassi

sources: target directory: location of archive file

Formati supportati

I formati supportati sono tar, tar+gzip, tar+bz2 e zip. Puoi fare riferimento a posizioni esterne come Amazon Simple Storage Service (Amazon S3) (ad esempiohttps://mybucket.s3.amazonaws.com/myobject) purché siano accessibili URL al pubblico.

Frammento di esempio

L'esempio seguente scarica un file .zip pubblico da un bucket Amazon S3 e lo decomprime in /etc/myapp:

sources: /etc/myapp: https://mybucket.s3.amazonaws.com/myobject
Nota

Lo stesso percorso di destinazione non può essere riutilizzato da più estrazioni. L'estrazione di un'altra origine per lo stesso percorso di destinazione sostituirà i contenuti invece di accodarli.

File

Puoi usare la files chiave per creare file sull'EC2istanza. Il contenuto può essere inserito nel file di configurazione oppure può essere estratto da un file. URL I file sono scritti su disco in ordine lessicografico.

Puoi utilizzare la chiave files per scaricare file privati da Amazon S3 fornendo un profilo dell'istanza per l'autorizzazione.

Se il percorso del file specificato esiste già nell'istanza, il file esistente viene mantenuto con l'estensione .bak aggiunta al suo nome.

Sintassi

files: "target file location on disk": mode: "six-digit octal value" owner: name of owning user for file group: name of owning group for file source: URL authentication: authentication name: "target file location on disk": mode: "six-digit octal value" owner: name of owning user for file group: name of owning group for file content: | # this is my # file content encoding: encoding format authentication: authentication name:

Opzioni

content

Contenuto della stringa da aggiungere al file. Specifica content o source, ma non entrambi.

source

URLdi un file da scaricare. Specifica content o source, ma non entrambi.

encoding

Il formato di codifica della stringa specificata con l'opzione content.

Valori validi: plain | base64

group

Il gruppo Linux proprietario del file.

owner

L'utente Linux proprietario del file.

mode

Valore ottale a sei cifre che rappresenta la modalità per questo file. Questa chiave non è supportata per i sistemi Windows. Usa le prime tre cifre per i collegamenti simbolici e le ultime tre per impostare le autorizzazioni. Per creare un collegamento simbolico, specifica 120xxx, dove xxx definisce le autorizzazioni del file di destinazione. Per specificare le autorizzazioni per un file, usa le ultime tre cifre, ad esempio 000644.

authentication

Il nome di un metodo di autenticazione AWS CloudFormation da utilizzare. Puoi aggiungere metodi di autenticazione ai metadati del gruppo Auto Scaling con la chiave Resources. Un esempio è fornito di seguito.

Frammento di esempio

files: "/home/ec2-user/myfile" : mode: "000755" owner: root group: root source: http://foo.bar/myfile "/home/ec2-user/myfile2" : mode: "000755" owner: root group: root content: | this is my file content

Esempio che utilizza un collegamento simbolico. Viene creato un collegamento /tmp/myfile2.txt che punta al file esistente /tmp/myfile1.txt.

files: "/tmp/myfile2.txt" : mode: "120400" content: "/tmp/myfile1.txt"

L'esempio seguente utilizza la chiave Resources per aggiungere un metodo di autenticazione denominato S3Auth e utilizzato per scaricare un file privato da un bucket Amazon S3:

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["elasticbeanstalk-us-west-2-123456789012"] roleName: "Fn::GetOptionSetting": Namespace: "aws:autoscaling:launchconfiguration" OptionName: "IamInstanceProfile" DefaultValue: "aws-elasticbeanstalk-ec2-role" files: "/tmp/data.json" : mode: "000755" owner: root group: root authentication: "S3Auth" source: https://elasticbeanstalk-us-west-2-123456789012.s3-us-west-2.amazonaws.com/data.json

Comandi

È possibile utilizzare la commands chiave per eseguire comandi sull'EC2istanza. I comandi vengono eseguiti prima che l'applicazione e il server Web vengano configurati e che il file di versione dell'applicazione venga estratto.

I comandi specificati vengono eseguiti come utente root ed elaborati in ordine alfabetico in base al nome. Per impostazione predefinita, i comandi vengono eseguiti nella directory principale. Per eseguire comandi da un'altra directory, utilizza l'opzione cwd.

Per risolvere i problemi emersi con i comandi, è possibile trovare il relativo output nei log delle istanze.

Sintassi

commands: command name: command: command to run cwd: working directory env: variable name: variable value test: conditions for command ignoreErrors: true

Opzioni

command

Un array (raccolta di sequenze di blocchi nella YAML sintassi) o una stringa che specifica il comando da eseguire. Alcune note importanti:

  • Se utilizzi una stringa, non devi racchiuderla tra virgolette. Se utilizzi le virgolette, applica un carattere di escape alle occorrenze dello stesso tipo di virgolette.

  • Se utilizzi una matrice, non è necessario utilizzare un carattere di escape negli spazi o racchiudere i parametri di comando tra virgolette. Ogni elemento della matrice è un singolo argomento del comando. Non utilizzare un array per specificare più comandi.

I seguenti esempi sono tutti equivalenti:

commands: command1: command: git commit -m "This is a comment." command2: command: "git commit -m \"This is a comment.\"" command3: command: 'git commit -m "This is a comment."' command4: command: - git - commit - -m - This is a comment.

Per specificare più comandi, utilizza un blocco scalare letterale, come mostrato nel seguente esempio.

commands: command block: command: | git commit -m "This is a comment." git push
env

(Facoltativa) Imposta variabili di ambiente per il comando. Questa proprietà non aggiunge l'ambiente esistente ma lo sovrascrive.

cwd

(Facoltativa) La directory di lavoro. Se questa opzione non è specificata, i comandi vengono eseguiti dalla directory principale (/).

test

(Facoltativo) Un comando che deve restituire il valore true (codice di uscita 0) per consentire a Elastic Beanstalk di elaborare il comando, ad esempio uno script shell, contenuto nella chiave command.

ignoreErrors

(Facoltativa) Un valore booleano che determina se altri comandi devono essere eseguiti nel caso in cui il comando nella chiave command non riesca (restituisce un valore diverso da zero). Imposta questo valore su true per continuare a eseguire i comandi anche se il comando non riesce. Impostalo su false per interrompere l'esecuzione dei comandi se il comando non riesce. Il valore predefinito è false.

Frammento di esempio

L'esempio di frammento seguente esegue uno script python.

commands: python_install: command: myscript.py cwd: /home/ec2-user env: myvarname: myvarvalue test: "[ -x /usr/bin/python ]"

Servizi

Puoi utilizzare la chiave services per definire i servizi che devono essere avviati o arrestati all'avvio dell'istanza. La chiave services consente inoltre di specificare le dipendenze in origini, pacchetti e file, in modo che, se richiesto a causa del file installati, Elastic Beanstalk esegue il riavvio del servizio.

Sintassi

services: sysvinit: name of service: enabled: "true" ensureRunning: "true" files: - "file name" sources: - "directory" packages: name of package manager: "package name[: version]" commands: - "name of command"

Opzioni

ensureRunning

Imposta su true per continuare a eseguire il servizio dopo la chiusura di Elastic Beanstalk.

Imposta su false per continuare a eseguire il servizio dopo la chiusura di Elastic Beanstalk.

Ometti la chiave per non apportare modifiche allo stato del servizio.

enabled

Imposta su true per eseguire automaticamente il servizio all'avvio.

Imposta su false per non eseguire automaticamente il servizio all'avvio.

Ometti la chiave per non apportare modifiche a questa proprietà.

files

Un elenco di file. Se Elastic Beanstalk ne modifica uno direttamente tramite il blocco di file, il servizio viene riavviato.

sources

Un elenco di directory. Se Elastic Beanstalk espande un archivio in una di queste directory, il servizio viene riavviato.

packages

La mappatura del programma di gestione dei pacchetti a un elenco di nomi di pacchetto. Se Elastic Beanstalk installa o aggiorna uno di questi pacchetti, il servizio viene riavviato.

commands

Un elenco di nomi di comando. Se Elastic Beanstalk esegue il comando specificato, il servizio viene riavviato.

Frammento di esempio

Di seguito viene riportato una esempio di frammento:

services: sysvinit: myservice: enabled: true ensureRunning: true

Comandi del container

Puoi utilizzare la chiave container_commands per eseguire comandi che modificano il codice sorgente dell'applicazione. I comandi di contenitore vengono eseguiti dopo la configurazione dell'applicazione e del server Web e l'estrazione dell'archivio delle versioni dell'applicazione, ma prima della distribuzione della versione dell'applicazione. I comandi non di contenitore e altre operazioni di personalizzazione vengono eseguiti prima dell'estrazione del codice sorgente dell'applicazione.

I comandi specificati vengono eseguiti come utente root ed elaborati in ordine alfabetico in base al nome. I comandi di contenitore vengono eseguiti a partire dalla directory di gestione temporanea, dove viene estratto il codice sorgente prima di essere distribuito al server di applicazioni. Qualsiasi modifica apportata al codice sorgente nella directory di gestione temporanea con un comando di contenitore verrà inclusa al momento della distribuzione del codice sorgente nella posizione finale.

Nota

L'output dei comandi del container viene registrato nel log delle istanze cfn-init-cmd.log. Per ulteriori informazioni sul recupero e la visualizzazione dei log delle istanze, consulta Visualizzazione dei log dalle istanze Amazon. EC2

Puoi utilizzare leader_only per eseguire il comando solo su una singola istanza o puoi configurare un oggetto test per eseguire il comando esclusivamente quando un comando di test restituisce true. I comandi di contenitore "leader-only" vengono eseguiti solo durante la creazione dell'ambiente e le distribuzioni, mentre altri comandi e operazioni di personalizzazione di server sono eseguiti a ogni provisioning o aggiornamento di un'istanza. I comandi del contenitore solo per i leader non vengono eseguiti a causa di modifiche alla configurazione di avvio, come una modifica dell'ID o del tipo di istanza. AMI

Sintassi

container_commands: name of container_command: command: "command to run" leader_only: true name of container_command: command: "command to run"

Opzioni

command

Una stringa o una matrice di stringhe da eseguire.

env

(Facoltativa) Imposta le variabili di ambiente prima di eseguire il comando, ignorando qualsiasi valore esistente.

cwd

(Facoltativa) La directory di lavoro. Per impostazione predefinita, questa è la directory di gestione temporanea dell'applicazione decompressa.

leader_only

(Facoltativa) Esegui il comando solo su una singola istanza scelta da Elastic Beanstalk. I comandi di contenitore "leader-only" vengono eseguiti prima di altri comandi di contenitore. Un comando può essere "leader-only" o avere un oggetto test, ma non entrambe le cose (leader_only è prioritario).

test

(Facoltativa) Esegui un comando di test che deve restituire true per eseguire il comando di contenitore. Un comando può essere "leader-only" o avere un oggetto test, ma non entrambe le cose (leader_only è prioritario).

ignoreErrors

(Facoltativa) Esegui correttamente le distribuzioni se il comando di container restituisce un valore diverso da 0 (riuscito). Imposta su true per attivarla.

Frammento di esempio

Di seguito viene riportato una esempio di frammento.

container_commands: collectstatic: command: "django-admin.py collectstatic --noinput" 01syncdb: command: "django-admin.py syncdb --noinput" leader_only: true 02migrate: command: "django-admin.py migrate" leader_only: true 99customize: command: "scripts/customize.sh"