Рубрики
Uncategorized

Развертывание инфраструктуры на AWS с террафом и AWS CodePipipeline (#CloudguruChallenge Series) (часть 1/3)

Этот пост о создании конвейера CI / CD на AWS с помощью кодовой обработки, который развертывает инфраст … Теги от AWS, Terraform, DevOps, Github.

Содержание

  1. Обзор проекта
  2. Настройка террафора
  3. Настройка AWS CodePipipeline
    • Исходный этап
    • Террафом плана шаг
    • Ручное утверждение шага
    • Террафом наносит этап
    • Развертывать этап
  4. Окончательный вид трубопровода
  5. Вывод

1. Обзор проекта

Этот проект первая часть в серии #CloudguruChallenge — Python, управляемый событиями на AWS Отказ Здесь мы развертываем ведра S3 и функцию лямбда. Функция лямбда будет частью рабочего процесса AWS-функций, которые будут разработаны в следующей части этой серии, а ведро S3 используется для хранения развертывания лямбда. Для автоматизации процесса Terraform используется для IAC (инфраструктура в качестве кода) и AWS CodePipeline используется для CI/CD.

2. Настройка террафора

Ниже приведены необходимые шаги для начала работы с террафом на AWS:

  • Создайте ведро S3, которое будет хранить файл штата Terraform.
  • Создайте таблицу Dynamodb с по требованию Емкость с первичным ключом LOCKID.

Вышеуказанные шаги будут настраивать террафору с S3 в качестве бэкинда. Файл Provider.tf и backends.tf показан ниже.

provider.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = "us-east-1"
}


backends.tf

terraform {
  backend "s3" {
    bucket = "YOUR-BUCKET-NAME"
    key    = "terraform.tfstate"
    region = "YOUR-REGION-NAME"
    dynamodb_table = "terraform-state-lock"

  }
}

Создайте образец lambda_function.py и zip его в том же каталоге, что и файлы .tf с именем lambda_function_payload.zip. После чего IAC для S3 и Lambda можно записать, как показано ниже:

S3.tf

resource "aws_s3_bucket" "lambda_s3_buckets" {
    bucket = "YOUR-BUCKET-NAME"
    acl    = "private"
    force_destroy = true

}

resource "aws_s3_bucket_object" "object" {
    bucket = "YOUR-BUCKET-NAME"
    key    = "YOUR-PATH-TO-STORE-LAMBDA-DEPLOYMENT"
    source = "lambda_function_payload.zip"

    depends_on = [
    aws_s3_bucket.lambda_s3_buckets,
    ]
}

Lambda.tf

resource "aws_lambda_function" "state_machine_lambdas" {
    function_name = "YOUR-FUNCTION-NAME"
    role          = "ROLE-ARN"
    handler       = "lambda_function.lambda_handler" 
    s3_bucket = "BUCKET-NAME_WITH-LAMBDA-DEPLOYMENT"
    s3_key    = "PATH-TO-LAMBDA-DEPLOYMENT"

    runtime = "python3.8"
    depends_on = [
    aws_s3_bucket_object.object,
    ]
}

Храните все файлы .tf в папке с именем terraporm.

3. Настройка AWS CodePipipeline

AWS CodePipipeline будет использоваться для CI/CD (непрерывной интеграции/непрерывной доставки). Бесплатный уровень AWS допускает 1 бесплатный трубопровод в месяц. Наш трубопровод состоит из пяти этапов Viz Source, Build (Terraporm Plan), сборка (ручное утверждение), Terraform применяется и развертывание.

Исходный этап

Здесь Github используется в качестве репозитория источника для трубопровода. Конфигурация для этого этапа показана ниже.

Этап 1: конфигурация источника

  1. GitHub версии 2 выбран в качестве репозитория исходного кода. Вы можете выбрать другие, такие как AWS CodeCommit и т. Д. Для Github вам нужно подключиться к нему, который является прямым процессом через консоль.
  2. Название репозитория и имя отделения должны быть настроены, что будет запускать трубопровод всякий раз, когда есть изменение кода в этой конкретной ветви в репозитории.

Этап сборки (шаг на плане террафора)

Этот этап состоит из двух модулей, ручного этапа одобрения и шага развертывания. Первая сборка предназначена для террафора. AWS Code Build используется для создания проектов сборки. Чтобы установить это, на этапах трубопровода добавьте новую группу действий под сценой сборки, как показано ниже

