Riferimento al modello di integrazione - AWS CodePipeline

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

Riferimento al modello di integrazione

Esistono diverse integrazioni predefinite per servizi di terze parti che aiutano a integrare gli strumenti esistenti per i clienti nel processo di rilascio della pipeline. I partner o i fornitori di servizi terzi utilizzano un modello di integrazione per implementare i tipi di azioni da utilizzare in. CodePipeline

Utilizza questo riferimento quando pianifichi o lavori con tipi di azioni gestiti con un modello di integrazione supportato in CodePipeline.

Per certificare il tipo di azione di terze parti come partner di integrazione con CodePipeline, fai riferimento al AWS Partner Network (APN). Queste informazioni sono un supplemento al AWS CLI Reference.

Come funzionano i tipi di azioni di terze parti con l'integratore

Puoi aggiungere tipi di azioni di terze parti alle pipeline dei clienti per completare attività sulle risorse dei clienti. L'integratore gestisce le richieste di lavoro ed esegue l'azione con. CodePipeline Il diagramma seguente mostra un tipo di azione di terze parti creato per essere utilizzato dai clienti nella loro pipeline. Dopo che il cliente ha configurato l'azione, l'azione viene eseguita e crea richieste di lavoro che vengono gestite dal motore di azione dell'integratore.

Immagine che mostra come i tipi di azioni e gli artefatti di terze parti vengono gestiti dal motore d'azione dell'integratore

Il diagramma mostra i seguenti passaggi:

  1. La definizione dell'azione viene registrata e resa disponibile in CodePipeline. L'azione di terze parti è disponibile per i clienti del fornitore terzo.

  2. Il cliente del provider sceglie e configura l'azione in. CodePipeline

  3. L'azione viene eseguita e i lavori vengono messi in coda. CodePipeline Quando il lavoro è pronto CodePipeline, invia una richiesta di lavoro.

  4. L'integratore (il job worker per i sondaggi di terze parti o APIs la funzione Lambda) raccoglie la richiesta di lavoro, restituisce una conferma e lavora sugli artefatti delle azioni.

  5. L'integratore restituisce l'output di successo/fallimento (il job worker utilizza successo/fallimento APIs o la funzione Lambda invia l'output di successo/fallimento) con un risultato del lavoro e un token di continuazione.

Per informazioni sui passaggi che è possibile utilizzare per richiedere, visualizzare e aggiornare un tipo di azione, vedere. Lavorare con i tipi di azione

Concetti

Questa sezione utilizza i seguenti termini per i tipi di azioni di terze parti:

Tipo di operazione

Un processo ripetibile che può essere riutilizzato in pipeline che eseguono gli stessi carichi di lavoro di distribuzione continua. I tipi di azione sono identificati da unOwner,, eCategory. Provider Version Per esempio:

{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },

Tutte le azioni dello stesso tipo condividono la stessa implementazione.

Azione

Una singola istanza di un tipo di azione, uno dei processi discreti che avvengono all'interno di una fase di una pipeline. Ciò include in genere i valori utente specifici della pipeline in cui viene eseguita l'azione.

Definizione dell'azione

Lo schema per un tipo di azione che definisce le proprietà richieste per configurare l'azione e gli artefatti di input/output.

Esecuzione dell'operazione

Una raccolta di lavori che sono stati eseguiti per determinare se l'azione sulla pipeline del cliente ha avuto successo o meno.

Motore di esecuzione delle azioni

Una proprietà della configurazione di esecuzione dell'azione che definisce il tipo di integrazione utilizzato da un tipo di azione. I valori validi sono JobWorker e Lambda.

Integrazione

Descrive un software eseguito da un integratore per implementare un tipo di azione. CodePipeline supporta due tipi di integrazione corrispondenti ai due motori JobWorker di azione supportati e. Lambda

Integratore

La persona che possiede l'implementazione di un tipo di azione.

Processo

Un lavoro con pipeline e contesto del cliente per eseguire un'integrazione. L'esecuzione di un'azione è composta da uno o più lavori.

Job worker

Il servizio che elabora l'input del cliente e gestisce un lavoro.

Modelli di integrazione supportati

CodePipeline dispone di due modelli di integrazione:

  • Modello di integrazione Lambda: questo modello di integrazione è il modo preferito per lavorare con i tipi di azione. CodePipeline Il modello di integrazione Lambda utilizza una funzione Lambda per elaborare le richieste di lavoro durante l'esecuzione dell'azione.

  • Modello di integrazione Job Worker: Il modello di integrazione Job Worker è il modello utilizzato in precedenza per le integrazioni di terze parti. Il modello di integrazione dei job worker utilizza un job worker configurato per contattarlo per CodePipeline APIs elaborare le richieste di lavoro al momento dell'esecuzione dell'azione.

A titolo di confronto, la tabella seguente descrive le caratteristiche dei due modelli:

Modello di integrazione Lambda Modello di integrazione Job Worker
Descrizione L'integratore scrive l'integrazione come funzione Lambda, che viene richiamata CodePipeline ogni volta che è disponibile un lavoro per l'azione. La funzione Lambda non esegue un sondaggio per i lavori disponibili, ma attende la ricezione della richiesta di lavoro successiva. L'integratore scrive l'integrazione come job worker che analizza costantemente i posti di lavoro disponibili nelle pipeline del cliente. Il job worker esegue quindi il lavoro e invia il risultato del lavoro a utilizzando. CodePipeline CodePipeline APIs
Infrastruttura AWS Lambda Implementa il codice Job Worker nell'infrastruttura dell'integratore, come le istanze Amazon. EC2
Impegno di sviluppo L'integrazione contiene solo la logica aziendale. L'integrazione deve interagire con, oltre CodePipeline APIs a contenere, la logica aziendale.
Operazioni e sforzi Minore impegno operativo poiché l'infrastruttura è costituita solo da AWS risorse. Maggiore impegno operativo perché il lavoratore necessita di un hardware autonomo.
Durata massima di esecuzione del Job Se l'integrazione deve essere eseguita attivamente per più di 15 minuti, questo modello non può essere utilizzato. Questa azione è destinata agli integratori che devono avviare un processo (ad esempio, avviare una build sull'elemento di codice del cliente) e restituire un risultato al termine. Non è consigliabile che l'integratore continui ad aspettare il completamento della build. Invece, restituisci una continuazione. CodePipelinecrea un nuovo lavoro in altri 30 secondi se viene ricevuta una continuazione dal codice dell'integratore per controllare il lavoro fino al termine. Utilizzando questo modello è possibile sostenere lavori di esecuzione molto lunga (ore/giorni).

