Avvia un CodeBuild progetto su più account AWS utilizzando Step Functions e una funzione proxy Lambda - Prontuario AWS

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

Avvia un CodeBuild progetto su più account AWS utilizzando Step Functions e una funzione proxy Lambda

Creato da Richard Milner-Watts (AWS) e Amit Anjarlekar (AWS)

Archivio di codice: CodeBuild Cross-Account Proxy

Ambiente: produzione

Tecnologie: DevOps; Gestione e governance; Operazioni; Senza server

Servizi AWS: AWS CodeBuild; AWS Lambda; AWS Step Functions; AWS X-Ray; AWS CloudFormation

Riepilogo

Questo modello dimostra come avviare in modo asincrono un progetto AWS CodeBuild su più account AWS utilizzando AWS Step Functions e una funzione proxy AWS Lambda. Puoi utilizzare la macchina a stati Step Functions di esempio del pattern per testare il successo del tuo CodeBuild progetto.

CodeBuild ti aiuta ad avviare attività operative utilizzando l'AWS Command Line Interface (AWS Command Line Interface) da un ambiente di runtime completamente gestito. Puoi modificare il comportamento del tuo CodeBuild progetto in fase di esecuzione sovrascrivendo le variabili di ambiente. Inoltre, puoi utilizzarlo CodeBuild per gestire i flussi di lavoro. Per ulteriori informazioni, consulta Service Catalog Tools sul sito Web di AWS Workshop e Schedule jobs in Amazon RDS for PostgreSQL CodeBuild using AWS EventBridge and Amazon sul blog di AWS Database.

Prerequisiti e limitazioni

Prerequisiti

  • Due account AWS attivi: un account di origine per richiamare una funzione proxy Lambda con Step Functions e un account di destinazione per la creazione di un progetto di esempio remoto CodeBuild

Limitazioni

  • Questo modello non può essere utilizzato per copiare artefatti tra account.

Architettura

Il diagramma seguente mostra l'architettura creata da questo modello.

Diagramma dell'architettura del lancio di un CodeBuild progetto su più account AWS

Il diagramma mostra il flusso di lavoro seguente:

  1. La macchina a stati Step Functions analizza la mappa di input fornita e richiama la funzione proxy Lambda (codebuild-proxy-lambda) per ogni account, regione e progetto definito.

  2. La funzione proxy Lambda utilizza AWS Security Token Service (AWS STS) per assumere un ruolo proxy IAM (codebuild-proxy-role), associato a una policy IAM (codebuild-proxy-policy) nell'account di destinazione.

  3. Utilizzando il ruolo assunto, la funzione Lambda avvia il CodeBuild progetto e restituisce l'ID del CodeBuild lavoro. La macchina a stati Step Functions esegue un loop ed esegue il polling del CodeBuild lavoro fino a quando non riceve uno stato di successo o di fallimento.

La logica della macchina a stati è mostrata nell'immagine seguente.

Workflow della macchina a stati Step Functions

Stack tecnologico

  • AWS CloudFormation

  • CodeBuild

  • IAM

  • Lambda

  • Step Functions

  • X-Ray

Strumenti

  • AWS ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.

  • AWS CloudFormation Designer fornisce un editor JSON e YAML integrato che ti aiuta a visualizzare e modificare i modelli. CloudFormation

  • AWS CodeBuild è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • AWS Step Functions è un servizio di orchestrazione serverless che ti aiuta a combinare le funzioni di AWS Lambda e altri servizi AWS per creare applicazioni aziendali critiche.

  • AWS X-Ray ti aiuta a raccogliere dati sulle richieste servite dalla tua applicazione e fornisce strumenti che puoi utilizzare per visualizzare, filtrare e ottenere informazioni su tali dati per identificare problemi e opportunità di ottimizzazione.

Codice

Il codice di esempio per questo modello è disponibile nel repository GitHub Cross Account CodeBuild Proxy. Questo modello utilizza la libreria AWS Lambda Powertools for Python per fornire funzionalità di registrazione e tracciamento. Per ulteriori informazioni su questa libreria e le sue utilità, consulta Powertools for AWS Lambda (Python).