Добавление действий по сборке в кодепейн

Проект должен быть проект построения кода AWS, который может быть создан, нажав на проект Create Create, который откроет мастер, как показано ниже.

Проект CodeBuild для плана террафора

Важная конфигурация выше

  • Выбор памяти 3 ГБ с 2CPU (который включен в свободный уровень)
  • Роль обслуживания ARN (которая дает террафору разрешение на предоставление AWS Resources). Он должен содержать все разрешения, которые требуют террафора, такие как доступ к S3, лямбда и т. Д.
  • Переменная ENV TF_Command_P, которая будет использоваться в файле BuildSpec.
  • Путь к BuildSpec.yml файл, который содержит команды сборки.

После настройки вышеуказанного репозитория Git он должен содержать файл BuildSpec, который содержит необходимые команды. Это показано ниже

Terraform_Plan.yml.yml.yml

version: 0.1

phases:

  install:
    commands:
      - "apt install unzip -y"
      - "wget 
https://releases.hashicorp.com/terraform/0.14.10/terraform_0.14.10_linux_amd64.zip"
      - "unzip terraform_0.14.10_linux_amd64.zip"
      - "mv terraform /usr/local/bin/"
  pre_build:
    commands:
      - terraform -chdir=Terraform init -input=false

  build:
    commands:
      - terraform -chdir=Terraform $TF_COMMAND_P -input=false -no-color

  post_build:
    commands:
      - echo terraform $TF_COMMAND_P completed on `date`

Ручное утверждение шага

Создайте действие вручную об утверждении Сборка после действий плана террафора, как показано ниже.

Сцена сборки вручную одобрения

Вы должны создать SNS-тему с подпиской на ваш адрес электронной почты для получения уведомлений о разрешениях и отклонениях.

Террафом наносит этап

Следуйте подобному процессу, поскольку план террафора для Terraform наносит сцену сборки со следующим файлом BuildSpec.

Terraform_Apply.yml.

version: 0.1

phases:

  install:
    commands:
      - "apt install unzip -y"
      - "wget https://releases.hashicorp.com/terraform/0.14.10/terraform_0.14.10_linux_amd64.zip"
      - "unzip terraform_0.14.10_linux_amd64.zip"
      - "mv terraform /usr/local/bin/"
  pre_build:
    commands:
      - terraform -chdir=Terraform init -input=false

  build:
    commands:
      - terraform -chdir=Terraform $TF_COMMAND_A -input=false -auto-approve

  post_build:
    commands:
      - echo terraform $TF_COMMAND_A completed on `date`

Развертывать этап

Теперь завершающий этап будет развертываться там, где сборка кода используется для развертывания кода в Lambda через ведро S3. Создайте папку в репо REPO под названием Lambda_Code и сохранить лямбда_функцию. Создайте новый проект сборки кода. Все шаги для проекта Code Build будут одинаковыми. Файл BuildSpec для проекта показан ниже.

deply_state_machine_code.yml.

version: 0.1

phases:

  pre_build:
    commands:
      - mkdir -p ./lambda_code/zipped
      - zip -r -j lambda_code/zipped/lambda-function-payload.zip lambda_code/*

  build:
    commands:
      - aws s3 sync ./lambda_code/zipped s3://YOUR-BUCKET-NAME/YOUR-S3-KEY --delete

      - aws lambda update-function-code --function-name YOUR-FUNCTION-NAME --s3-bucket YOUR-BUCKET-NAME --s3-key YOUR-S3-KEY-TO-FILE

  post_build:
    commands:
      - echo state_machine_code was deployed to lambda from S3 bucket on `date`

4. Окончательный вид трубопровода

После вышеуказанных шагов трубопровод должен выглядеть что-то вроде, показанное ниже.

Окончательный вид трубопровода

Нажатие на GitHub будет запускать трубопровод, и процесс сборки можно просматривать через опцию «Детали» на каждом действии сборки.

5. Вывод

В этом посте я охватил, как развернуть инфраструктуру на AWS с террафором через AWS CodePipleine. В следующей части серии я покажу, как настроить рабочий процесс AWS-функции, который запускается через событие CloudWatch. Быть в курсе!

Оригинал: «https://dev.to/thakurrishabh/deploying-infrastructure-on-aws-with-terraform-and-aws-codepipeline-series-1-3-cloudguruchallenge-5n»