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à.
Tutorial: Implementazione di un'applicazione serverless
In questo tutorial, imparerai come creare, testare e distribuire un'applicazione serverless come stack utilizzando un flusso di lavoro. CloudFormation
L'applicazione in questo tutorial è una semplice applicazione web che emette un messaggio «Hello World». Consiste in una AWS Lambda funzione e un Amazon API Gateway e lo si crea utilizzando AWS Serverless Application Model (AWS SAM), che è un'estensione di AWS CloudFormation.
Argomenti
Prerequisiti
Prima di iniziare:
-
È necessario uno CodeCatalyst spazio con un AWS account connesso. Per ulteriori informazioni, consulta Creare uno spazio.
-
Nel tuo spazio, hai bisogno di un progetto vuoto chiamato:
codecatalyst-cfn-project
Usa l'opzione Inizia da zero per creare questo progetto.
Per ulteriori informazioni, consulta Creare un progetto vuoto in Amazon CodeCatalyst.
-
Nel tuo progetto, hai bisogno di un CodeCatalyst ambiente chiamato:
codecatalyst-cfn-environment
Configura questo ambiente come segue:
-
Scegli qualsiasi tipo, ad esempio Non di produzione.
-
Connect il tuo AWS account.
-
Per il IAMruolo predefinito, scegli un ruolo qualsiasi. Specificherai un ruolo diverso in seguito.
Per ulteriori informazioni, consulta Implementazione in e Account AWS VPCs.
-
Fase 1: Creare un archivio di sorgenti
In questo passaggio, creerai un repository di sorgenti in. CodeCatalyst Questo repository viene utilizzato per archiviare i file sorgente del tutorial, come il file della funzione Lambda.
Per ulteriori informazioni sui repository dei sorgenti, consulta. Creazione di un repository di sorgenti
Per creare un archivio di sorgenti
-
Nel CodeCatalyst riquadro di navigazione, scegli Codice, quindi scegli Archivi di origine.
-
Scegli Aggiungi repository, quindi scegli Crea repository.
-
Nel nome del repository, inserisci:
codecatalyst-cfn-source-repository
-
Scegli Crea.
Ora hai creato un repository chiamato. codecatalyst-cfn-source-repository
Fase 2: Creare ruoli AWS
In questo passaggio, crei i seguenti AWS IAM ruoli:
-
Ruolo Deploy: concede all'azione CodeCatalyst Deploy AWS CloudFormation stack l'autorizzazione ad accedere al tuo AWS account e al CloudFormation servizio su cui distribuirai la tua applicazione serverless. L'azione Deploy AWS CloudFormation stack fa parte del tuo flusso di lavoro.
-
Ruolo di compilazione: concede all'azione di CodeCatalyst compilazione l'autorizzazione ad accedere al tuo AWS account e scrivere su Amazon S3 dove verrà archiviato il pacchetto di applicazioni serverless. L'azione di compilazione fa parte del tuo flusso di lavoro.
-
Ruolo Stack: concede CloudFormation l'autorizzazione a leggere e modificare le risorse specificate nel AWS SAM modello che fornirai in seguito. Concede inoltre l'autorizzazione a. CloudWatch
Per ulteriori informazioni sui IAM ruoli, consulta IAMi ruoli nella Guida per l'AWS Identity and Access Management utente.
Nota
Per risparmiare tempo, puoi creare un solo ruolo, chiamato CodeCatalystWorkflowDevelopmentRole-
ruolo, anziché i tre ruoli elencati in precedenza. Per ulteriori informazioni, consulta Creazione del CodeCatalystWorkflowDevelopmentRole-spaceNameruolo per il tuo account e il tuo spazio. Tieni presente che il spaceName
CodeCatalystWorkflowDevelopmentRole-
ruolo ha autorizzazioni molto ampie che possono rappresentare un rischio per la sicurezza. Ti consigliamo di utilizzare questo ruolo solo in tutorial e scenari in cui la sicurezza è meno preoccupante. Questo tutorial presuppone che stiate creando i tre ruoli elencati in precedenza.spaceName
Nota
È richiesto anche un ruolo di esecuzione Lambda, ma non è necessario crearlo ora perché il sam-template.yml
file lo crea automaticamente quando si esegue il flusso di lavoro nel passaggio 5.
Per creare un ruolo di distribuzione
-
Crea una politica per il ruolo, come segue:
-
Accedi a AWS.
Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Nel pannello di navigazione, selezionare Policies (Policy).
-
Scegli Create Policy (Crea policy).
-
Scegliere la scheda JSON.
-
Eliminare il codice esistente.
-
Incolla il codice seguente:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
Nota
La prima volta che il ruolo viene utilizzato per eseguire azioni del flusso di lavoro, utilizza il carattere jolly nell'informativa sulla politica delle risorse, quindi definisci la politica inserendo il nome della risorsa dopo che è disponibile.
"Resource": "*"
-
Scegliere Next: Tags (Successivo: Tag).
-
Scegliere Next:Review (Successivo: Rivedi).
-
In Nome, inserisci:
codecatalyst-deploy-policy
-
Scegli Crea policy.
Ora hai creato una politica di autorizzazioni.
-
-
Crea il ruolo di distribuzione, come segue:
-
Nel riquadro di navigazione, scegli Ruoli e quindi Crea ruolo.
-
Scegli una politica di fiducia personalizzata.
-
Elimina la politica di fiducia personalizzata esistente.
-
Aggiungi la seguente politica di fiducia personalizzata:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
Seleziona Successivo.
-
Nelle politiche di autorizzazione, cerca
codecatalyst-deploy-policy
e seleziona la relativa casella di controllo. -
Seleziona Successivo.
-
Per il nome del ruolo, inserisci:
codecatalyst-deploy-role
-
Per la descrizione del ruolo, inserisci:
CodeCatalyst deploy role
-
Scegli Crea ruolo.
Ora hai creato un ruolo di distribuzione con una politica di fiducia e una politica di autorizzazioni.
-
-
Ottieni il ruolo di distribuzioneARN, come segue:
-
Nel riquadro di navigazione, seleziona Ruoli.
-
Nella casella di ricerca, inserisci il nome del ruolo che hai appena creato (
codecatalyst-deploy-role
). -
Scegli il ruolo dall'elenco.
Viene visualizzata la pagina di riepilogo del ruolo.
-
In alto, copia il ARNvalore.
Ora hai creato il ruolo di distribuzione con le autorizzazioni appropriate e lo hai ottenuto. ARN
-
Per creare un ruolo di costruzione
-
Crea una politica per il ruolo, come segue:
-
Accedi a AWS.
Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Nel pannello di navigazione, selezionare Policies (Policy).
-
Scegli Create Policy (Crea policy).
-
Scegliere la scheda JSON.
-
Eliminare il codice esistente.
-
Incolla il codice seguente:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
Nota
La prima volta che il ruolo viene utilizzato per eseguire azioni del flusso di lavoro, utilizza il carattere jolly nell'informativa sulla politica delle risorse, quindi definisci la politica inserendo il nome della risorsa dopo che è disponibile.
"Resource": "*"
-
Scegliere Next: Tags (Successivo: Tag).
-
Scegliere Next:Review (Successivo: Rivedi).
-
In Nome, inserisci:
codecatalyst-build-policy
-
Scegli Crea policy.
Ora hai creato una politica di autorizzazioni.
-
-
Crea il ruolo di costruzione, come segue:
-
Nel riquadro di navigazione, scegli Ruoli e quindi Crea ruolo.
-
Scegli una politica di fiducia personalizzata.
-
Elimina la politica di fiducia personalizzata esistente.
-
Aggiungi la seguente politica di fiducia personalizzata:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
Seleziona Successivo.
-
Nelle politiche di autorizzazione, cerca
codecatalyst-build-policy
e seleziona la relativa casella di controllo. -
Seleziona Successivo.
-
Per il nome del ruolo, inserisci:
codecatalyst-build-role
-
Per la descrizione del ruolo, inserisci:
CodeCatalyst build role
-
Scegli Crea ruolo.
Ora hai creato un ruolo di sviluppo con una politica di fiducia e una politica di autorizzazioni.
-
-
Ottieni il ruolo di costruzioneARN, come segue:
-
Nel riquadro di navigazione, seleziona Ruoli.
-
Nella casella di ricerca, inserisci il nome del ruolo che hai appena creato (
codecatalyst-build-role
). -
Scegli il ruolo dall'elenco.
Viene visualizzata la pagina di riepilogo del ruolo.
-
In alto, copia il ARNvalore.
Ora hai creato il ruolo di costruzione con le autorizzazioni appropriate e lo hai ottenuto. ARN
-
Per creare un ruolo stack
-
Accedi AWS utilizzando l'account in cui desideri distribuire il tuo stack.
Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Crea il ruolo dello stack come segue:
-
Nel pannello di navigazione, seleziona Roles (Ruoli).
-
Selezionare Create role (Crea ruolo).
-
Scegli un servizio in Servizio AWS .
-
Nella sezione Caso d'uso, scegli CloudFormationdall'elenco a discesa.
-
Seleziona il pulsante CloudFormationradio.
-
In basso, scegli Avanti.
-
Utilizzando la casella di ricerca, trova le seguenti politiche di autorizzazione, quindi seleziona le rispettive caselle di controllo.
Nota
Se cerchi una politica e questa non viene visualizzata, assicurati di scegliere Cancella filtri e riprova.
-
CloudWatchFullAccess
-
AWS CloudFormationFullAccess
-
IAMFullAccess
-
AWS Lambda_ FullAccess
-
Un amministratore mazonAPIGateway
-
Amazon S3 FullAccess
-
Amazon EC2ContainerRegistryFullAccess
La prima policy consente l'accesso per CloudWatch abilitare i rollback dello stack quando si verifica un allarme.
Le politiche rimanenti consentono di accedere AWS SAM ai servizi e alle risorse dello stack che verrà distribuito in questo tutorial. Per ulteriori informazioni, consulta Autorizzazioni nella Guida per gli AWS Serverless Application Model sviluppatori.
-
-
Seleziona Successivo.
-
Per il nome del ruolo, inserisci:
codecatalyst-stack-role
-
Scegli Crea ruolo.
-
-
Ottieni i ruoli dello stackARN, come segue:
-
Nel riquadro di navigazione, seleziona Ruoli.
-
Nella casella di ricerca, inserisci il nome del ruolo che hai appena creato (
codecatalyst-stack-role
). -
Scegli il ruolo dall'elenco.
-
Nella sezione Riepilogo, copia il ARNvalore. perché sarà necessaria in seguito.
Ora hai creato il ruolo stack con le autorizzazioni appropriate e lo hai ottenuto. ARN
-
Fase 3: Aggiungere AWS ruoli a CodeCatalyst
In questo passaggio, aggiungi build role (codecatalyst-build-role
) e deploy role (codecatalyst-deploy-role
) alla connessione dell' CodeCatalyst account nel tuo spazio.
Nota
Non è necessario aggiungere lo stack role (codecatalyst-stack-role
) alla connessione. Questo perché il ruolo stack viene utilizzato da CloudFormation(non CodeCatalyst), dopo che è già stata stabilita una connessione tra CodeCatalyst e AWS utilizzando il ruolo deploy. Poiché il ruolo stack non viene utilizzato per accedere CodeCatalyst a AWS, non è necessario che sia associato a una connessione all'account.
Per aggiungere ruoli, build e deploy alla connessione del tuo account
-
Nel CodeCatalyst, accedi al tuo spazio.
-
Seleziona AWS accounts (Account). Viene visualizzato un elenco di connessioni all'account.
-
Scegli la connessione all'account che rappresenta l' AWS account in cui hai creato i ruoli di compilazione e distribuzione.
-
Scegli Gestisci ruoli dalla console AWS di gestione.
Viene visualizzata la pagina Aggiungi IAM ruolo CodeCatalyst allo spazio Amazon. Potrebbe essere necessario effettuare il login per accedere alla pagina.
-
Seleziona Aggiungi un ruolo esistente in cui hai creato IAM.
Viene visualizzato un elenco a discesa. L'elenco mostra tutti i IAM ruoli con una politica di fiducia che include i principali del
codecatalyst-runner.amazonaws.com
codecatalyst.amazonaws.com
servizio. -
Nell'elenco a discesa
codecatalyst-build-role
, scegli e scegli Aggiungi ruolo. -
Scegli Aggiungi IAM ruolo, scegli Aggiungi un ruolo esistente in cui hai creato eIAM, nell'elenco a discesa, scegli.
codecatalyst-deploy-role
Scegliere Add role (Aggiungi ruolo).Ora hai aggiunto i ruoli di creazione e distribuzione al tuo spazio.
-
Copia il valore del nome CodeCatalyst visualizzato di Amazon. Questo valore ti servirà in seguito, durante la creazione del tuo flusso di lavoro.
Fase 4: creare un bucket Amazon S3
In questa fase, crei un bucket Amazon S3 in cui archiviare il file.zip del pacchetto di distribuzione dell'applicazione serverless.
Come creare un bucket Amazon S3.
Apri la console Amazon S3 all'indirizzo. https://console.aws.amazon.com/s3/
-
Nel riquadro principale, scegli Crea bucket.
-
Per il nome del bucket, inserisci:
codecatalyst-cfn-s3-bucket
-
In AWS Region (Regione), scegliere una Regione. Questo tutorial presuppone che tu abbia scelto US West (Oregon) us-west-2. Per informazioni sulle regioni supportate da Amazon S3, consulta gli endpoint e le quote di Amazon Simple Storage Service nel. Riferimenti generali di AWS
-
Nella parte inferiore della pagina, scegli Crea bucket.
Ora hai creato un bucket chiamato codecatalyst-cfn-s3-bucket
nella regione us-west-2 degli Stati Uniti occidentali (Oregon).
Passaggio 5: Aggiungere i file sorgente
In questo passaggio, aggiungi diversi file sorgente dell'applicazione al tuo repository CodeCatalyst di origine. La hello-world
cartella contiene i file dell'applicazione che distribuirete. La tests
cartella contiene i test unitari. La struttura delle cartelle è la seguente:
. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— package.json |— sam-template.yml |— setup-sam.sh
file.npmignore
Il .npmignore
file indica quali file e cartelle npm deve escludere dal pacchetto dell'applicazione. In questo tutorial, npm esclude la tests
cartella perché non fa parte dell'applicazione.
Per aggiungere il file.npmignore
Apri la console all'indirizzo https://codecatalyst.aws/ CodeCatalyst .
-
Scegli il tuo progetto,
codecatalyst-cfn-project
-
Nel riquadro di navigazione, scegli Codice, quindi scegli Archivi di origine.
-
Dall'elenco dei repository di origine, scegli il tuo repository,.
codecatalyst-cfn-source-repository
-
In File, scegli Crea file.
-
Per Nome file, inserisci:
.npmignore
-
Nella casella di testo, inserisci il seguente codice:
tests/*
-
Scegliete Commit, quindi scegliete nuovamente Commit.
Ora hai creato un file chiamato
.npmignore
nella radice del tuo repository.
file package.json
Il package.json
file contiene importanti metadati sul progetto Node, come il nome del progetto, il numero di versione, la descrizione, le dipendenze e altri dettagli che descrivono come interagire ed eseguire l'applicazione.
package.json
In questo tutorial sono inclusi un elenco di dipendenze e uno script. test
Lo script di test esegue le seguenti operazioni:
-
Utilizzando mocha
, lo script di test esegue i test unitari specificati in hello-world/tests/unit/
e scrive i risultati in unjunit.xml
file utilizzando il reporter xunit. -
Utilizzando Istanbul (nyc)
, lo script di test genera un rapporto sulla copertura del codice ( clover.xml
) utilizzando il clover reporter.Per ulteriori informazioni, consulta Usare reporter alternativi nella documentazione di Istanbul.
Per aggiungere il file package.json
-
Nel tuo repository, in File, scegli Crea file.
-
Per Nome file, inserisci:
package.json
-
Nella casella di testo, inserisci il seguente codice:
{ "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
-
Scegliete Commit, quindi scegliete nuovamente Commit.
Ora hai aggiunto un file chiamato
package.json
alla radice del repository.
file sam-template.yml
Il sam-template.yml
file contiene le istruzioni per implementare la funzione Lambda API e Gateway e configurarli insieme. Segue la specifica del AWS Serverless Application Model
modello, che estende la specifica del AWS CloudFormation modello.
In questo tutorial utilizzi un AWS SAM modello invece di un AWS CloudFormation modello normale perché AWS SAM offre un utile tipo di risorsa AWS: :Serverless: :Function. Questo tipo esegue molte behind-the-scenes configurazioni che normalmente è necessario scrivere per utilizzare la sintassi di base. CloudFormation Ad esempio, AWS::Serverless::Function
crea una funzione Lambda, un ruolo di esecuzione Lambda e mappature delle sorgenti degli eventi che avviano la funzione. Devi codificare tutto questo se vuoi scriverlo usando basic. CloudFormation
Sebbene questo tutorial utilizzi un modello già scritto, puoi generarne uno come parte del tuo flusso di lavoro utilizzando un'azione di compilazione. Per ulteriori informazioni, consulta Implementazione di uno stack AWS CloudFormation.
Per aggiungere il file sam-template.yml
-
Nel tuo repository, in File, scegli Crea file.
-
Per Nome file, inserisci:
sam-template.yml
-
Nella casella di testo, inserisci il seguente codice:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
-
Scegliete Commit, quindi scegliete nuovamente Commit.
Ora hai aggiunto un file chiamato
sam-template.yml
nella cartella principale del tuo repository.
file setup-sam.sh
Il setup-sam.sh
file contiene le istruzioni per scaricare e installare l' AWS SAM CLIutilità. Il flusso di lavoro utilizza questa utilità per impacchettare il hello-world
codice sorgente.
Per aggiungere il file setup-sam.sh
-
Nel tuo repository, in File, scegli Crea file.
-
Per Nome file, inserisci:
setup-sam.sh
-
Nella casella di testo, inserisci il seguente codice:
#!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=
us-west-2
Nel codice precedente, sostituisci
us-west-2
con la tua AWS regione. -
Scegli Commetti, quindi scegli di nuovo Commetti.
Ora hai aggiunto un file chiamato
setup-sam.sh
alla radice del repository.
file app.js
app.js
Contiene il codice della funzione Lambda. In questo tutorial, il codice restituisce il testohello world
.
Per aggiungere il file app.js
-
Nel tuo repository, in File, scegli Crea file.
-
Per Nome file, inserisci:
hello-world/app.js
-
Nella casella di testo, inserisci il seguente codice:
// const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
-
Scegliete Commit, quindi scegliete nuovamente Commit.
Ora hai creato una cartella chiamata
hello-world
e un file chiamatoapp.js
.
file test-handler.js
Il test-handler.js
file contiene test unitari per la funzione Lambda.
Per aggiungere il file test-handler.js
-
Nel tuo repository, in File, scegli Crea file.
-
Per Nome file, inserisci:
hello-world/tests/unit/test-handler.js
-
Nella casella di testo, inserisci il seguente codice:
'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
-
Scegliete Commit, quindi scegliete nuovamente Commit.
Ora hai aggiunto un file chiamato
test-handler.js
sotto lahello-world/tests/unit
cartella.
Ora hai aggiunto tutti i tuoi file sorgente.
Prenditi un momento per ricontrollare il tuo lavoro e assicurati di aver inserito tutti i file nelle cartelle corrette. La struttura delle cartelle è la seguente:
. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— README.md |— package.json |— sam-template.yml |— setup-sam.sh
Passaggio 6: creare ed eseguire un flusso di lavoro
In questo passaggio, crei un flusso di lavoro che impacchetta il codice sorgente Lambda e lo distribuisce. Il flusso di lavoro è costituito dai seguenti elementi costitutivi eseguiti in sequenza:
-
Un trigger: questo trigger avvia l'esecuzione automatica del flusso di lavoro quando invii una modifica al tuo repository di origine. Per ulteriori informazioni sui trigger, consulta L'avvio di un flusso di lavoro viene eseguito automaticamente utilizzando i trigger.
-
Un'azione di test (
Test
): al momento del trigger, questa azione installa il gestore di pacchetti Node (npm), quindi esegue il comando. npm run test
Questo comando dice a npm di eseguire lotest
script definito nel file.package.json
Lotest
script, a sua volta, esegue gli unit test e genera due report: un test report (junit.xml
) e un rapporto sulla copertura del codice (clover.xml
). Per ulteriori informazioni, consulta file package.json.Successivamente, l'azione di test trasforma i XML report in CodeCatalyst report e li visualizza nella CodeCatalyst console, nella scheda Report dell'azione di test.
Per ulteriori informazioni sull'azione di test, vedereTest con flussi di lavoro.
-
Un'azione di compilazione (
BuildBackend
): al termine dell'azione di test, l'azione di compilazione scarica e installa AWS SAM CLI, impacchetta ilhello-world
codice sorgente e lo copia nel bucket Amazon S3, dove il servizio Lambda prevede che si trovi. L'azione genera anche un nuovo file AWS SAM modello chiamatosam-template-packaged.yml
e lo inserisce in un elemento di output chiamato.buildArtifact
Per ulteriori informazioni sull'azione di compilazione, consulta. Creazione con flussi di lavoro
-
A deploy action (
DeployCloudFormationStack
): al termine dell'azione di compilazione, l'azione deploy cerca l'artefatto di output generato dall'azione di compilazione (buildArtifact
), trova il AWS SAM modello al suo interno e quindi esegue il modello. Il AWS SAM modello crea uno stack che distribuisce l'applicazione serverless.
Creazione di un flusso di lavoro
-
Nel riquadro di navigazione, scegli CI/CD, quindi scegli Flussi di lavoro.
-
Scegli Crea flusso di lavoro.
-
Per Source repository, scegli
codecatalyst-cfn-source-repository
. -
Per Branch, scegli
main
. -
Scegli Crea.
-
Elimina il codice YAML di esempio.
-
Aggiungi il YAML codice seguente:
Nota
Nel YAML codice che segue, puoi omettere le
Connections:
sezioni se lo desideri. Se si omettono queste sezioni, è necessario assicurarsi che il ruolo specificato nel campo Ruolo predefinito IAM nel proprio ambiente includa le autorizzazioni e le politiche di fiducia di entrambi i ruoli descritte in. Fase 2: Creare ruoli AWS Per ulteriori informazioni sulla configurazione di un ambiente con un IAM ruolo predefinito, vedere. Creazione di un ambienteName: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name:
codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-build-role
Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucketcodecatalyst-cfn-s3-bucket
--output-template-file sam-template-packaged.yml --regionus-west-2
Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name:codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-deploy-role
Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region:us-west-2
role-arn:arn:aws:iam::111122223333:role/StackRole
template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPANDNel codice precedente, sostituisci:
-
Entrambe le istanze di
codecatalyst-cfn-environment
con il nome del tuo ambiente. -
Entrambe le istanze di
codecatalyst-account-connection
con il nome visualizzato della connessione all'account. Il nome visualizzato potrebbe essere un numero. Per ulteriori informazioni, consulta Fase 3: Aggiungere AWS ruoli a CodeCatalyst. -
codecatalyst-build-role
con il nome del ruolo di build in cui hai creatoFase 2: Creare ruoli AWS. -
codecatalyst-cfn-s3-bucket
con il nome del bucket Amazon S3 in cui hai creato. Fase 4: creare un bucket Amazon S3 -
Entrambe le istanze di
us-west-2
con la regione in cui risiede il bucket Amazon S3 (prima istanza) e dove verrà distribuito lo stack (seconda istanza). Queste regioni possono essere diverse. Questo tutorial presuppone che entrambe le regioni siano impostate su.us-west-2
Per informazioni dettagliate sulle regioni supportate da Amazon S3 e AWS CloudFormation, consulta Endpoint e quote del servizio nel. Riferimenti generali di AWS -
codecatalyst-deploy-role
con il nome del ruolo di distribuzione in cui hai creato. Fase 2: Creare ruoli AWS -
codecatalyst-cfn-environment
con il nome dell'ambiente in Prerequisiti cui hai creato. -
arn:aws:iam::111122223333:role/StackRole
con l'Amazon Resource Name (ARN) dello stack role in Fase 2: Creare ruoli AWS cui hai creato.Nota
Se hai deciso di non creare ruoli, build, deploy e stack, sostituiscili
codecatalyst-build-role
,codecatalyst-deploy-role
earn:aws:iam::111122223333:role/StackRole
con il nome o ARN delCodeCatalystWorkflowDevelopmentRole-
ruolo. Per ulteriori informazioni su questo ruolo, consulta Fase 2: Creare ruoli AWS.spaceName
Per informazioni sulle proprietà del codice mostrato in precedenza, vedereAzione 'Implementa AWS CloudFormation stack' YAML.
-
-
(Facoltativo) Scegliete Convalida per assicurarvi che il YAML codice sia valido prima di eseguire il commit.
-
Scegli Applica.
-
Nella finestra di dialogo Conferma flusso di lavoro, inserisci quanto segue:
-
Per il nome del file Workflow, mantenete il valore predefinito,
codecatalyst-cfn-workflow
. -
Per il messaggio di conferma, inserisci:
add initial workflow file
-
Per Repository, scegli codecatalyst-cfn-source-repository.
-
Per il nome del ramo, scegli principale.
-
Scegli Applica.
Ora hai creato un flusso di lavoro. L'esecuzione di un flusso di lavoro viene avviata automaticamente a causa del trigger definito nella parte superiore del flusso di lavoro. In particolare, quando hai eseguito il commit (e inviato) del
codecatalyst-cfn-workflow.yaml
file nell'archivio di origine, il trigger ha avviato l'esecuzione del flusso di lavoro. -
Per visualizzare il flusso di lavoro in corso
-
Nel riquadro di navigazione, scegli CI/CD, quindi scegli Flussi di lavoro.
-
Scegli il flusso di lavoro che hai appena creato:.
codecatalyst-cfn-workflow
-
Scegli la scheda Esecuzioni.
-
Nella colonna Run ID, scegli l'ID di esecuzione.
-
Scegli Test per vedere lo stato di avanzamento dei test.
-
Scegli BuildBackenddi vedere lo stato di avanzamento della costruzione.
-
Scegli DeployCloudFormationStackdi vedere lo stato di avanzamento della distribuzione.
Per ulteriori informazioni sulla visualizzazione dei dettagli dell'esecuzione, consultaVisualizzazione dello stato e dei dettagli dell'esecuzione del flusso di lavoro.
-
Al termine dell'DeployCloudFormationStackazione, procedi come segue:
-
Se l'esecuzione del flusso di lavoro è riuscita, passate alla procedura successiva.
-
Se l'esecuzione del flusso di lavoro non è riuscita durante il test o BuildBackendl'azione, scegli Registri per risolvere il problema.
-
Se l'esecuzione del flusso di lavoro non è riuscita nell'DeployCloudFormationStackazione, scegli l'azione di distribuzione, quindi scegli la scheda Riepilogo. Scorri fino alla sezione CloudFormation degli eventi per visualizzare il messaggio di errore dettagliato. Se si è verificato un rollback, elimina lo
codecatalyst-cfn-stack
stack tramite la AWS CloudFormation console AWS prima di eseguire nuovamente il flusso di lavoro.
-
Per verificare la distribuzione
-
Dopo una distribuzione riuscita, scegli Variabili (7) dalla barra dei menu orizzontale in alto. (Non scegliete Variabili nel riquadro a destra).
-
Successivamente HelloWorldApi, incollali
https://
URL in un browser.Viene visualizzato un JSONmessaggio di benvenuto dalla funzione Lambda, che indica che il flusso di lavoro ha distribuito e configurato correttamente la funzione Lambda e il Gateway. API
Suggerimento
È possibile CodeCatalyst visualizzarlo URL nel diagramma del flusso di lavoro con alcune piccole configurazioni. Per ulteriori informazioni, consulta Visualizzazione dell'app URL nel diagramma del flusso di lavoro.
Per verificare i risultati dei test unitari e la copertura del codice
-
Nel diagramma del flusso di lavoro, scegli Test, quindi scegli Report.
-
Scegliete di TestReportvisualizzare i risultati del test unitario o scegliete di CoverageReportvisualizzare i dettagli della copertura del codice dei file da testare, in questo caso,
app.js
etest-handler.js
.
Per verificare le risorse distribuite
Accedi a AWS Management Console e apri la console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway/
. -
Osserva codecatalyst-cfn-stackAPIil AWS SAM modello creato. Il API nome deriva dal
Configuration/name
valore nel file di definizione del flusso di lavoro (codecatalyst-cfn-workflow.yaml
). Apri la AWS Lambda console all'indirizzo https://console.aws.amazon.com/lambda/
. -
Nel riquadro di navigazione, seleziona Funzioni.
-
Scegli la tua funzione Lambda,.
codecatalyst-cfn-stack-HelloWorldFunction-
string
-
Puoi vedere come il API Gateway funge da trigger per la funzione. Questa integrazione è stata configurata automaticamente in base al tipo di AWS SAM
AWS::Serverless::Function
risorsa.
Fase 7: Apportare una modifica
In questo passaggio, apporti una modifica al codice sorgente Lambda e la esegui il commit. Questo commit avvia l'esecuzione di un nuovo flusso di lavoro. Questa esecuzione implementa la nuova funzione Lambda in uno schema blu-verde che utilizza la configurazione di spostamento del traffico predefinita specificata nella console Lambda.
Per apportare una modifica alla sorgente Lambda
-
In CodeCatalyst, accedi al tuo progetto.
-
Nel riquadro di navigazione, scegli Codice, quindi scegli Archivi di origine.
-
Scegli il tuo repository
codecatalyst-cfn-source-repository
di origine. -
Cambia il file dell'applicazione:
-
Scegliere la cartella
hello-world
. -
Scegli il
app.js
file. -
Scegli Modifica.
-
Sulla riga 23, cambia
hello world
inTutorial complete!
. -
Scegli Commetti, quindi scegli di nuovo Commetti.
Il commit avvia l'esecuzione di un flusso di lavoro. Questa esecuzione avrà esito negativo perché non hai aggiornato gli unit test in modo che riflettano la modifica del nome.
-
-
Aggiorna i test unitari:
-
Scegli
hello-world\tests\unit\test-handler.js
. -
Scegli Modifica.
-
Sulla riga 19, passare
hello world
aTutorial complete!
. -
Scegli Commetti, quindi scegli di nuovo Commetti.
Il commit provoca l'avvio di un altro flusso di lavoro. L'esecuzione avrà esito positivo.
-
-
Nel riquadro di navigazione, scegli CI/CD, quindi scegli Flussi di lavoro.
-
Scegli
codecatalyst-cfn-workflow
, quindi scegli Esecuzioni. -
Scegli l'ID di esecuzione dell'ultima esecuzione. Dovrebbe essere ancora in corso.
-
Scegliete Test BuildBackend, e DeployCloudFormationStackper vedere l'avanzamento del flusso di lavoro viene eseguito.
-
Al termine del flusso di lavoro, scegli Variabili (7) nella parte superiore.
-
Successivamente HelloWorldApi, incollali
https://
URL in un browser.Nel browser viene visualizzato un
Tutorial complete!
messaggio che indica che la nuova applicazione è stata distribuita correttamente.
Eliminazione
Pulisci i file e i servizi utilizzati in questo tutorial per evitare che ti vengano addebitati dei costi.
Per pulire la CodeCatalyst console
Apri la CodeCatalyst console all'indirizzo https://codecatalyst.aws/
. -
Elimina
codecatalyst-cfn-workflow
. -
Eliminare
codecatalyst-cfn-environment
. -
Eliminare
codecatalyst-cfn-source-repository
. -
Eliminare
codecatalyst-cfn-project
.
Per pulire in AWS Management Console
-
Effettuare CloudFormation la pulizia nel modo seguente:
Apri la AWS CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation
. -
Eliminare il
codecatalyst-cfn-stack
.L'eliminazione dello stack rimuove tutte le risorse del tutorial dai servizi API Gateway e Lambda.
-
Esegui la pulizia in Amazon S3, come segue:
Apri la console Amazon S3 all'indirizzo. https://console.aws.amazon.com/s3/
-
Seleziona
codecatalyst-cfn-s3-bucket
. -
Elimina il contenuto del bucket.
-
Elimina il bucket.
-
Effettua la pulizia nel IAM modo seguente:
Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Eliminare il
codecatalyst-deploy-policy
. -
Eliminare il
codecatalyst-build-policy
. -
Eliminare il
codecatalyst-stack-policy
. -
Eliminare il
codecatalyst-deploy-role
. -
Eliminare il
codecatalyst-build-role
. -
Eliminare il
codecatalyst-stack-role
.
In questo tutorial, hai imparato a distribuire un'applicazione serverless come CloudFormation stack utilizzando un CodeCatalyst flusso di lavoro e un'azione AWS CloudFormation Deploy stack.