Modello di integrazione Lambda

Il modello di integrazione Lambda supportato include la creazione della funzione Lambda e la definizione dell'output per il tipo di azione di terze parti.

Aggiorna la tua funzione Lambda per gestire l'input da CodePipeline

È possibile creare una nuova funzione Lambda. Puoi aggiungere una logica aziendale alla tua funzione Lambda che viene eseguita ogni volta che c'è un lavoro disponibile nella pipeline per il tuo tipo di azione. Ad esempio, dato il contesto del cliente e della pipeline, potresti voler iniziare a integrare il tuo servizio per il cliente.

Usa i seguenti parametri per aggiornare la funzione Lambda per gestire l'input da. CodePipeline

Formato:

  • jobId:

    • L'ID univoco del lavoro generato dal sistema.

    • Tipo: stringa

    • Schema: [0-9a-f] {8} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {12}

  • accountId:

    • L'ID AWS dell'account del cliente da utilizzare durante l'esecuzione del lavoro.

    • Tipo: stringa

    • Modello: [0-9] {12}

  • data:

    • Altre informazioni su un processo utilizzato da un'integrazione per completare il lavoro.

    • Contiene una mappa di quanto segue:

      • actionConfiguration:

        • I dati di configurazione per l'azione. I campi di configurazione dell'azione sono una mappatura di coppie chiave-valore per consentire al cliente di inserire valori. Le chiavi sono determinate dai parametri chiave nel file di definizione del tipo di azione al momento della configurazione dell'azione. In questo esempio, i valori sono determinati dall'utente dell'azione specificando le informazioni nei Password campi Username and.

        • Tipo: mappa da stringa a stringa, facoltativamente presente

          Esempio:

          "configuration": { "Username": "MyUser", "Password": "MyPassword" },
      • encryptionKey:

        • Rappresenta le informazioni sulla chiave utilizzata per crittografare i dati nell'archivio degli artefatti, ad esempio una chiave. AWS KMS

        • Contenuto: Tipo di tipo di dati, presente opzionalmente encryptionKey

      • inputArtifacts:

        • Elenco di informazioni su un artefatto su cui lavorare, ad esempio un artefatto di test o di costruzione.

        • Contenuto: Elenco del tipo di dati, presente opzionalmente Artifact

      • outputArtifacts:

        • Elenco di informazioni sull'output di un'azione.

        • Contenuto: Elenco del tipo di datiArtifact, presente opzionalmente

      • actionCredentials:

        • Rappresenta un oggetto di credenziali di AWS sessione. Queste credenziali sono credenziali temporanee emesse da. AWS STS Possono essere utilizzate per accedere agli artefatti di input e output nel bucket S3 utilizzato per archiviare gli artefatti per la pipeline. CodePipeline

          Queste credenziali dispongono inoltre delle stesse autorizzazioni del modello di istruzioni politiche specificato nel file di definizione del tipo di azione.

        • Contenuto: tipo di datiAWSSessionCredentials, facoltativamente presente

      • actionExecutionId:

        • L'ID esterno dell'esecuzione dell'azione.

        • Tipo: stringa

      • continuationToken:

        • Un token generato dal sistema, ad esempio un ID di distribuzione, richiesto da un processo per continuare il lavoro in modo asincrono.

        • Tipo: stringa, facoltativamente presente