Best practice

  1. Modifica i valori del tempo di attesa nella macchina a stati Step Function per ridurre al minimo le richieste di polling sullo stato del lavoro. Utilizza il tempo di esecuzione previsto per il CodeBuild progetto.

  2. Modifica la MaxConcurrency proprietà della mappa in Step Functions per controllare quanti CodeBuild progetti possono essere eseguiti in parallelo.

  3. Se necessario, esaminate il codice di esempio per verificarne la disponibilità alla produzione. Valuta quali dati potrebbero essere registrati dalla soluzione e se la CloudWatch crittografia Amazon predefinita è sufficiente.

Epiche

AttivitàDescrizioneCompetenze richieste

Registra gli ID degli account AWS.

Gli ID account AWS sono necessari per configurare l'accesso tra account.

Registra l'ID dell'account AWS per i tuoi account di origine e di destinazione. Per ulteriori informazioni, consulta Finding your AWS account ID nella documentazione IAM.

AWS DevOps

Scarica i CloudFormation modelli AWS.

  1. Scarica il CloudFormation modello sample_target_codebuild_template.yaml AWS dal GitHub repository per questo modello.

  2. Scarica il CloudFormation modello codebuild_lambda_proxy_template.yaml AWS dal GitHub repository per questo modello.

Nota: nei CloudFormation modelli AWS, <SourceAccountId> è l'ID dell'account AWS per l'account di origine e <TargetAccountId> l'ID dell'account AWS per l'account di destinazione.

AWS DevOps

Crea e distribuisci lo CloudFormation stack AWS.

  1. Accedi alla Console di gestione AWS per il tuo account di origine, apri la CloudFormation console AWS e scegli Stacks.

  2. Scegliere Create stack (Crea stack), quindi With new resources (standard) (Con nuove risorse (standard)).

  3. Come Template source (Origine modello), scegliere Upload a template file (Carica un file di modello).

  4. Per Carica un file modello, scegli file, quindi scegli il codebuild_lambda_proxy_template.yaml file scaricato. Seleziona Successivo.

  5. Per Nome dello stack, inserisci un nome per lo stack (ad esempio,codebuild-lambda-proxy).

  6. Sostituite il crossAccountTargetRoleArn parametro con il vostro <TargetAccountId> (ad esempio,<arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role>). Nota: non è necessario aggiornare il valore predefinito per il targetCodeBuildProjectparametro.

  7. Scegliete Avanti, accettate le opzioni predefinite per la creazione dello stack, quindi scegliete Avanti.

  8. Seleziona la casella di controllo Riconosco che AWS CloudFormation potrebbe creare risorse IAM con nomi personalizzati, quindi scegli Create stack.

Nota: è necessario creare lo CloudFormation stack AWS per la funzione proxy Lambda prima di creare risorse negli account di destinazione. Quando crei una policy di fiducia in un account di destinazione, il ruolo IAM viene tradotto dal nome del ruolo a un identificatore interno. Questo è il motivo per cui il ruolo IAM deve già esistere.

AWS DevOps

Conferma la creazione della funzione proxy e della macchina a stati.

  1. Attendi che lo CloudFormation stack AWS raggiunga lo stato CREATE_COMPLETE. Questa operazione dovrebbe richiedere meno di un minuto.

  2. Apri la console AWS Lambda, scegli Funzioni, quindi trova la lambda-proxy-ProxyLambda-<GUID> funzione.

  3. Apri la console AWS Step Functions, scegli le macchine a stati, quindi trova la macchina a sample-crossaccount-codebuild-state-machine stati.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea e distribuisci lo CloudFormation stack AWS.

  1. Accedi alla Console di gestione AWS per il tuo account di destinazione, apri la CloudFormation console AWS e scegli Stacks.

  2. Scegli Create Stack, quindi scegli Con nuove risorse (standard).

  3. Come Template source (Origine modello), scegliere Upload a template file (Carica un file di modello).

  4. Per Carica un file modello, scegli Scegli file, quindi scegli il sample_target_codebuild_template.yaml file. Seleziona Successivo.

  5. Per Nome dello stack, inserisci un nome per lo stack (ad esempio:sample-codebuild-stack).

  6. Sostituite il crossAccountSourceRoleArn parametro con il vostro <SourceAccountId> (ad esempio,<arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role>).

  7. Scegliete Avanti, accettate le opzioni predefinite per la creazione dello stack, quindi scegliete Avanti.

  8. Seleziona la casella di controllo Riconosco che AWS CloudFormation potrebbe creare risorse IAM con nomi personalizzati, quindi scegli Create stack.

