Este projeto automatiza o processo de implantação de DAGs do Cloud Composer usando pipelines de CI/CD. Ele envolve a criação de instâncias do Composer com Terraform, configuração de DAGs de exemplo e arquivos de teste, e configuração de jobs de CI/CD para ambientes de desenvolvimento e produção.
├── .github/workflows
│ ├── pipeline-composer-dags-dsv.yml
│ ├── pipeline-composer-dags-prd.yml
├── create_composer_instance
│ ├── backend.tf
│ ├── main.tf
│ ├── variables.tf
│ ├── dev.tfvars
│ ├── prod.tfvars
├── dags
│ ├── dag.py
├── tests
│ ├── test.py
├── .gitignore
├── requirements.txt
├── requirements-test.txt
├── README.md
Certifique-se de ter os seguintes pré-requisitos instalados:
Para a instalação do projeto, siga as instruções abaixo:
Clone o repositório do GitHub para o seu ambiente local:
git clone https://github.com/marcus-moura/project-composer-ci-cd.git
Navegue até o diretório do projeto recém-clonado:
cd composer-ci-cd
Se você preferir usar o pip
para instalar as dependências, siga estas etapas:
-
Criação e Ativação do Ambiente Virtual Python:
-
No Linux:
python3 -m venv venv source venv/bin/activate
-
No Windows:
python3 -m venv venv .\venv\Scripts\activate
-
-
Instalação dos Pacotes Python Necessários:
Execute os seguintes comandos para instalar os pacotes listados nos arquivos
requirements.txt
erequirements-test.txt
:pip install -r requirements.txt pip install -r requirements-test.txt
Se você preferir usar o gerenciador de pacotes Poetry, siga estas etapas:
-
Instalação das Dependências com Poetry:
Instale as dependências do projeto usando Poetry:
poetry install
-
Ativação do Ambiente Virtual:
Ative o ambiente virtual criado pelo Poetry:
poetry shell
Após instalar as dependências, certifique-se de configurar as variáveis de ambiente necessárias. Você pode fazer isso exportando as variáveis de um arquivo .env
:
source .env
ou utilizando o comando export
com xargs
:
export $(cat .env | xargs)
⚠️ Utilize o arquivoexemple.env
como base.
Dessa forma, você terá um ambiente Python isolado para o projeto, evitando conflitos entre dependências de outros projetos.
-
Navegue até o diretório do Terraform:
cd create_composer_instance
-
Crie seu bucket no Cloud Storage e configure o seu backend alterando o parâmetro bucket no arquivo
backend.tf
. -
Substitua o arquivo
{env}.tfvars
com os parâmetros a serem passados para o Terraform:work_environ = "ambiente de execução" project_id = "id do seu projeto" region = "localização do seu projeto" image_version_composer = "composer-2.4.4-airflow-2.5.3" composer_name = "nome do composer" sa_composer_name = "nome da Service Account que será utilizada pelo Composer" bucket_name_composer = "Nome do bucket que será utilizado pelo Composer."
-
Execute
terraform init
para inicializar o ambiente Terraform. -
Execute
terraform workspace new {env}
para criar os workspaces de dev e prod. -
Execute
terraform workspace select {env}
para selecionar o workspace. -
Execute
terraform apply -var-file='{env}.tfvars'
para criar o Composer na GCP de acordo com o ambiente.
{env}
pela flag de ambiente que será executada.
Crie suas dags e seus arquivos de teste carregando as dags no diretório dags/
e os testes em tests/
.
Para executar os testes automatizados deste projeto, execute:
python -m pytest tests/
Estes testes validam a funcionalidade das DAGs implantadas.
Para configurar os jobs de CI/CD no GitHub Actions, siga o exemplo dos arquivos pipeline-composer-dags-dsv.yml
e pipeline-composer-dags-prd.yml
. Esses arquivos fornecem um modelo para configurar os pipelines de integração contínua e entrega contínua para os ambientes de desenvolvimento e produção, respectivamente.
Além disso, é necessário configurar um segredo no repositório contendo o JSON da service account criada no ambiente do Google Cloud Platform (GCP). Siga os passos abaixo para configurar este segredo:
- No repositório do GitHub, vá para a seção "Settings".
- No menu lateral, clique em "Secrets".
- Clique em "New repository secret".
- Nomeie o segredo como
GCP_SA_KEY
. - Cole o conteúdo do JSON da service account no campo "Value".
- Clique em "Add secret" para salvar.
Além disso, configure duas variáveis de ambiente no GitHub Actions:
DAGS_BUCKET_PATH_DEV
: Caminho do bucket onde as DAGs serão armazenadas no ambiente de desenvolvimento.DAGS_BUCKET_PATH_PROD
: Caminho do bucket onde as DAGs serão armazenadas no ambiente de produção.
Essas configurações são essenciais para garantir que o ambiente de CI/CD tenha acesso às credenciais necessárias e aos caminhos corretos para implantar as DAGs nos ambientes correspondentes.
Siga estas etapas para implantar o projeto:
- Crie uma instância de desenvolvimento do Composer usando o Terraform.
- Crie uma instância de produção do Composer usando o Terraform.
- Crie uma DAG de exemplo e um arquivo de teste.
- Configure jobs de CI/CD para ambientes de desenvolvimento e produção.
- Acione o pipeline CI/CD para cada ambiente conforme necessário.