Tipi di dati:

  • encryptionKey:

    • id:

      • ID utilizzato per identificare la chiave. Per ogni AWS KMS chiave, puoi usare l'ID della chiave, la chiave ARN o l'aliasARN.

      • Tipo: stringa

    • type:

      • Il tipo di chiave di crittografia, ad esempio una AWS KMS chiave.

      • Tipo: stringa

      • Valori validi: KMS

  • Artifact:

    • name:

      • Il nome dell'artefatto.

      • Tipo: String, facoltativamente presente

    • revision:

      • L'ID di revisione dell'artefatto. A seconda del tipo di oggetto, potrebbe essere un ID di commit (GitHub) o un ID di revisione (Amazon S3).

      • Tipo: stringa, presente opzionalmente

    • location:

      • La posizione di un artefatto.

      • Contenuto: Tipo di tipo di datiArtifactLocation, facoltativamente presente

  • ArtifactLocation:

    • type:

      • Il tipo di artefatto presente nel luogo.

      • Tipo: stringa, facoltativamente presente

      • Valori validi: S3

    • s3Location:

      • La posizione del bucket S3 che contiene una revisione.

      • Contenuto: Tipo di tipo di dati, facoltativamente presente S3Location

  • S3Location:

    • bucketName:

      • Nome del bucket S3.

      • Tipo: stringa

    • objectKey:

      • La chiave dell'oggetto nel bucket S3, che identifica in modo univoco l'oggetto nel bucket.

      • Tipo: stringa

  • AWSSessionCredentials:

    • accessKeyId:

      • La chiave di accesso per la sessione.

      • Tipo: stringa

    • secretAccessKey:

      • La chiave di accesso segreta per la sessione.

      • Tipo: stringa

    • sessionToken:

      • Il token per la sessione.

      • Tipo: stringa

Esempio:

{ "jobId": "01234567-abcd-abcd-abcd-012345678910", "accountId": "012345678910", "data": { "actionConfiguration": { "key1": "value1", "key2": "value2" }, "encryptionKey": { "id": "123-abc", "type": "KMS" }, "inputArtifacts": [ { "name": "input-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "inputBucket", "objectKey": "inputKey" } } } ], "outputArtifacts": [ { "name": "output-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "outputBucket", "objectKey": "outputKey" } } } ], "actionExecutionId": "actionExecutionId", "actionCredentials": { "accessKeyId": "access-id", "secretAccessKey": "secret-id", "sessionToken": "session-id" }, "continuationToken": "continueId-xxyyzz" } }