AWS DevOps

Verifica la creazione del CodeBuild progetto di esempio.

  1. Attendi che lo CloudFormation stack AWS raggiunga lo stato CREATE_COMPLETE. Questa operazione dovrebbe richiedere meno di un minuto.

  2. Apri la CodeBuild console AWS e trova il sample-codebuild-project progetto.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Avvia la macchina statale.

  1. Accedi alla Console di gestione AWS per il tuo account di origine, apri la console AWS Step Functions e scegli Macchine a stati.

  2. Scegli la macchina a sample-crossaccount-codebuild-state-machine stati, quindi scegli Avvia esecuzione.

  3. Nell'editor di Input, inserisci il seguente codice JSON e <TargetAccountID> sostituiscilo con l'ID dell'account AWS che contiene il CodeBuild progetto.

    { "crossAccountTargetRoleArns": [ { "arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role", "region": "eu-west-1", "codeBuildProject": "sample-codebuild-project", "SampleValue1": "Value1", "SampleValue2": "Value2" } ] }

    Nota: le coppie chiave-valore vengono passate come variabili di ambiente dalla funzione nell'account di origine al CodeBuild progetto nell'account di destinazione.

  4. Selezionare Start execution (Avvia esecuzione).

  5. Nella scheda Dettagli della pagina della macchina a stati, controlla se lo stato di esecuzione è impostato su Riuscito. Ciò conferma che la macchina a stati è in esecuzione. Nota: possono essere necessari circa 30 secondi prima che la macchina a stati raggiunga lo stato Riuscito.

  6. Per visualizzare l'output e l'input di un passaggio nella macchina a stati, espandi quel passaggio nella sezione Cronologia degli eventi di esecuzione. Ad esempio, espandi il passaggio Lambda - CodeBuild Proxy — Start. L'output include dettagli sulle variabili di ambiente sostituite, sul payload originale e sull'ID del lavoro. CodeBuild

AWS DevOps

Convalida le variabili di ambiente.

  1. Accedi alla Console di gestione AWS per il tuo account di destinazione.

  2. Apri la CodeBuild console AWS, espandi Build, quindi scegli Build projects.

  3. Scegli il sample-codebuild-project progetto, quindi scegli Visualizza dettagli.

  4. Nella scheda Cronologia delle build, scegli la build più recente del progetto, quindi scegli Visualizza registri.

  5. Nell'output del registro, verifica che le variabili di ambiente stampate su STDOUT corrispondano alle variabili di ambiente della macchina a stati di esempio Step Functions.

AWS DevOps

Risoluzione dei problemi

ProblemaSoluzione

L'esecuzione di Step Functions sta impiegando più tempo del previsto.

Regola la MaxConcurrency proprietà della mappa nella macchina a stati Step Function per controllare quanti CodeBuild progetti possono essere eseguiti in parallelo.

L'esecuzione dei CodeBuild lavori richiede più tempo del previsto.

  1. Regola i valori del tempo di attesa nella macchina a stati Step Functions per ridurre al minimo le richieste di polling sullo stato del lavoro. Utilizza il tempo di esecuzione previsto per il CodeBuild progetto.

  2. Valuta se CodeBuild è lo strumento appropriato da utilizzare. Ad esempio, il tempo necessario per inizializzare un CodeBuild job può essere significativamente più lungo di AWS Lambda. Se sono richiesti un throughput elevato e tempi di completamento rapidi, prendi in considerazione la migrazione della logica di business su AWS Lambda e l'utilizzo di un'architettura fan-out.