

# Conexão ao CircleCI
<a name="connecting-to-data-circleci"></a>

O CircleCI é uma plataforma de integração e entrega contínuas. A conta do CircleCI contém dados sobre seus projetos, pipelines, fluxos de trabalho e muito mais. Se você usa o CircleCI, pode conectar o AWS Glue à conta do CircleCI. Em seguida, será possível usar o CircleCI como fonte de dados nos seus trabalhos de ETL. Execute esses trabalhos para transferir dados entre o CircleCI e serviços da AWS ou outras aplicações compatíveis.

**Topics**
+ [Suporte do AWS Glue para o CircleCI](circleci-support.md)
+ [Políticas que contêm as operações de API para criar e usar conexões](circleci-configuring-iam-permissions.md)
+ [Configuração do CircleCI](circleci-configuring.md)
+ [Configuração de conexões do CircleCI](circleci-configuring-connections.md)
+ [Leitura de entidades do CircleCI](circleci-reading-from-entities.md)
+ [Opções de conexão do CircleCI](circleci-connection-options.md)
+ [Limitações do CircleCI](circleci-connection-limitations.md)

# Suporte do AWS Glue para o CircleCI
<a name="circleci-support"></a>

O AWS Glue oferece suporte ao CircleCI da seguinte forma:

**Compatível como fonte?**  
Sim. Você pode usar trabalhos de ETL do AWS Glue para consultar dados do CircleCI.

**Compatível como destino?**  
Não.

**Versões compatíveis da API do CircleCI**  
Estas são as versões compatíveis da API do CircleCI:
+ v2

# Políticas que contêm as operações de API para criar e usar conexões
<a name="circleci-configuring-iam-permissions"></a>

O exemplo de política a seguir descreve as permissões necessárias do AWS IAM para criar e usar conexões. Se você estiver criando um novo perfil, crie uma política que contenha o seguinte:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Se você não quiser usar o método acima, como alternativa use as seguintes políticas do IAM gerenciadas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – Concede acesso a recursos que vários processos do AWS Glue exigem para fazer a execução em seu nome. Esses recursos incluem o AWS Glue, Amazon S3, IAM, CloudWatch Logs e Amazon EC2. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os processos do AWS Glue terão as permissões necessárias. Esta política geralmente é anexada a funções especificadas durante a definição de crawlers, trabalhos e endpoints de desenvolvimento.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acesso total aos recursos do AWS Glue quando uma identidade à qual a política está anexada usa o Console de Gerenciamento da AWS. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os usuários poderão acessar todos os recursos do console. Esta política geralmente é anexada aos usuários do console do AWS Glue.

# Configuração do CircleCI
<a name="circleci-configuring"></a>

Antes de usar o AWS Glue para transferir dados do CircleCI, os seguintes requisitos deverão ser atendidos:

## Requisitos mínimos
<a name="circleci-configuring-min-requirements"></a>