Restituisci i risultati della tua funzione Lambda a CodePipeline

La risorsa job worker dell'integratore deve restituire un payload valido in caso di successo, fallimento o continuazione.

Formato:

  • result: Il risultato del lavoro.

    • Richiesto

    • Valori validi (senza distinzione tra maiuscole e minuscole):

      • Success: indica che un lavoro è terminato con successo.

      • Continue: Indica che un lavoro ha esito positivo e deve continuare, ad esempio se il job worker viene nuovamente richiamato per l'esecuzione della stessa azione.

      • Fail: Indica che un lavoro non è riuscito ed è terminale.

  • failureType: tipo di errore da associare a un processo non riuscito.

    La failureType categoria relativa alle azioni dei partner descrive il tipo di errore riscontrato durante l'esecuzione del processo. Gli integratori impostano il tipo insieme al messaggio di errore quando restituiscono il risultato di un errore di lavoro a. CodePipeline

    • Facoltativo. Obbligatorio se il risultato è. Fail

    • Deve essere nullo se result è Success o Continue

    • Valori validi:

      • ConfigurationError

      • JobFailed

      • PermissionsError

      • RevisionOutOfSync

      • RevisionUnavailable

      • SystemUnavailable

  • continuation: stato di continuazione da passare al processo successivo nell'ambito dell'esecuzione dell'azione corrente.

    • Facoltativo. Obbligatorio se il risultato èContinue.

    • Deve essere nullo se result è Success oFail.

    • Proprietà:

      • State: Un hash dello stato da passare.

  • status: Stato dell'esecuzione dell'azione.

    • Facoltativo.

    • Proprietà:

      • ExternalExecutionId: un ID di esecuzione esterno o un ID di commit opzionale da associare al job.

      • Summary: un riepilogo facoltativo di ciò che è accaduto. Negli scenari di errore, questo diventa il messaggio di errore visualizzato dall'utente.

  • outputVariables: Un insieme di coppie chiave/valore da passare alla successiva esecuzione dell'azione.

    • Facoltativo.

    • Deve essere nullo se result è o. Continue Fail

Esempio:

{ "result": "success", "failureType": null, "continuation": null, "status": { "externalExecutionId": "my-commit-id-123", "summary": "everything is dandy" }, "outputVariables": { "FirstOne": "Nice", "SecondOne": "Nicest", ... } }

Utilizza i token di continuazione per attendere i risultati di un processo asincrono

Il continuation token fa parte del payload e il risultato della funzione Lambda. È un modo per passare lo stato del lavoro a CodePipeline e indicare che il lavoro deve essere continuato. Ad esempio, dopo che un integratore ha avviato una build per il cliente sulla propria risorsa, non attende il completamento della build, ma indica CodePipeline che non ha un risultato terminale restituendo result as continue e restituendo l'ID univoco della build al CodePipeline token as. continuation

Nota

Le funzioni Lambda possono essere eseguite solo fino a 15 minuti. Se il processo deve durare più a lungo, puoi utilizzare i token di continuazione.

Il CodePipeline team richiama l'integratore dopo 30 secondi con lo stesso continuation token nel payload in modo che possa verificarne il completamento. Se la build viene completata, l'integratore restituisce il risultato di successo/fallimento del terminale, altrimenti continua.

Fornisci CodePipeline le autorizzazioni per richiamare la funzione Lambda dell'integratore in fase di esecuzione

Aggiungi le autorizzazioni alla funzione Lambda dell'integratore per fornire al servizio CodePipeline le autorizzazioni per richiamarlo utilizzando il service principal:. CodePipeline codepipeline.amazonaws.com È possibile aggiungere le autorizzazioni utilizzando o la riga di comando. AWS CloudFormation Per vedere un esempio, consulta Lavorare con i tipi di azione.

Modello di integrazione Job Worker

