AppSpec Esempio di file - AWS CodeDeploy

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à.

AppSpec Esempio di file

Questo argomento fornisce AppSpec file di esempio per una distribuzione AWS Lambda e EC2/locale.

AppSpec Esempio di file per una distribuzione Amazon ECS

Ecco un esempio di AppSpec file scritto in YAML per la distribuzione di un servizio Amazon ECS.

version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1" LoadBalancerInfo: ContainerName: "SampleApplicationName" ContainerPort: 80 # Optional properties PlatformVersion: "LATEST" NetworkConfiguration: AwsvpcConfiguration: Subnets: ["subnet-1234abcd","subnet-5678abcd"] SecurityGroups: ["sg-12345678"] AssignPublicIp: "ENABLED" CapacityProviderStrategy: - Base: 1 CapacityProvider: "FARGATE_SPOT" Weight: 2 - Base: 0 CapacityProvider: "FARGATE" Weight: 1 Hooks: - BeforeInstall: "LambdaFunctionToValidateBeforeInstall" - AfterInstall: "LambdaFunctionToValidateAfterInstall" - AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts" - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic" - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"

Questa è una versione dell'esempio precedente scritto in formato JSON.

{ "version": 0.0, "Resources": [ { "TargetService": { "Type": "AWS::ECS::Service", "Properties": { "TaskDefinition": "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1", "LoadBalancerInfo": { "ContainerName": "SampleApplicationName", "ContainerPort": 80 }, "PlatformVersion": "LATEST", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "subnet-1234abcd", "subnet-5678abcd" ], "SecurityGroups": [ "sg-12345678" ], "AssignPublicIp": "ENABLED" } }, "CapacityProviderStrategy": [ { "Base" : 1, "CapacityProvider" : "FARGATE_SPOT", "Weight" : 2 }, { "Base" : 0, "CapacityProvider" : "FARGATE", "Weight" : 1 } ] } } } ], "Hooks": [ { "BeforeInstall": "LambdaFunctionToValidateBeforeInstall" }, { "AfterInstall": "LambdaFunctionToValidateAfterInstall" }, { "AfterAllowTestTraffic": "LambdaFunctionToValidateAfterTestTrafficStarts" }, { "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeAllowingProductionTraffic" }, { "AfterAllowTraffic": "LambdaFunctionToValidateAfterAllowingProductionTraffic" } ] }

Ecco è la sequenza degli eventi durante la distribuzione:

  1. Prima che l'applicazione Amazon ECS aggiornata venga installata nel set di attività sostitutivo, viene eseguita la funzione LambdaFunctionToValidateBeforeInstall Lambda chiamata.

  2. Dopo aver installato l'applicazione Amazon ECS aggiornata nel set di attività sostitutivo, ma prima che riceva traffico, viene eseguita la funzione LambdaFunctionToValidateAfterInstall Lambda chiamata.

  3. Dopo che l'applicazione Amazon ECS sul set di attività sostitutivo inizia a ricevere traffico dal listener di test, viene eseguita la funzione Lambda chiamata. LambdaFunctionToValidateAfterTestTrafficStarts È probabile che questa funzione esegua test di convalida per determinare se la distribuzione deve continuare. Se non specifichi un listener di test nel tuo gruppo di distribuzione, questo hook verrà ignorato.

  4. Dopo aver completato tutti i test di convalida nell'AfterAllowTestTraffichook e prima che il traffico di produzione venga inviato all'applicazione Amazon ECS aggiornata, viene eseguita la funzione Lambda chiamata. LambdaFunctionToValidateBeforeAllowingProductionTraffic

  5. Dopo che il traffico di produzione è stato inviato all'applicazione Amazon ECS aggiornata sul set di attività sostitutivo, viene eseguita la funzione LambdaFunctionToValidateAfterAllowingProductionTraffic Lambda chiamata.

Le funzioni Lambda eseguite durante qualsiasi hook possono eseguire test di convalida o raccogliere metriche sul traffico.

