From b5f7f83db19818ecc7c9bfb9dda05f00fb2676f6 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 10:15:34 -0300 Subject: [PATCH 01/31] feat: adiciona arquivos terraform --- .../lambda/terraform-lambda/api_gateway.tf | 32 +++++++++++++++++++ deployment/lambda/terraform-lambda/iam.tf | 23 +++++++++++++ deployment/lambda/terraform-lambda/main.tf | 21 ++++++++++++ deployment/lambda/terraform-lambda/outputs.tf | 4 +++ .../lambda/terraform-lambda/provider.tf | 4 +++ .../lambda/terraform-lambda/variables.tf | 4 +++ 6 files changed, 88 insertions(+) create mode 100644 deployment/lambda/terraform-lambda/api_gateway.tf create mode 100644 deployment/lambda/terraform-lambda/iam.tf create mode 100644 deployment/lambda/terraform-lambda/main.tf create mode 100644 deployment/lambda/terraform-lambda/outputs.tf create mode 100644 deployment/lambda/terraform-lambda/provider.tf create mode 100644 deployment/lambda/terraform-lambda/variables.tf diff --git a/deployment/lambda/terraform-lambda/api_gateway.tf b/deployment/lambda/terraform-lambda/api_gateway.tf new file mode 100644 index 0000000..07225f1 --- /dev/null +++ b/deployment/lambda/terraform-lambda/api_gateway.tf @@ -0,0 +1,32 @@ +resource "aws_api_gateway_rest_api" "api" { + name = "PredictionAPI" + description = "API para a função Lambda de previsão" +} + +resource "aws_api_gateway_resource" "predict" { + rest_api_id = aws_api_gateway_rest_api.api.id + parent_id = aws_api_gateway_rest_api.api.root_resource_id + path_part = "predict" +} + +resource "aws_api_gateway_method" "predict_method" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.predict.id + http_method = "POST" + authorization = "NONE" +} + +resource "aws_api_gateway_integration" "predict_integration" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.predict.id + http_method = aws_api_gateway_method.predict_method.http_method + integration_http_method = "POST" + type = "AWS_PROXY" + uri = "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.prediction_test_lambda.arn}/invocations" +} + +resource "aws_api_gateway_deployment" "api_deployment" { + depends_on = [aws_api_gateway_integration.predict_integration] + rest_api_id = aws_api_gateway_rest_api.api.id + stage_name = "prod" +} \ No newline at end of file diff --git a/deployment/lambda/terraform-lambda/iam.tf b/deployment/lambda/terraform-lambda/iam.tf new file mode 100644 index 0000000..251ed83 --- /dev/null +++ b/deployment/lambda/terraform-lambda/iam.tf @@ -0,0 +1,23 @@ +resource "aws_iam_role" "prediction_test_role" { + name = "prediction_test_role" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Principal = { + Service = "lambda.amazonaws.com" + } + Effect = "Allow" + Sid = "" + }, + ] + }) +} + +resource "aws_iam_policy_attachment" "prediction_test_policy_attachment" { + name = "prediction_test_policy_attachment" + roles = [aws_iam_role.prediction_test_role.name] + policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" +} diff --git a/deployment/lambda/terraform-lambda/main.tf b/deployment/lambda/terraform-lambda/main.tf new file mode 100644 index 0000000..43cd481 --- /dev/null +++ b/deployment/lambda/terraform-lambda/main.tf @@ -0,0 +1,21 @@ +resource "aws_ecr_repository" "prediction_test_repository" { + name = "prediction-test-repo" +} + +resource "aws_lambda_function" "prediction_test_lambda" { + function_name = "prediction_test" + role = aws_iam_role.prediction_test_role.arn + package_type = "Image" # Indica que a função Lambda usa uma imagem Docker + image_uri = "${aws_ecr_repository.prediction_test_repository.repository_url}:latest" + + memory_size = 256 + timeout = 120 +} + +resource "aws_lambda_permission" "allow_api_gateway" { + statement_id = "AllowAPIGatewayInvoke" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.prediction_test_lambda.function_name + principal = "apigateway.amazonaws.com" + source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/*" +} diff --git a/deployment/lambda/terraform-lambda/outputs.tf b/deployment/lambda/terraform-lambda/outputs.tf new file mode 100644 index 0000000..5d66919 --- /dev/null +++ b/deployment/lambda/terraform-lambda/outputs.tf @@ -0,0 +1,4 @@ +output "api_url" { + value = "https://${aws_api_gateway_rest_api.api.id}.execute-api.${var.region}.amazonaws.com/prod/predict" + description = "URL do endpoint da API" +} diff --git a/deployment/lambda/terraform-lambda/provider.tf b/deployment/lambda/terraform-lambda/provider.tf new file mode 100644 index 0000000..355f977 --- /dev/null +++ b/deployment/lambda/terraform-lambda/provider.tf @@ -0,0 +1,4 @@ +provider "aws" { + region = var.region + profile = "default" +} diff --git a/deployment/lambda/terraform-lambda/variables.tf b/deployment/lambda/terraform-lambda/variables.tf new file mode 100644 index 0000000..3619cfe --- /dev/null +++ b/deployment/lambda/terraform-lambda/variables.tf @@ -0,0 +1,4 @@ +variable "region" { + description = "A região onde a infraestrutura será criada." + default = "us-east-1" +} From 8c133c74cde1eb9fcb6615f092e38af0d2700c4f Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 10:18:24 -0300 Subject: [PATCH 02/31] feat: adiciona codigo da lambda --- deployment/lambda/app/lambda_function.py | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 deployment/lambda/app/lambda_function.py diff --git a/deployment/lambda/app/lambda_function.py b/deployment/lambda/app/lambda_function.py new file mode 100644 index 0000000..ca59d54 --- /dev/null +++ b/deployment/lambda/app/lambda_function.py @@ -0,0 +1,48 @@ +import json +import pandas as pd +from src.pipelines.predict import load_model, make_predictions + + +MODEL_FILE = "artifacts/models/model.joblib" +model = load_model(MODEL_FILE) + + +def validate_input(item): + """Valida se o item contém pelo menos um valor e é uma lista com o tamanho correto.""" + if not item or not isinstance(item, list) or len(item) != 4: + raise ValueError("O item deve ser uma lista com 4 valores.") + + +def make_prediction(item): + """Faz previsão com base nos dados de entrada.""" + data = pd.DataFrame( + [item], columns=["sepal_length", "sepal_width", "petal_length", "petal_width"] + ) + prediction = make_predictions(model, data) + return prediction.astype(int).tolist()[0] + + +def process_event(event): + """Processa o evento e gera previsões.""" + if isinstance(event, str): + event = json.loads(event) + if "body" in event: + body = json.loads(event["body"]) + else: + body = event + predictions = [] + + for item in body: + try: + validate_input(item) + prediction = make_prediction(item) + predictions.append({"prediction": prediction}) + except Exception as e: + predictions.append({"error": str(e)}) + return predictions + + +def lambda_handler(event, context): + """Função principal que recebe o evento e contexto.""" + predictions = process_event(event) + return {"statusCode": 200, "body": json.dumps(predictions)} From 4ace87bf60808ea07a532de763da4fd21eb68ce4 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 10:25:25 -0300 Subject: [PATCH 03/31] feat: adiciona pipeline de deploy --- .github/workflows/pipeline_deploy_lambda.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/pipeline_deploy_lambda.yaml diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml new file mode 100644 index 0000000..fb9e4f4 --- /dev/null +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -0,0 +1,39 @@ +name: Pipeline de Deploy Lambda + +on: + workflow_dispatch: + push: + branches: + - feature/lambda + +permissions: + id-token: write + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Terraform + uses: hashicorp/setup-terraform@v3 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: "arn:aws:iam::340752815603:role/oidc-github-framework-eml-role" + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: "us-east-1" + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Run Terraform init + run: | + cd deployment/lambda/terraform-lambda + terraform init + terraform plan From f1ee305254eb4e4f83d371763d1cc1287aae5f0f Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 10:47:15 -0300 Subject: [PATCH 04/31] fix: remove profile --- deployment/lambda/terraform-lambda/provider.tf | 1 - 1 file changed, 1 deletion(-) diff --git a/deployment/lambda/terraform-lambda/provider.tf b/deployment/lambda/terraform-lambda/provider.tf index 355f977..66428ae 100644 --- a/deployment/lambda/terraform-lambda/provider.tf +++ b/deployment/lambda/terraform-lambda/provider.tf @@ -1,4 +1,3 @@ provider "aws" { region = var.region - profile = "default" } From 6913580b14bd8de58ed46c93c4e36971f2bcfc3d Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:22:08 -0300 Subject: [PATCH 05/31] =?UTF-8?q?feat:=20ajusta=20organiza=C3=A7=C3=A3o=20?= =?UTF-8?q?das=20pastas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployment/docker/Dockerfile.lambda | 20 +++++++++++++++++++ .../terraform-lambda/api_gateway.tf | 0 .../terraform-lambda/iam.tf | 0 .../terraform-lambda/main.tf | 0 .../terraform-lambda/outputs.tf | 0 .../terraform-lambda/provider.tf | 0 .../terraform-lambda/terraform.tfstate | 9 +++++++++ .../terraform-lambda/variables.tf | 0 8 files changed, 29 insertions(+) create mode 100644 deployment/docker/Dockerfile.lambda rename deployment/{lambda => infrastructure}/terraform-lambda/api_gateway.tf (100%) rename deployment/{lambda => infrastructure}/terraform-lambda/iam.tf (100%) rename deployment/{lambda => infrastructure}/terraform-lambda/main.tf (100%) rename deployment/{lambda => infrastructure}/terraform-lambda/outputs.tf (100%) rename deployment/{lambda => infrastructure}/terraform-lambda/provider.tf (100%) create mode 100644 deployment/infrastructure/terraform-lambda/terraform.tfstate rename deployment/{lambda => infrastructure}/terraform-lambda/variables.tf (100%) diff --git a/deployment/docker/Dockerfile.lambda b/deployment/docker/Dockerfile.lambda new file mode 100644 index 0000000..339c933 --- /dev/null +++ b/deployment/docker/Dockerfile.lambda @@ -0,0 +1,20 @@ +# Usar a imagem base do AWS Lambda com Python +FROM public.ecr.aws/lambda/python:3.10 + +# Instala o Poetry via pip +RUN pip install poetry + +# Copia o arquivo pyproject.toml e poetry.lock (se existir) para instalar dependências +COPY pyproject.toml poetry.lock* ./ + +# Instala as dependências com o Poetry +RUN poetry config virtualenvs.create false && poetry install --no-dev + +# Copiar o código da função Lambda e a pasta src +COPY artifacts/ artifacts/ +COPY deployment/lambda/app/lambda_function.py ./ +COPY src/ src/ +COPY config/ config/ + +# Comando que será executado quando a função Lambda for invocada +CMD ["lambda_function.lambda_handler"] diff --git a/deployment/lambda/terraform-lambda/api_gateway.tf b/deployment/infrastructure/terraform-lambda/api_gateway.tf similarity index 100% rename from deployment/lambda/terraform-lambda/api_gateway.tf rename to deployment/infrastructure/terraform-lambda/api_gateway.tf diff --git a/deployment/lambda/terraform-lambda/iam.tf b/deployment/infrastructure/terraform-lambda/iam.tf similarity index 100% rename from deployment/lambda/terraform-lambda/iam.tf rename to deployment/infrastructure/terraform-lambda/iam.tf diff --git a/deployment/lambda/terraform-lambda/main.tf b/deployment/infrastructure/terraform-lambda/main.tf similarity index 100% rename from deployment/lambda/terraform-lambda/main.tf rename to deployment/infrastructure/terraform-lambda/main.tf diff --git a/deployment/lambda/terraform-lambda/outputs.tf b/deployment/infrastructure/terraform-lambda/outputs.tf similarity index 100% rename from deployment/lambda/terraform-lambda/outputs.tf rename to deployment/infrastructure/terraform-lambda/outputs.tf diff --git a/deployment/lambda/terraform-lambda/provider.tf b/deployment/infrastructure/terraform-lambda/provider.tf similarity index 100% rename from deployment/lambda/terraform-lambda/provider.tf rename to deployment/infrastructure/terraform-lambda/provider.tf diff --git a/deployment/infrastructure/terraform-lambda/terraform.tfstate b/deployment/infrastructure/terraform-lambda/terraform.tfstate new file mode 100644 index 0000000..ae06f48 --- /dev/null +++ b/deployment/infrastructure/terraform-lambda/terraform.tfstate @@ -0,0 +1,9 @@ +{ + "version": 4, + "terraform_version": "1.9.4", + "serial": 401, + "lineage": "79795974-11da-3e4d-08c5-b20287c1a486", + "outputs": {}, + "resources": [], + "check_results": null +} diff --git a/deployment/lambda/terraform-lambda/variables.tf b/deployment/infrastructure/terraform-lambda/variables.tf similarity index 100% rename from deployment/lambda/terraform-lambda/variables.tf rename to deployment/infrastructure/terraform-lambda/variables.tf From 9bf16c70a1cfd4e288220b110b404a5a0d1a2603 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:23:54 -0300 Subject: [PATCH 06/31] fix: ajusta pipeline --- .github/workflows/pipeline_deploy_lambda.yaml | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index fb9e4f4..63bd006 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -15,25 +15,28 @@ jobs: runs-on: ubuntu-latest steps: - - name: Check out code - uses: actions/checkout@v4 - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v3 - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: "arn:aws:iam::340752815603:role/oidc-github-framework-eml-role" - role-session-name: GitHub_to_AWS_via_FederatedOIDC - aws-region: "us-east-1" - - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v2 - - - name: Run Terraform init - run: | - cd deployment/lambda/terraform-lambda - terraform init - terraform plan + - name: Check out code + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + + - name: Set up Terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_version: 1.8.0 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: "arn:aws:iam::340752815603:role/oidc-github-framework-eml-role" + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: ${{ env.AWS_REGION }} + + - name: Create ECR + run: | + chmod +x deployment/scripts/create_ecr.sh + ./deployment/scripts/create_ecr.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} + +env: + REPO_NAME: "prediction-eml" + AWS_REGION: "us-east-1" From 5d9f512c351fb190bdb6cb8d7b849a729a8adbde Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:39:02 -0300 Subject: [PATCH 07/31] feat: adiciona push imagem docker --- .github/workflows/pipeline_deploy_lambda.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 63bd006..2bdaa61 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -37,6 +37,11 @@ jobs: chmod +x deployment/scripts/create_ecr.sh ./deployment/scripts/create_ecr.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} + - name: Build and push image + run: | + chmod +x deployment/scripts/push_image.sh + ./deployment/scripts/push_image.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} + env: REPO_NAME: "prediction-eml" AWS_REGION: "us-east-1" From 8e1742c66bb66bc9972d82cbe8f59e3aa05be981 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:46:04 -0300 Subject: [PATCH 08/31] feat: adiciona create_infra da lambda --- deployment/scripts/create_infra_lambda.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 deployment/scripts/create_infra_lambda.sh diff --git a/deployment/scripts/create_infra_lambda.sh b/deployment/scripts/create_infra_lambda.sh new file mode 100644 index 0000000..54b3e52 --- /dev/null +++ b/deployment/scripts/create_infra_lambda.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -e + +AWS_REGION=$1 + +terraform -chdir="deployment/infrastructure/terraform-lambda" init +terraform -chdir="deployment/infrastructure/terraform-lambda" apply -auto-approve \ No newline at end of file From 9bf95360dadf29d2825c797fa5dc3a77e1d08451 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:53:51 -0300 Subject: [PATCH 09/31] fix: ajusta terraform para buscar ecr existente --- .../terraform-lambda/api_gateway.tf | 2 +- .../infrastructure/terraform-lambda/iam.tf | 10 +++++----- .../infrastructure/terraform-lambda/main.tf | 16 ++++++---------- .../infrastructure/terraform-lambda/provider.tf | 2 ++ .../infrastructure/terraform-lambda/variables.tf | 6 ++++++ 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/deployment/infrastructure/terraform-lambda/api_gateway.tf b/deployment/infrastructure/terraform-lambda/api_gateway.tf index 07225f1..3ecc4d4 100644 --- a/deployment/infrastructure/terraform-lambda/api_gateway.tf +++ b/deployment/infrastructure/terraform-lambda/api_gateway.tf @@ -22,7 +22,7 @@ resource "aws_api_gateway_integration" "predict_integration" { http_method = aws_api_gateway_method.predict_method.http_method integration_http_method = "POST" type = "AWS_PROXY" - uri = "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.prediction_test_lambda.arn}/invocations" + uri = "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.prediction_eml_lambda.arn}/invocations" } resource "aws_api_gateway_deployment" "api_deployment" { diff --git a/deployment/infrastructure/terraform-lambda/iam.tf b/deployment/infrastructure/terraform-lambda/iam.tf index 251ed83..050e2e5 100644 --- a/deployment/infrastructure/terraform-lambda/iam.tf +++ b/deployment/infrastructure/terraform-lambda/iam.tf @@ -1,5 +1,5 @@ -resource "aws_iam_role" "prediction_test_role" { - name = "prediction_test_role" +resource "aws_iam_role" "prediction_eml_role" { + name = "prediction_eml_role" assume_role_policy = jsonencode({ Version = "2012-10-17" @@ -16,8 +16,8 @@ resource "aws_iam_role" "prediction_test_role" { }) } -resource "aws_iam_policy_attachment" "prediction_test_policy_attachment" { - name = "prediction_test_policy_attachment" - roles = [aws_iam_role.prediction_test_role.name] +resource "aws_iam_policy_attachment" "prediction_eml_policy_attachment" { + name = "prediction_eml_policy_attachment" + roles = [aws_iam_role.prediction_eml_role.name] policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" } diff --git a/deployment/infrastructure/terraform-lambda/main.tf b/deployment/infrastructure/terraform-lambda/main.tf index 43cd481..670e7ad 100644 --- a/deployment/infrastructure/terraform-lambda/main.tf +++ b/deployment/infrastructure/terraform-lambda/main.tf @@ -1,12 +1,8 @@ -resource "aws_ecr_repository" "prediction_test_repository" { - name = "prediction-test-repo" -} - -resource "aws_lambda_function" "prediction_test_lambda" { - function_name = "prediction_test" - role = aws_iam_role.prediction_test_role.arn - package_type = "Image" # Indica que a função Lambda usa uma imagem Docker - image_uri = "${aws_ecr_repository.prediction_test_repository.repository_url}:latest" +resource "aws_lambda_function" "prediction_eml_lambda" { + function_name = "prediction_eml" + role = aws_iam_role.prediction_eml_role.arn + package_type = "Image" + image_uri = "${data.aws_caller_identity.current.account_id}.dkr.ecr.${var.region}.amazonaws.com/${var.repository_name}:latest" memory_size = 256 timeout = 120 @@ -15,7 +11,7 @@ resource "aws_lambda_function" "prediction_test_lambda" { resource "aws_lambda_permission" "allow_api_gateway" { statement_id = "AllowAPIGatewayInvoke" action = "lambda:InvokeFunction" - function_name = aws_lambda_function.prediction_test_lambda.function_name + function_name = aws_lambda_function.prediction_eml_lambda.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/*" } diff --git a/deployment/infrastructure/terraform-lambda/provider.tf b/deployment/infrastructure/terraform-lambda/provider.tf index 66428ae..b76b321 100644 --- a/deployment/infrastructure/terraform-lambda/provider.tf +++ b/deployment/infrastructure/terraform-lambda/provider.tf @@ -1,3 +1,5 @@ provider "aws" { region = var.region } + +data "aws_caller_identity" "current" {} \ No newline at end of file diff --git a/deployment/infrastructure/terraform-lambda/variables.tf b/deployment/infrastructure/terraform-lambda/variables.tf index 3619cfe..141f8c2 100644 --- a/deployment/infrastructure/terraform-lambda/variables.tf +++ b/deployment/infrastructure/terraform-lambda/variables.tf @@ -1,3 +1,9 @@ +variable "repository_name" { + description = "Nome do repositório ECR" + type = string + default = "prediction-eml" +} + variable "region" { description = "A região onde a infraestrutura será criada." default = "us-east-1" From 96b2f6bf9eb3253101e553e1850dfbfb6709ec0b Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 11:56:52 -0300 Subject: [PATCH 10/31] feat: adiciona o create infra no pipeline --- .github/workflows/pipeline_deploy_lambda.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 2bdaa61..772ab30 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -42,6 +42,12 @@ jobs: chmod +x deployment/scripts/push_image.sh ./deployment/scripts/push_image.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} + - name: Create infra and deploy + run: | + chmod +x deployment/scripts/create_infra_lambda.sh + ./deployment/scripts/create_infra_lamba.sh ${{ env.AWS_REGION }} + + env: REPO_NAME: "prediction-eml" AWS_REGION: "us-east-1" From 145395fccec4d06909861626ef9d69189d31c420 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:01:29 -0300 Subject: [PATCH 11/31] fix: arruma nome do script --- .github/workflows/pipeline_deploy_lambda.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 772ab30..7dad6c2 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -45,7 +45,7 @@ jobs: - name: Create infra and deploy run: | chmod +x deployment/scripts/create_infra_lambda.sh - ./deployment/scripts/create_infra_lamba.sh ${{ env.AWS_REGION }} + ./deployment/scripts/create_infra_lambda.sh ${{ env.AWS_REGION }} env: From e6e616075bcb6af2a9af699e218c2599fc5c1109 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:13:01 -0300 Subject: [PATCH 12/31] fix: ajusta poetry no dockerfile --- deployment/docker/Dockerfile.lambda | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/deployment/docker/Dockerfile.lambda b/deployment/docker/Dockerfile.lambda index 339c933..e3f054a 100644 --- a/deployment/docker/Dockerfile.lambda +++ b/deployment/docker/Dockerfile.lambda @@ -1,20 +1,20 @@ -# Usar a imagem base do AWS Lambda com Python FROM public.ecr.aws/lambda/python:3.10 -# Instala o Poetry via pip RUN pip install poetry -# Copia o arquivo pyproject.toml e poetry.lock (se existir) para instalar dependências COPY pyproject.toml poetry.lock* ./ -# Instala as dependências com o Poetry -RUN poetry config virtualenvs.create false && poetry install --no-dev +# Configurar o Poetry para não criar virtualenv +RUN poetry config virtualenvs.create false + +# Verificar configuração do Poetry +RUN poetry config --list + +RUN poetry install --no-dev -# Copiar o código da função Lambda e a pasta src COPY artifacts/ artifacts/ COPY deployment/lambda/app/lambda_function.py ./ COPY src/ src/ COPY config/ config/ -# Comando que será executado quando a função Lambda for invocada CMD ["lambda_function.lambda_handler"] From eb21bec874ab12de70b7cf7e259b9e29ba269bc1 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:20:29 -0300 Subject: [PATCH 13/31] fix: ajusta terraform --- deployment/infrastructure/terraform-lambda/iam.tf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/deployment/infrastructure/terraform-lambda/iam.tf b/deployment/infrastructure/terraform-lambda/iam.tf index 050e2e5..ca5a196 100644 --- a/deployment/infrastructure/terraform-lambda/iam.tf +++ b/deployment/infrastructure/terraform-lambda/iam.tf @@ -1,4 +1,9 @@ +data "aws_iam_role" "existing_role" { + name = "prediction_eml_role" +} + resource "aws_iam_role" "prediction_eml_role" { + count = length(data.aws_iam_role.existing_role.*.name) == 0 ? 1 : 0 name = "prediction_eml_role" assume_role_policy = jsonencode({ @@ -17,7 +22,8 @@ resource "aws_iam_role" "prediction_eml_role" { } resource "aws_iam_policy_attachment" "prediction_eml_policy_attachment" { + count = length(data.aws_iam_role.existing_role.*.name) == 0 ? 1 : 0 name = "prediction_eml_policy_attachment" - roles = [aws_iam_role.prediction_eml_role.name] + roles = [aws_iam_role.prediction_eml_role[0].name] policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" } From aaa990fdac1d7f055fc3f8dfe81985d74ae0fe60 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:53:28 -0300 Subject: [PATCH 14/31] feat: adicione bucket s3 --- .../infrastructure/terraform-lambda/main.tf | 9 +++++++++ .../terraform-lambda/provider.tf | 19 +++++++++++++++++++ .../terraform-lambda/variables.tf | 5 +++++ deployment/scripts/create_infra_lambda.sh | 13 ++++++++++++- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/deployment/infrastructure/terraform-lambda/main.tf b/deployment/infrastructure/terraform-lambda/main.tf index 670e7ad..7cc957e 100644 --- a/deployment/infrastructure/terraform-lambda/main.tf +++ b/deployment/infrastructure/terraform-lambda/main.tf @@ -1,3 +1,12 @@ +terraform { + backend "s3" { + bucket = var.bucket_name + key = "terraform/terraform.tfstate" + region = "us-east-1" + encrypt = true + } +} + resource "aws_lambda_function" "prediction_eml_lambda" { function_name = "prediction_eml" role = aws_iam_role.prediction_eml_role.arn diff --git a/deployment/infrastructure/terraform-lambda/provider.tf b/deployment/infrastructure/terraform-lambda/provider.tf index b76b321..29ed05f 100644 --- a/deployment/infrastructure/terraform-lambda/provider.tf +++ b/deployment/infrastructure/terraform-lambda/provider.tf @@ -1,5 +1,24 @@ provider "aws" { region = var.region } +terraform { + required_version = ">= 1.0" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.49" + } + tls = { + source = "hashicorp/tls" + version = ">= 3.0" + } + } + backend "s3" { + key = "terraform/terraform.tfstate" + region = "us-east-1" + encrypt = true + } +} + data "aws_caller_identity" "current" {} \ No newline at end of file diff --git a/deployment/infrastructure/terraform-lambda/variables.tf b/deployment/infrastructure/terraform-lambda/variables.tf index 141f8c2..93acb73 100644 --- a/deployment/infrastructure/terraform-lambda/variables.tf +++ b/deployment/infrastructure/terraform-lambda/variables.tf @@ -8,3 +8,8 @@ variable "region" { description = "A região onde a infraestrutura será criada." default = "us-east-1" } + +variable "bucket_name" { + description = "Nome do bucket S3 para o backend" + type = string +} diff --git a/deployment/scripts/create_infra_lambda.sh b/deployment/scripts/create_infra_lambda.sh index 54b3e52..02936f5 100644 --- a/deployment/scripts/create_infra_lambda.sh +++ b/deployment/scripts/create_infra_lambda.sh @@ -1,7 +1,18 @@ #!/bin/bash set -e +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +BUCKET_NAME="$ACCOUNT_ID-prediction-eml" AWS_REGION=$1 -terraform -chdir="deployment/infrastructure/terraform-lambda" init +# Verifica se o bucket existe +if aws s3api head-bucket --bucket "$BUCKET_NAME" 2>/dev/null; then + echo "O bucket '$BUCKET_NAME' já existe." +else + # Se o bucket não existir, cria o bucket + aws s3api create-bucket --bucket "$BUCKET_NAME" --region us-east-1 + echo "Bucket '$BUCKET_NAME' criado com sucesso." +fi + +terraform -chdir="deployment/infrastructure/terraform-lambda" init -backend-config="bucket=$BUCKET_NAME" -backend-config="region=$AWS_REGION" terraform -chdir="deployment/infrastructure/terraform-lambda" apply -auto-approve \ No newline at end of file From 15f599a88a0b5bece90207796625933ef5b91920 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:56:43 -0300 Subject: [PATCH 15/31] fix: remove config duplicada --- .../terraform-lambda/provider.tf | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/deployment/infrastructure/terraform-lambda/provider.tf b/deployment/infrastructure/terraform-lambda/provider.tf index 29ed05f..b76b321 100644 --- a/deployment/infrastructure/terraform-lambda/provider.tf +++ b/deployment/infrastructure/terraform-lambda/provider.tf @@ -1,24 +1,5 @@ provider "aws" { region = var.region } -terraform { - required_version = ">= 1.0" - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 5.49" - } - tls = { - source = "hashicorp/tls" - version = ">= 3.0" - } - } - backend "s3" { - key = "terraform/terraform.tfstate" - region = "us-east-1" - encrypt = true - } -} - data "aws_caller_identity" "current" {} \ No newline at end of file From 9db68f54cb860b95fcdb6350e10aec2a9343b9ed Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 12:59:56 -0300 Subject: [PATCH 16/31] fix: remove variavel do nome do bucket --- deployment/infrastructure/terraform-lambda/variables.tf | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/deployment/infrastructure/terraform-lambda/variables.tf b/deployment/infrastructure/terraform-lambda/variables.tf index 93acb73..5290394 100644 --- a/deployment/infrastructure/terraform-lambda/variables.tf +++ b/deployment/infrastructure/terraform-lambda/variables.tf @@ -7,9 +7,4 @@ variable "repository_name" { variable "region" { description = "A região onde a infraestrutura será criada." default = "us-east-1" -} - -variable "bucket_name" { - description = "Nome do bucket S3 para o backend" - type = string -} +} \ No newline at end of file From aee22ac32a848a74a216285f30abec4264aa4de5 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:04:44 -0300 Subject: [PATCH 17/31] =?UTF-8?q?fix:=20ajusta=20cria=C3=A7=C3=A3o=20da=20?= =?UTF-8?q?iam=20role?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployment/infrastructure/terraform-lambda/iam.tf | 10 ++-------- deployment/scripts/create_infra_lambda.sh | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/deployment/infrastructure/terraform-lambda/iam.tf b/deployment/infrastructure/terraform-lambda/iam.tf index ca5a196..7a2d96a 100644 --- a/deployment/infrastructure/terraform-lambda/iam.tf +++ b/deployment/infrastructure/terraform-lambda/iam.tf @@ -1,9 +1,4 @@ -data "aws_iam_role" "existing_role" { - name = "prediction_eml_role" -} - resource "aws_iam_role" "prediction_eml_role" { - count = length(data.aws_iam_role.existing_role.*.name) == 0 ? 1 : 0 name = "prediction_eml_role" assume_role_policy = jsonencode({ @@ -22,8 +17,7 @@ resource "aws_iam_role" "prediction_eml_role" { } resource "aws_iam_policy_attachment" "prediction_eml_policy_attachment" { - count = length(data.aws_iam_role.existing_role.*.name) == 0 ? 1 : 0 name = "prediction_eml_policy_attachment" - roles = [aws_iam_role.prediction_eml_role[0].name] + roles = [aws_iam_role.prediction_eml_role.name] policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" -} +} \ No newline at end of file diff --git a/deployment/scripts/create_infra_lambda.sh b/deployment/scripts/create_infra_lambda.sh index 02936f5..41232be 100644 --- a/deployment/scripts/create_infra_lambda.sh +++ b/deployment/scripts/create_infra_lambda.sh @@ -15,4 +15,4 @@ else fi terraform -chdir="deployment/infrastructure/terraform-lambda" init -backend-config="bucket=$BUCKET_NAME" -backend-config="region=$AWS_REGION" -terraform -chdir="deployment/infrastructure/terraform-lambda" apply -auto-approve \ No newline at end of file +terraform -chdir="deployment/infrastructure/terraform-lambda" plan \ No newline at end of file From 2fff4b2c0b534099069cbcf89dec1230ab112621 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:09:21 -0300 Subject: [PATCH 18/31] fix: ajusta comando do terraform --- deployment/scripts/create_infra_lambda.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/scripts/create_infra_lambda.sh b/deployment/scripts/create_infra_lambda.sh index 41232be..02936f5 100644 --- a/deployment/scripts/create_infra_lambda.sh +++ b/deployment/scripts/create_infra_lambda.sh @@ -15,4 +15,4 @@ else fi terraform -chdir="deployment/infrastructure/terraform-lambda" init -backend-config="bucket=$BUCKET_NAME" -backend-config="region=$AWS_REGION" -terraform -chdir="deployment/infrastructure/terraform-lambda" plan \ No newline at end of file +terraform -chdir="deployment/infrastructure/terraform-lambda" apply -auto-approve \ No newline at end of file From 6373e3fa3a62e8294af20526088a83145edad7eb Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:18:11 -0300 Subject: [PATCH 19/31] feat: adiciona diretorio dockerfile --- deployment/docker/Dockerfile.lambda | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/deployment/docker/Dockerfile.lambda b/deployment/docker/Dockerfile.lambda index e3f054a..77aefc2 100644 --- a/deployment/docker/Dockerfile.lambda +++ b/deployment/docker/Dockerfile.lambda @@ -1,20 +1,25 @@ FROM public.ecr.aws/lambda/python:3.10 +# Instalar o Poetry RUN pip install poetry +# Definir o diretório de trabalho +WORKDIR /var/task + +# Copiar arquivos de configuração do Poetry COPY pyproject.toml poetry.lock* ./ # Configurar o Poetry para não criar virtualenv RUN poetry config virtualenvs.create false -# Verificar configuração do Poetry -RUN poetry config --list - +# Instalar as dependências do projeto RUN poetry install --no-dev +# Copiar os artefatos e o código-fonte COPY artifacts/ artifacts/ COPY deployment/lambda/app/lambda_function.py ./ COPY src/ src/ COPY config/ config/ +# Comando padrão para executar a função Lambda CMD ["lambda_function.lambda_handler"] From 4463ae346b611ec60abb6eedb538903bd1b65288 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:31:46 -0300 Subject: [PATCH 20/31] fix: cria arquivo push_image lambda --- .github/workflows/pipeline_deploy_lambda.yaml | 4 ++-- deployment/scripts/push_image_lambda.sh | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 deployment/scripts/push_image_lambda.sh diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 7dad6c2..056961d 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -39,8 +39,8 @@ jobs: - name: Build and push image run: | - chmod +x deployment/scripts/push_image.sh - ./deployment/scripts/push_image.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} + chmod +x deployment/scripts/push_image_lambda.sh + ./deployment/scripts/push_image_lambda.sh ${{ env.REPO_NAME }} ${{ env.AWS_REGION }} - name: Create infra and deploy run: | diff --git a/deployment/scripts/push_image_lambda.sh b/deployment/scripts/push_image_lambda.sh new file mode 100644 index 0000000..250835d --- /dev/null +++ b/deployment/scripts/push_image_lambda.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +DOCKER_IMAGE_NAME=$1 +AWS_REGION=$2 +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +REPO_URI="$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$DOCKER_IMAGE_NAME" + +docker build -t $DOCKER_IMAGE_NAME -f deployment/docker/Dockerfile.lambda . +docker tag "$DOCKER_IMAGE_NAME:latest" "$REPO_URI:latest" +aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPO_URI" +docker push "$REPO_URI:latest" \ No newline at end of file From 55aba9869169c7cbff94e1e29add01dce3088103 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:43:24 -0300 Subject: [PATCH 21/31] fix: ajusta dockerfile --- deployment/docker/Dockerfile.lambda | 3 --- 1 file changed, 3 deletions(-) diff --git a/deployment/docker/Dockerfile.lambda b/deployment/docker/Dockerfile.lambda index 77aefc2..2c2f8e0 100644 --- a/deployment/docker/Dockerfile.lambda +++ b/deployment/docker/Dockerfile.lambda @@ -3,9 +3,6 @@ FROM public.ecr.aws/lambda/python:3.10 # Instalar o Poetry RUN pip install poetry -# Definir o diretório de trabalho -WORKDIR /var/task - # Copiar arquivos de configuração do Poetry COPY pyproject.toml poetry.lock* ./ From 62b6e30d6b89ff5d59149d8b1a90986035081257 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 13:48:27 -0300 Subject: [PATCH 22/31] feat: adiciona modelo para teste --- artifacts/models/.gitignore | 1 - artifacts/models/model.joblib | Bin 0 -> 5219 bytes 2 files changed, 1 deletion(-) create mode 100644 artifacts/models/model.joblib diff --git a/artifacts/models/.gitignore b/artifacts/models/.gitignore index 565a9d5..e69de29 100644 --- a/artifacts/models/.gitignore +++ b/artifacts/models/.gitignore @@ -1 +0,0 @@ -/model.joblib diff --git a/artifacts/models/model.joblib b/artifacts/models/model.joblib new file mode 100644 index 0000000000000000000000000000000000000000..3faa58fa8283884f348ab6998e6b2446424ce51d GIT binary patch literal 5219 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 T^m7pYPen&gii{R4n#lhEA2x__ literal 0 HcmV?d00001 From a82d441762ea55532800d3b6e1306dfdef65ac06 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 14:13:47 -0300 Subject: [PATCH 23/31] feat: adiciona pipeline de destroy --- .github/workflows/pipeline_deploy_batch.yml | 4 +- .github/workflows/pipeline_destroy_lambda.yml | 39 +++++++++++++++++++ deployment/scripts/destroy_infra_lambda.sh | 21 ++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/pipeline_destroy_lambda.yml create mode 100644 deployment/scripts/destroy_infra_lambda.sh diff --git a/.github/workflows/pipeline_deploy_batch.yml b/.github/workflows/pipeline_deploy_batch.yml index da5b529..c7b37ac 100644 --- a/.github/workflows/pipeline_deploy_batch.yml +++ b/.github/workflows/pipeline_deploy_batch.yml @@ -1,9 +1,7 @@ name: Pipeline de Deploy Batch on: - push: - branches: - - main + workflow_dispatch: permissions: id-token: write diff --git a/.github/workflows/pipeline_destroy_lambda.yml b/.github/workflows/pipeline_destroy_lambda.yml new file mode 100644 index 0000000..db8f246 --- /dev/null +++ b/.github/workflows/pipeline_destroy_lambda.yml @@ -0,0 +1,39 @@ +name: Pipeline de Destroy Lambda + +on: + workflow_dispatch: + +permissions: + id-token: write + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: "arn:aws:iam::340752815603:role/oidc-github-framework-eml-role" + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: ${{ env.AWS_REGION }} + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_version: 1.8.0 + + - name: Destroy infrastructure + run: | + chmod +x deployment/scripts/destroy_infra_lambda.sh + ./deployment/scripts/destroy_infra_lambda.sh ${{ env.AWS_REGION }} + +env: + REPO_NAME: "prediction-eml" + AWS_REGION: "us-east-1" diff --git a/deployment/scripts/destroy_infra_lambda.sh b/deployment/scripts/destroy_infra_lambda.sh new file mode 100644 index 0000000..73d2e83 --- /dev/null +++ b/deployment/scripts/destroy_infra_lambda.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e + +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +BUCKET_NAME="$ACCOUNT_ID-prediction-eml" +AWS_REGION=$1 + +# Verifica se o bucket existe +if aws s3api head-bucket --bucket "$BUCKET_NAME" 2>/dev/null; then + echo "O bucket '$BUCKET_NAME' já existe." +else + # Se o bucket não existir, cria o bucket + aws s3api create-bucket --bucket "$BUCKET_NAME" --region us-east-1 + echo "Bucket '$BUCKET_NAME' criado com sucesso." +fi + +# Inicializa o Terraform +terraform -chdir="deployment/infrastructure/terraform-lambda" init -backend-config="bucket=$BUCKET_NAME" -backend-config="region=$AWS_REGION" + +# Comando para destruir a infraestrutura +terraform -chdir="deployment/infrastructure/terraform-lambda" destroy -auto-approve From f3a999fd1860102505c4e5a25deb99285195c4bd Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 14:15:32 -0300 Subject: [PATCH 24/31] fix: ajusta pipeline para rodar manualmente --- .github/workflows/pipeline_deploy_batch.yml | 4 +++- .github/workflows/pipeline_deploy_lambda.yaml | 3 --- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pipeline_deploy_batch.yml b/.github/workflows/pipeline_deploy_batch.yml index c7b37ac..da5b529 100644 --- a/.github/workflows/pipeline_deploy_batch.yml +++ b/.github/workflows/pipeline_deploy_batch.yml @@ -1,7 +1,9 @@ name: Pipeline de Deploy Batch on: - workflow_dispatch: + push: + branches: + - main permissions: id-token: write diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 056961d..96cfba7 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -2,9 +2,6 @@ name: Pipeline de Deploy Lambda on: workflow_dispatch: - push: - branches: - - feature/lambda permissions: id-token: write From 103991d5dbe50b5ba5fe4b8de827005b7aac4b06 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 14:21:27 -0300 Subject: [PATCH 25/31] teste pipeline destroy --- .github/workflows/pipeline_destroy_lambda.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pipeline_destroy_lambda.yml b/.github/workflows/pipeline_destroy_lambda.yml index db8f246..55634c1 100644 --- a/.github/workflows/pipeline_destroy_lambda.yml +++ b/.github/workflows/pipeline_destroy_lambda.yml @@ -1,7 +1,9 @@ name: Pipeline de Destroy Lambda on: - workflow_dispatch: + push: + branches: + - feature/lambda permissions: id-token: write From fc274dc6f3412430a000b238bc2497a563a3bc2e Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 14:24:42 -0300 Subject: [PATCH 26/31] fix: ajusta pipeline para rodar manualmente --- .github/workflows/pipeline_deploy_lambda.yaml | 4 +++- .github/workflows/pipeline_destroy_lambda.yml | 6 ++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 96cfba7..52244d2 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -1,7 +1,9 @@ name: Pipeline de Deploy Lambda on: - workflow_dispatch: + push: + branches: + - feature/lambda permissions: id-token: write diff --git a/.github/workflows/pipeline_destroy_lambda.yml b/.github/workflows/pipeline_destroy_lambda.yml index 55634c1..d59eaac 100644 --- a/.github/workflows/pipeline_destroy_lambda.yml +++ b/.github/workflows/pipeline_destroy_lambda.yml @@ -1,16 +1,14 @@ name: Pipeline de Destroy Lambda on: - push: - branches: - - feature/lambda + workflow_dispatch: permissions: id-token: write contents: read jobs: - deploy: + destroy: runs-on: ubuntu-latest steps: From 41b3b0ffd700bfd05a1546351039a81a517d8df2 Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 15:57:42 -0300 Subject: [PATCH 27/31] =?UTF-8?q?fix:=20ajusta=20organiza=C3=A7=C3=A3o=20d?= =?UTF-8?q?as=20pastas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {deployment => api}/lambda/app/lambda_function.py | 0 deployment/docker/Dockerfile.lambda | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {deployment => api}/lambda/app/lambda_function.py (100%) diff --git a/deployment/lambda/app/lambda_function.py b/api/lambda/app/lambda_function.py similarity index 100% rename from deployment/lambda/app/lambda_function.py rename to api/lambda/app/lambda_function.py diff --git a/deployment/docker/Dockerfile.lambda b/deployment/docker/Dockerfile.lambda index 2c2f8e0..84887a4 100644 --- a/deployment/docker/Dockerfile.lambda +++ b/deployment/docker/Dockerfile.lambda @@ -14,7 +14,7 @@ RUN poetry install --no-dev # Copiar os artefatos e o código-fonte COPY artifacts/ artifacts/ -COPY deployment/lambda/app/lambda_function.py ./ +COPY api/lambda/app/lambda_function.py ./ COPY src/ src/ COPY config/ config/ From d3316290819338bd7ad62d85a8b77b0f5333ba9c Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 16:03:06 -0300 Subject: [PATCH 28/31] fix: ajusta nome da branch --- .github/workflows/pipeline_deploy_lambda.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index 52244d2..e9f07d8 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -3,7 +3,7 @@ name: Pipeline de Deploy Lambda on: push: branches: - - feature/lambda + - main permissions: id-token: write From be6635a2813c8c05bf5f4cd51a858a0d4d5ee50e Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Tue, 8 Oct 2024 16:08:27 -0300 Subject: [PATCH 29/31] remove modelo do repo --- artifacts/models/.gitignore | 1 + artifacts/models/model.joblib | Bin 5219 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 artifacts/models/model.joblib diff --git a/artifacts/models/.gitignore b/artifacts/models/.gitignore index e69de29..565a9d5 100644 --- a/artifacts/models/.gitignore +++ b/artifacts/models/.gitignore @@ -0,0 +1 @@ +/model.joblib diff --git a/artifacts/models/model.joblib b/artifacts/models/model.joblib deleted file mode 100644 index 3faa58fa8283884f348ab6998e6b2446424ce51d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5219 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 T^m7pYPen&gii{R4n#lhEA2x__ From 0f1bbdf276d4ec6ece223bf56c0ca4747b123fee Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Wed, 9 Oct 2024 11:06:52 -0300 Subject: [PATCH 30/31] remove arquivo tfstate --- .../infrastructure/terraform-lambda/terraform.tfstate | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 deployment/infrastructure/terraform-lambda/terraform.tfstate diff --git a/deployment/infrastructure/terraform-lambda/terraform.tfstate b/deployment/infrastructure/terraform-lambda/terraform.tfstate deleted file mode 100644 index ae06f48..0000000 --- a/deployment/infrastructure/terraform-lambda/terraform.tfstate +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 4, - "terraform_version": "1.9.4", - "serial": 401, - "lineage": "79795974-11da-3e4d-08c5-b20287c1a486", - "outputs": {}, - "resources": [], - "check_results": null -} From 4336c59fb0edae718762c6d5560c4e0ceaec803b Mon Sep 17 00:00:00 2001 From: Nathan Souza Date: Wed, 9 Oct 2024 11:08:53 -0300 Subject: [PATCH 31/31] fix: ajusta nome do repo --- .github/workflows/pipeline_deploy_lambda.yaml | 2 +- .github/workflows/pipeline_destroy_lambda.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pipeline_deploy_lambda.yaml b/.github/workflows/pipeline_deploy_lambda.yaml index e9f07d8..459eb47 100644 --- a/.github/workflows/pipeline_deploy_lambda.yaml +++ b/.github/workflows/pipeline_deploy_lambda.yaml @@ -48,5 +48,5 @@ jobs: env: - REPO_NAME: "prediction-eml" + REPO_NAME: "eml-online-repo" AWS_REGION: "us-east-1" diff --git a/.github/workflows/pipeline_destroy_lambda.yml b/.github/workflows/pipeline_destroy_lambda.yml index d59eaac..b93006e 100644 --- a/.github/workflows/pipeline_destroy_lambda.yml +++ b/.github/workflows/pipeline_destroy_lambda.yml @@ -35,5 +35,5 @@ jobs: ./deployment/scripts/destroy_infra_lambda.sh ${{ env.AWS_REGION }} env: - REPO_NAME: "prediction-eml" + REPO_NAME: "eml-online-repo" AWS_REGION: "us-east-1"