Estes são os requisitos mínimos:
+ Você tem uma conta no CircleCI que contém os dados que deseja transferir. 
+ Nas configurações de usuário da conta, você criou um token de API pessoal. Para obter mais informações, consulte [Creating a personal API token](https://circleci.com/docs/managing-api-tokens/#creating-a-personal-api-token).
+ Você fornece o token de API pessoal para o AWS Glue ao criar a conexão.

Se você atender a esses requisitos, poderá conectar o AWS Glue à sua conta do CircleCI.

# Configuração de conexões do CircleCI
<a name="circleci-configuring-connections"></a>

O CircleCI oferece suporte à autenticação personalizada.

Para configurar uma conexão do CircleCI:

1. No AWS Secrets Manager, crie um segredo com os seguintes detalhes:

   1. Para a aplicação conectada gerenciada pelo cliente, o segredo deve conter a chave da API da aplicação conectada com `Circle-Token` como a chave.

   1. Observação: é necessário criar um segredo para a sua conexão no AWS Glue.

1. No AWS Glue Glue Studio, crie uma conexão em **Conexões de dados** seguindo estas etapas:

   1. Ao selecionar uma **Fonte de dados**, selecione o CircleCI.

   1. Selecione o perfil do AWS IAM que o AWS Glue pode assumir e tem permissões para as seguintes ações:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Selecione o `secretName` que você deseja usar para essa conexão no AWS Glue para colocar os tokens.

   1. Selecione as opções de rede se quiser usar sua rede.

1. Conceda permissão ao perfil do IAM associado ao seu trabalho do AWS Glue para ler `secretName`.

# Leitura de entidades do CircleCI
<a name="circleci-reading-from-entities"></a>

**Pré-requisito**

Um objeto do CircleCI do qual você deseja ler. Você precisará do nome do objeto.

**Entidades compatíveis quanto à origem**:


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Contexto | Sim | Não | Não | Sim | Não | 
| Métrica de resumo da organização | Sim | Não | Não | Sim | Não | 
| Pipeline | Não | Não | Não | Sim | Não | 
| Fluxo de trabalho do pipeline | Sim | Não | Não | Sim | Não | 
| Ramificação do projeto | Sim | Não | Não | Sim | Não | 
| Teste instável do projeto | Não | Não | Não | Sim | Não | 
| Métrica de resumo do projeto | Sim | Não | Não | Sim | Não | 
| Programação | Não | Não | Não | Sim | Não | 
| Séries temporais de trabalhos do fluxo de trabalho | Sim | Não | Não | Sim | Não | 
| Métrica e tendência do fluxo de trabalho | Sim | Não | Não | Sim | Não | 
| Execução recente do fluxo de trabalho | Sim | Não | Não | Sim | Não | 
| Métrica de resumo do fluxo de trabalho | Sim | Não | Não | Sim | Não | 
| Métrica de teste do fluxo de trabalho | Sim | Não | Não | Sim | Não | 

**Exemplo:**

```
circleci_read = glueContext.create_dynamic_frame.from_options(
    connection_type="circleci",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "context/e7ea2945-dccb-4205-b673-8391fe1b3a4c",
        "API_VERSION": "v2"
    }
```

## Detalhes das entidades e dos campos do CircleCI
<a name="circleci-reading-from-entities-field-details"></a>

Para obter mais informações sobre os detalhes das entidades e dos campos, consulte:
+ [Contextos](https://circleci.com/docs/api/v2/#operation/listContexts)
+ [Métricas de resumo do projeto](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowsPageData)
+ [Séries temporais de trabalhos do fluxo de trabalho](https://circleci.com/docs/api/v2/#operation/getJobTimeseries)
+ [Métricas de resumo da organização](https://circleci.com/docs/api/v2/#operation/getOrgSummaryData)
+ [Ramificações do projeto](https://circleci.com/docs/api/v2/#operation/getAllInsightsBranches)
+ [Testes instáveis do projeto](https://circleci.com/docs/api/v2/#operation/getFlakyTests)
+ [Execuções recentes do fluxo de trabalho](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowRuns)
+ [Métricas de resumo do fluxo de trabalho](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowMetrics)
+ [Métricas e tendências do fluxo de trabalho](https://circleci.com/docs/api/v2/#operation/getWorkflowSummary)
+ [Métricas de teste do fluxo de trabalho](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowTestMetrics)
+ [Pipelines](https://circleci.com/docs/api/v2/#operation/listPipelinesForProject)
+ [Fluxos de trabalho do pipeline](https://circleci.com/docs/api/v2/#operation/listWorkflowsByPipelineId)
+ [Programações](https://circleci.com/docs/api/v2/#operation/listSchedulesForProject)

Entidades com metadados estáticos:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/circleci-reading-from-entities.html)

**nota**  
Os tipos de dados Struct e List são convertidos no tipo de dados String na resposta do conector.

**Particionamento de consultas**

O CircleCI não oferece suporte ao particionamento baseado em campos ou em registros.

# Opções de conexão do CircleCI
<a name="circleci-connection-options"></a>

Estas são as opções de conexão do CircleCI:
+ `ENTITY_NAME`(string): (obrigatório) usado para leitura. O nome do seu objeto no CircleCI.
+ `API_VERSION`(string): (obrigatório) usado para leitura. A versão da API Rest do CircleCI que você deseja usar.
+ `SELECTED_FIELDS`(Lista<String>): padrão: vazio(SELECIONE \$1). Usado para leitura. Colunas que deseja selecionar para o objeto.
+ `FILTER_PREDICATE`(string): padrão: vazio. Usado para leitura. Deve estar no formato Spark SQL.
+ `QUERY`(String): padrão: vazia. Usado para leitura. Consulta completa do Spark SQL.

# Limitações do CircleCI
<a name="circleci-connection-limitations"></a>

Estas são as limitações ou observações do CircleCI:
+ O CircleCI não oferece suporte ao particionamento baseado em campos ou em registros.
+ Os campos de filtro que contiverem “-” (hífen) só funcionarão se estiverem entre backticks (crase). Por exemplo: `workflow-name` = "abc"
+ Não é possível oferecer suporte ao tipo de VCS GitLab porque não existe uma forma programática de recuperar o “ID do projeto” necessário para o caminho da entidade GitLab VCS.