AppSpec Esempio di file per una distribuzione AWS Lambda

Ecco un esempio di AppSpec file scritto in YAML per la distribuzione di una versione della funzione Lambda.

version: 0.0 Resources: - myLambdaFunction: Type: AWS::Lambda::Function Properties: Name: "myLambdaFunction" Alias: "myLambdaFunctionAlias" CurrentVersion: "1" TargetVersion: "2" Hooks: - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeTrafficShift" - AfterAllowTraffic: "LambdaFunctionToValidateAfterTrafficShift"

Questa è una versione dell'esempio precedente scritto in formato JSON.

{ "version": 0.0, "Resources": [{ "myLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Name": "myLambdaFunction", "Alias": "myLambdaFunctionAlias", "CurrentVersion": "1", "TargetVersion": "2" } } }], "Hooks": [{ "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeTrafficShift" }, { "AfterAllowTraffic": "LambdaFunctionToValidateAfterTrafficShift" } ] }

Ecco è la sequenza degli eventi durante la distribuzione:

  1. Prima di spostare il traffico dalla versione 1 di una funzione Lambda myLambdaFunction chiamata alla versione 2, esegui una funzione Lambda LambdaFunctionToValidateBeforeTrafficShift chiamata che convalida che la distribuzione sia pronta per avviare lo spostamento del traffico.

  2. Se LambdaFunctionToValidateBeforeTrafficShift ha restituito il codice di uscita 0 (operazione completata), inizia il trasferimento del traffico alla versione 2 di myLambdaFunction. La configurazione della distribuzione per questa distribuzione determina la velocità di trasferimento del traffico.

  3. Una volta completato lo spostamento del traffico dalla versione 1 di una funzione Lambda myLambdaFunction chiamata alla versione 2, esegui una funzione Lambda LambdaFunctionToValidateAfterTrafficShift chiamata che convalida il completamento della distribuzione.

AppSpec Esempio di file per una distribuzione EC2/on-premise

Ecco un esempio di AppSpec file per una distribuzione locale su un'istanza Amazon Linux, Ubuntu Server o RHEL.

Nota

Le distribuzioni su istanze di Windows Server non supportano l'elemento. runas Se si esegue la distribuzione su istanze di Windows Server, non includerlo nel file. AppSpec

version: 0.0 os: linux files: - source: Config/config.txt destination: /webapps/Config - source: source destination: /webapps/myApp hooks: BeforeInstall: - location: Scripts/UnzipResourceBundle.sh - location: Scripts/UnzipDataBundle.sh AfterInstall: - location: Scripts/RunResourceTests.sh timeout: 180 ApplicationStart: - location: Scripts/RunFunctionalTests.sh timeout: 3600 ValidateService: - location: Scripts/MonitorService.sh timeout: 3600 runas: codedeployuser

Per un'istanza di Windows Server, passa os: linux a. os: windows Inoltre, devi specificare i percorsi completi per destination (ad esempio, c:\temp\webapps\Config e c:\temp\webapps\myApp). Non includere l'elemento runas.

Ecco è la sequenza degli eventi durante la distribuzione:

  1. Esegui lo script presente in Scripts/UnzipResourceBundle.sh.

  2. Se lo script precedente ha restituito il codice di uscita 0 (operazione completata), esegui lo script presente in Scripts/UnzipDataBundle.sh.

  3. Copia il file dal percorso Config/config.txt nel percorso /webapps/Config/config.txt.

  4. Copia in modo ricorsivo tutti i file nella directory source nella directory /webapps/myApp.

  5. Esegui lo script che si trova in Scripts/RunResourceTests.sh con un timeout di 180 secondi (3 minuti).

  6. Esegui lo script che si trova in Scripts/RunFunctionalTests.sh con un timeout di 3600 secondi (1 ora).

  7. Esegui lo script che si trova in Scripts/MonitorService.sh come utente codedeploy con un timeout di 3600 secondi (1 ora).