Dopo aver progettato il flusso di lavoro di alto livello, puoi creare il tuo job worker. Sebbene le specifiche dell'azione di terze parti determinino ciò che è necessario per il lavoratore, la maggior parte dei job worker per le azioni di terze parti include le seguenti funzionalità:

  • Sondaggio dei lavori relativi all'utilizzo. CodePipeline PollForThirdPartyJobs

  • Riconoscimento delle offerte di lavoro e restituzione dei risultati all' CodePipeline utilizzo di AcknowledgeThirdPartyJobPutThirdPartyJobSuccessResult, e. PutThirdPartyJobFailureResult

  • Recupero e/o inserimento di artefatti nel bucket Amazon S3 per la pipeline. Per scaricare elementi dal bucket Amazon S3, devi creare un client Amazon S3 che utilizzi la firma Signature Version 4 (Sig V4). Sig V4 è richiesto per. AWS KMS

    Per caricare artefatti nel bucket Amazon S3, devi anche configurare la richiesta Amazon S3 per utilizzare la crittografia tramite (PutObject). AWS Key Management Service AWS KMS AWS KMS usi. AWS KMS keys Per sapere se utilizzare la chiave gestita dal cliente Chiave gestita da AWS o una chiave gestita dal cliente per caricare gli artefatti, il lavoratore deve esaminare i dati del lavoro e verificare la proprietà della chiave di crittografia. Se la proprietà è impostata, è necessario utilizzare l'ID della chiave gestita dal cliente durante la configurazione. AWS KMS Se la proprietà della chiave è nulla, si utilizza la. Chiave gestita da AWS CodePipeline utilizza il, Chiave gestita da AWS a meno che non sia configurato diversamente.

    Per un esempio che mostra come creare i AWS KMS parametri in Java o. NET, vedi Specificare AWS Key Management Service in Amazon S3 utilizzando il. AWS SDKs Per ulteriori informazioni sul bucket Amazon S3 per CodePipeline, consulta. CodePipeline concetti

Scelta e configurazione di una strategia di gestione delle autorizzazioni per l'esecutore del processo

Per sviluppare un job worker su cui affidare l'intervento di terzi CodePipeline, è necessaria una strategia per l'integrazione della gestione degli utenti e delle autorizzazioni.

La strategia più semplice consiste nell'aggiungere l'infrastruttura di cui hai bisogno per il tuo job worker creando EC2 istanze Amazon con un ruolo di istanza AWS Identity and Access Management (IAM), che ti consentano di scalare facilmente le risorse necessarie per la tua integrazione. Puoi utilizzare l'integrazione integrata con AWS per semplificare l'interazione tra il tuo job worker e CodePipeline.

Scopri di più su Amazon EC2 e scopri se è la scelta giusta per la tua integrazione. Per informazioni, consulta Amazon EC2 - Virtual Server Hosting. Per informazioni sulla configurazione di un'EC2istanza Amazon, consulta Getting Started with Amazon EC2 Linux Instances.

Un'altra strategia da prendere in considerazione consiste nell'utilizzare la federazione delle identità IAM per integrare il sistema e le risorse esistenti del provider di identità. Questa strategia è utile se disponi già di un provider di identità aziendale o se sei già configurato per supportare gli utenti che utilizzano provider di identità Web. La federazione delle identità consente di concedere un accesso sicuro alle AWS risorse CodePipeline, anche senza dover creare o gestire IAM gli utenti. Puoi utilizzare le caratteristiche e le policy per requisiti di sicurezza delle password e rotazione delle credenziali. Puoi utilizzare applicazioni di esempio come modelli per il tuo progetto. Per informazioni, consulta Gestione della federazione.

Per fornire l'accesso, aggiungi autorizzazioni ai tuoi utenti, gruppi o ruoli:

Di seguito è riportato un esempio di politica che potresti creare per l'utilizzo con il tuo collaboratore esterno. Questa policy è intesa solo come un esempio ed è fornita senza modifiche.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForThirdPartyJobs", "codepipeline:AcknowledgeThirdPartyJob", "codepipeline:GetThirdPartyJobDetails", "codepipeline:PutThirdPartyJobSuccessResult", "codepipeline:PutThirdPartyJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:ThirdParty/Build/Provider/1/" ] } ] }