Referência do modelo de integração
Há várias integrações predefinidas para serviços de terceiros que ajudarão a incorporar as ferramentas existentes do cliente no processo de liberação do pipeline. Parceiros ou provedores de serviços terceirizados usam um modelo de integração para implementar tipos de ação a serem usados no CodePipeline.
Use essa referência ao planejar ou trabalhar com tipos de ação gerenciados com um modelo de integração compatível no CodePipeline.
Para certificar seu tipo de ação de terceiros como uma integração de parceiro com o CodePipeline, consulte a Rede de Parceiros da AWS (APN). Essas informações são um complemento à Referência da AWS CLI.
Tópicos
Como os tipos de ação de terceiros funcionam com o integrador
Você pode adicionar tipos de ação de terceiros aos pipelines do cliente para concluir tarefas nos recursos do cliente. O integrador gerencia as solicitações de trabalho e executa a ação com o CodePipeline. O diagrama a seguir mostra um tipo de ação de terceiros criado para os clientes usarem em seu pipeline. Depois que o cliente configura a ação, ela é executada e cria solicitações de trabalho que são processadas pelo mecanismo de ação do integrador.
O diagrama mostra as seguintes etapas:
-
A definição da ação é registrada e disponibilizada no CodePipeline. A ação de terceiros está disponível para clientes do provedor de terceiros.
-
O cliente do provedor escolhe e configura a ação no CodePipeline.
-
A ação é executada e os trabalhos são colocados em fila no CodePipeline. Quando o trabalho está pronto no CodePipeline, ele envia uma solicitação de trabalho.
-
O integrador (o operador de trabalho das APIs de sondagem de terceiros ou da função do Lambda) considera a solicitação de trabalho, retorna uma confirmação e trabalha nos artefatos das ações.
-
O integrador retorna a saída de êxito/falha (o operador de trabalho usa APIs de sucesso/falha ou a função do Lambda envia a saída de êxito/falha) com um resultado do trabalho e um token de continuação.
Para obter informações sobre as etapas que você pode usar para solicitar, visualizar e atualizar um tipo de ação, consulte Como trabalhar com tipos de ação.
Conceitos
Esta seção usa os seguintes termos para tipos de ação de terceiros:
- Tipo de ação
-
Um processo repetível que pode ser reutilizado em pipelines que executam as mesmas workloads de entrega contínua. Os tipos de ação são identificados por
Owner,Category,ProvidereVersion. Por exemplo:{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },Todas as ações do mesmo tipo compartilham a mesma implementação.
- Ação
-
Uma única instância de um tipo de ação, um dos processos discretos que ocorrem no estágio de um pipeline. Isso normalmente inclui os valores de usuário específicos do pipeline em que essa ação é executada.
- Definição de ação
-
O esquema de um tipo de ação que define as propriedades necessárias para configurar a ação e os artefatos de entrada/saída.
- Execução da ação
-
Uma coleção de trabalhos que foram executados para determinar se a ação no pipeline do cliente foi bem-sucedida ou não.
- Mecanismo de execução de ações
-
Uma propriedade da configuração de execução da ação que define o tipo de integração usado por um tipo de ação. Os valores válidos são
JobWorkereLambda. - Integração
-
Descreve um software executado por um integrador para implementar um tipo de ação. O CodePipeline oferece suporte a dois tipos de integração correspondentes aos dois mecanismos de ação compatíveis:
JobWorkereLambda. - Integrador
-
A pessoa que é proprietária da implementação de um tipo de ação.
- Trabalho
-
Um trabalho com pipeline e o contexto do cliente para executar uma integração. A execução de uma ação é composta por um ou mais trabalhos.
- Operador de trabalho
-
O serviço que processa a entrada do cliente e executa um trabalho.
Modelos de integração compatíveis
O CodePipeline tem dois modelos de integração:
-
Modelo de integração do Lambda: este modelo de integração é a forma preferida de trabalhar com tipos de ação no CodePipeline. O modelo de integração do Lambda usa uma função do Lambda para processar solicitações de trabalho quando sua ação é executada.
-
Modelo de integração do operador de trabalho: o modelo de integração do operador de trabalho é o modelo usado anteriormente para integrações de terceiros. O modelo de integração do operador de trabalho usa um operador de trabalho configurado para entrar em contato com as APIs do CodePipeline para processar solicitações de trabalho quando a ação é executada.
Para fins de comparação, a tabela a seguir descreve os atributos dos dois modelos:
| Modelo de integração do Lambda | Modelo de integração do operador de trabalho | |
|---|---|---|
| Descrição | O integrador grava a integração como uma função do Lambda, que é invocada pelo CodePipeline sempre que há um trabalho disponível para a ação. A função do Lambda não faz a sondagem dos trabalhos disponíveis, mas espera até que a próxima solicitação de trabalho seja recebida. | O integrador grava a integração como um operador de trabalho que sonda constantemente os trabalhos disponíveis nos pipelines do cliente. O operador de trabalho então executa o trabalho e envia o resultado do trabalho de volta ao CodePipeline usando as APIs do CodePipeline. |
| Infraestrutura | AWS Lambda | Implante o código do operador de trabalho na infraestrutura do integrador, como instâncias do Amazon EC2. |
| Esforço de desenvolvimento | A integração contém somente a lógica de negócios. | A integração precisa interagir com as APIs do CodePipeline, além de conter a lógica de negócios. |
| Esforço operacional | Menor esforço operacional, pois a infraestrutura consiste apenas em recursos da AWS. | Maior esforço operacional porque o operador de trabalho precisa do hardware autônomo. |
| Tempo máximo de execução do trabalho | Se a integração precisar ser executada ativamente por mais de 15 minutos, esse modelo não poderá ser usado. Essa ação destina-se a integradores que precisam iniciar um processo (por exemplo, iniciar uma compilação no artefato de código do cliente) e retornar um resultado quando ele for concluído. Não é recomendável que o integrador continue aguardando a conclusão da compilação. Em vez disso, retorne uma continuação. O CodePipeline cria um novo trabalho em mais 30 segundos se uma continuação for recebida do código do integrador para verificar o trabalho até que ele seja concluído. | Trabalhos de execução muito longa (horas/dias) podem ser mantidos por meio desse modelo. |
Modelo de integração do Lambda
O modelo de integração do Lambda compatível inclui a criação da função do Lambda e a definição da saída para o tipo de ação de terceiros.
Atualize a função do Lambda para processar a entrada do CodePipeline
Crie uma nova função do Lambda. Você pode adicionar lógica de negócios à função do Lambda, que é executada sempre que há um trabalho disponível no pipeline para o tipo de ação. Por exemplo, considerando o contexto do cliente e do pipeline, talvez você queira começar a criar seu serviço para o cliente.
Use os parâmetros a seguir para atualizar a função do Lambda a fim de processar a entrada do CodePipeline.
Formato:
-
jobId:-
o ID exclusivo do trabalho gerado pelo sistema.
-
Tipo: String
-
Padrão: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
-
-
accountId:-
O ID da conta da AWS do cliente a ser usada durante a execução do trabalho.
-
Tipo: String
-
Padrão: [0-9]{12}
-
-
data:-
Outras informações sobre um trabalho que uma integração usa para concluir o trabalho.
-
Contém um mapa do seguinte:
-
actionConfiguration:-
Os dados de configuração da ação. Os campos de configuração da ação são um mapeamento de pares de chave-valor para que o cliente insira os valores. As chaves são determinadas pelos parâmetros-chave no arquivo de definição de tipo de ação quando você configura sua ação. Neste exemplo, os valores são determinados pelo usuário da ação, especificando as informações nos campos
UsernameePassword. -
Tipo: String para mapa de strings, opcionalmente presente
Exemplo:
"configuration": { "Username": "MyUser", "Password": "MyPassword" },
-
-
encryptionKey:-
Representa informações sobre a chave usada para criptografar dados no armazenamento de artefatos, como uma chave do AWS KMS.
-
Conteúdo: Tipo do tipo de dados
encryptionKey, opcionalmente presente
-
-
inputArtifacts:-
Lista de informações sobre um artefato a ser trabalhado, como um artefato de teste ou de compilação.
-
Conteúdo: Lista do tipo de dados
Artifact, opcionalmente presente
-
-
outputArtifacts:-
Lista de informações sobre a saída de uma ação.
-
Conteúdo: Lista do tipo de dados
Artifact, opcionalmente presente
-
-
actionCredentials:-
Representa um objeto de credenciais de sessão da AWS. Essas credenciais são credenciais temporárias emitidas pelo AWS STS. Elas podem ser usados para acessar artefatos de entrada e saída no bucket do S3 usado para armazenar artefatos para o pipeline no CodePipeline.
Essas credenciais também têm as mesmas permissões do modelo de declarações de política especificado no arquivo de definição de tipo de ação.
-
Conteúdo: Tipo do tipo de dados
AWSSessionCredentials, opcionalmente presente
-
-
actionExecutionId:-
O ID externo da execução da ação.
-
Tipo: String
-
-
continuationToken:-
Um token gerado pelo sistema, como uma ID de implantação, exigido por um trabalho para continuar o trabalho de forma assíncrona.
-
Tipo: String, opcionalmente presente
-
-
-
Tipos de dados:
-
encryptionKey:-
id:-
O ID usado para identificar a chave. Para uma chave do AWS KMS, você pode usar o ID da chave, o ARN da chave ou o ARN do alias.
-
Tipo: String
-
-
type:-
o tipo de chave de criptografia, como uma chave do AWS KMS.
-
Tipo: String
-
Valores válidos:
KMS
-
-
-
Artifact:-
name:-
O nome do artefato.
-
Tipo: String, opcionalmente presente
-
-
revision:-
O ID de revisão do artefato. Dependendo do tipo de objeto, pode ser um ID de confirmação (GitHub) ou um ID de revisão (Amazon S3).
-
Tipo: String, opcionalmente presente
-
-
location:-
O local de um artefato.
-
Conteúdo: Tipo do tipo de dados
ArtifactLocation, opcionalmente presente
-
-
-
ArtifactLocation:-
type:-
O tipo de artefato no local.
-
Tipo: String, opcionalmente presente
-
Valores válidos:
S3
-
-
s3Location:-
O local do bucket do S3 que contém uma revisão.
-
Conteúdo: Tipo do tipo de dados
S3Location, opcionalmente presente
-
-
-
S3Location:-
bucketName:-
O nome do bucket do S3.
-
Tipo: String
-
-
objectKey:-
A chave do objeto no bucket do S3, que identifica exclusivamente o objeto no bucket.
-
Tipo: String
-
-
-
AWSSessionCredentials:-
accessKeyId:-
A chave de acesso da sessão.
-
Tipo: String
-
-
secretAccessKey:-
A chave de acesso secreta da sessão.
-
Tipo: String
-
-
sessionToken:-
O token da sessão.
-
Tipo: String
-
-
Exemplo:
{ "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" } }
Retornar os resultados da função do Lambda ao CodePipeline
O operador de trabalho do integrador deve retornar uma payload válida em casos de êxito, falha ou continuação.
Formato:
-
result: o resultado do trabalho.-
Obrigatório
-
Valores válidos (sem distinção entre maiúsculas e minúsculas):
-
Success: indica que um trabalho foi bem-sucedido e foi encerrado. -
Continue: indica que um trabalho foi bem-sucedido e deve continuar, por exemplo, se o operador de trabalho for chamado novamente para executar a mesma ação. -
Fail: indica que um trabalho apresentou falha e foi encerrado.
-
-
-
failureType: um tipo de falha a ser associado a um trabalho com falha.A categoria
failureTypede ações do parceiro descreve o tipo de falha encontrado durante a execução do trabalho. Os integradores definem o tipo juntamente com a mensagem de falha ao retornar um resultado de falha de trabalho ao CodePipeline.-
Opcional. Obrigatório se o resultado for
Fail. -
Deve ser nulo se
resultforSuccessouContinue -
Valores válidos:
-
ConfigurationError
-
JobFailed
-
PermissionsError
-
RevisionOutOfSync
-
RevisionUnavailable
-
SystemUnavailable
-
-
-
continuation: estado de continuação a ser passado para o próximo trabalho na execução da ação atual.-
Opcional. Obrigatório se o resultado for
Continue. -
Deve ser nulo se
resultforSuccessouFail. -
Propriedades:
-
State: um hash do estado a ser passado.
-
-
-
status: status da execução da ação.-
Opcional.
-
Propriedades:
-
ExternalExecutionId: um ID de execução externa opcional ou ID de confirmação a ser associado ao trabalho. -
Summary: um resumo opcional do que ocorreu. Em cenários de falha, essa será a mensagem de falha exibida para o usuário.
-
-
-
outputVariables: um conjunto de pares de chave/valor a serem passados para a próxima execução de ação.-
Opcional.
-
Deve ser nulo se
resultforContinueouFail.
-
Exemplo:
{ "result":"success", "failureType": null, "continuation": null, "status": { "externalExecutionId":"my-commit-id-123", "summary":"everything is dandy"}, "outputVariables": { "FirstOne":"Nice", "SecondOne":"Nicest", ... } }
Use tokens de continuação para aguardar os resultados de um processo assíncrono
O token continuation faz parte da payload e do resultado da função do Lambda. É uma forma de passar o estado do trabalho para o CodePipeline e indicar que o trabalho precisa ser continuado. Por exemplo, depois que um integrador inicia uma compilação para o cliente em seu recurso, ele não espera a conclusão da compilação, mas indica ao CodePipeline que não tem um resultado "terminal" ao retornar result como continue e retornar o ID exclusivo da compilação ao CodePipeline como token continuation.
nota
As funções do Lambda só podem ser executadas por até 15 minutos. Se o trabalho precisar ser executado por mais tempo, você poderá usar tokens de continuação.
A equipe do CodePipeline chama o integrador após 30 segundos com o mesmo token continuation em sua payload para que ele possa verificar sua conclusão. Se a compilação for concluída, o integrador retornará o resultado terminal de êxito/falha; caso contrário, ela continuará.
Forneça ao CodePipeline as permissões para chamar a função do Lambda do integrador em runtime
Você adiciona permissões à função do Lambda do integrador para fornecer ao serviço do CodePipeline permissões para chamá-lo usando a entidade principal do CodePipeline: codepipeline.amazonaws.com. Você pode adicionar permissões usando o CloudFormation ou a linha de comando. Para obter um exemplo, consulte Como trabalhar com tipos de ação.
Modelo de integração do operador de trabalho
Após designar o fluxo de trabalho de alto nível, você poderá criar o operador de trabalho. Embora as especificidades da ação de terceiros determine o que é necessário para o operador de trabalho, a maioria dos operadores de trabalho das ações de terceiros incluem a seguinte funcionalidade:
-
Sondagem de trabalhos do CodePipeline usando
PollForThirdPartyJobs. -
Confirmação de trabalhos e retorno de resultados ao CodePipeline usando
AcknowledgeThirdPartyJob,PutThirdPartyJobSuccessResultePutThirdPartyJobFailureResult. -
Recuperação de artefatos e/ou colocação de artefatos no bucket do Amazon S3 para o pipeline. Para fazer download dos artefatos no bucket do Amazon S3, é necessário criar um cliente do Amazon S3 que use a assinatura do Signature versão 4 (Sig V4). O Sig V4 é necessário para o AWS KMS.
Para fazer upload de artefatos no bucket do Amazon S3, você também deve configurar a solicitação
PutObjectdo Amazon S3 para usar criptografia por meio do AWS Key Management Service (AWS KMS). O AWS KMS usa as AWS KMS keys. Para saber se a Chave gerenciada pela AWS ou uma chave gerenciada pelo cliente deve ser usada para fazer upload de artefatos, o operador de trabalho deve analisar os dados do trabalho e verificar a propriedade da chave de criptografia. Se a propriedade estiver definida, você deverá usar essa ID de chave gerenciada pelo cliente ao configurar o AWS KMS. Se a propriedade da chave for nula, você usará a Chave gerenciada pela AWS. O CodePipeline usa a Chave gerenciada pela AWS, a menos que seja configurado de outra forma.Para ver um exemplo que mostra como criar os parâmetros do AWS KMS em Java ou .NET, consulte Como especificar o AWS Key Management Service no Amazon S3 usando os SDKs da AWS. Para obter mais informações sobre o bucket do Amazon S3 para o CodePipeline, consulte Conceitos do CodePipeline.
Escolher e configurar uma estratégia de gerenciamento de permissões para o operador de trabalho
Para desenvolver um operador de trabalho para a ação de terceiros do CodePipeline, será necessária uma estratégia para a integração de gerenciamento de usuários e permissões.
A estratégia mais simples é adicionar a infraestrutura necessária para seu operador de trabalho criando instâncias do Amazon EC2 com uma função de instância do AWS Identity and Access Management (IAM), que permite aumentar verticalmente a escala dos recursos necessários à integração. Você pode usar a integração incorporada com a AWS para simplificar a interação entre o operador de trabalho e o CodePipeline.
Saiba mais sobre o Amazon EC2 e determine se essa é a escolha certa para sua integração. Para obter mais informações, consulte Amazon EC2 – Hospedagem de servidor virtual
Outra estratégia a ser considerada é usar a federação de identidades com o IAM para integrar o sistema e os recursos existentes do provedor de identidades. Essa estratégia é útil se você já tiver um provedor de identidades corporativas ou já estiver configurado para oferecer suporte aos usuários usando provedores de identidades da web. A federação de identidades permite que você conceda acesso seguro aos recursos da AWS, incluindo o CodePipeline, sem precisar criar ou gerenciar usuários do IAM. É possível usar recursos e políticas para requisitos de segurança de senhas e rotação de credenciais. Você pode usar aplicações de exemplo como modelos para seu próprio design. Para mais informações, consulte Gerenciar federação
Para conceder acesso, adicione as permissões aos seus usuários, grupos ou perfis:
-
Usuários e grupos no AWS IAM Identity Center:
Crie um conjunto de permissões. Siga as instruções em Criação de um conjunto de permissões no Guia do usuário do AWS IAM Identity Center.
-
Usuários gerenciados no IAM com provedor de identidades:
Crie um perfil para a federação de identidades. Siga as instruções em Criando um perfil para um provedor de identidades de terceiros (federação) no Guia do Usuário do IAM.
-
Usuários do IAM:
-
Crie um perfil que seu usuário possa assumir. Siga as instruções em Criação de um perfil para um usuário do IAM no Guia do usuário do IAM.
-
(Não recomendado) Vincule uma política diretamente a um usuário ou adicione um usuário a um grupo de usuários. Siga as instruções em Adição de permissões a um usuário (console) no Guia do usuário do IAM.
-
Veja a seguir uma política de exemplo que você pode criar para usar com o operador de trabalho de terceiros. Essa política serve somente como exemplo e é fornecida no estado em que encontra.