Terraform 및 AWS CodePipeline(CloudGuruChallenge 시리즈)을 사용하여 AWS에 인프라를 배포(1/3부분)

이 글은 CodePipeline을 사용하여AWS에 CI/CD 파이프라인을 만들고 CodePipeline은Terraform을 사용하여AWS에 인프라를 배치하는 것에 관한 것이다.


컨텐트

  • 프로젝트 개요
  • 설치 지형
  • AWS 코드 파이핑 설정
  • 소스
  • 지형 평면도 절차
  • 수동 승인 단계
  • 지형 응용 단계
  • 배포 단계
  • 파이핑 최종 뷰
  • 결론
  • 1. 프로젝트 개요


    이 프로젝트는 시리즈#CloudGuruChallenge – Event-Driven Python on AWS의 첫 번째 부분입니다.여기에 우리는 s3 메모리통과 lambda 함수를 배치했다.lambda 함수는 AWS Step 함수 작업 흐름의 일부가 될 것입니다. 이 작업 흐름은 이 시리즈의 다음 부분에서 개발될 것입니다. S3 메모리통은 lambda 배치를 저장하는 데 사용됩니다.
    프로세스 자동화를 위해 Terraform은 IaC(인프라는 코드로), AWS CodePipeline은 CI/CD에 사용됩니다.

    2. 지형 구축


    AWS에서 Terraform 사용을 시작하는 데 필요한 단계는 다음과 같습니다.
  • 지형 상태 파일을 저장하는 S3 저장통을 만듭니다.
  • 기본 키가 LockID인 필요 용량을 가진dynamodb 테이블을 만듭니다.
  • 위 단계에서는 Terraform을 S3으로 백엔드로 구성합니다.공급자tf와 백엔드.tf 파일은 다음과 같다.
    공급자tf
    terraform {
      required_providers {
        aws = {
          source  = "hashicorp/aws"
          version = "~> 3.0"
        }
      }
    }
    
    # Configure the AWS Provider
    provider "aws" {
      region = "us-east-1"
    }
    
    
    
    백엔드.tf
    terraform {
      backend "s3" {
        bucket = "YOUR-BUCKET-NAME"
        key    = "terraform.tfstate"
        region = "YOUR-REGION-NAME"
        dynamodb_table = "terraform-state-lock"
    
      }
    }
    
    예시 lambda 함수를 만듭니다.py를 와 로 압축합니다.이름이 lambda function payload인 tf 파일입니다.지퍼그런 다음 S3 및 lambda의 IaC를 다음과 같이 쓸 수 있습니다.
    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,
        ]
    }
    
    람다.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 파일은 terraform이라는 폴더에 있습니다.

    3. AWS 코드 파이핑 설정


    AWS 코드 파이핑은 CI/CD(지속적인 통합/지속적인 제공)에 사용됩니다.AWS 무료 층은 매달 1개의 무료 파이프를 허용한다.우리의 파이프라인은 다섯 가지 단계, 즉 출처, 구축(지형계획), 구축(수동 비준 절차), 지형 응용과 배치를 포함한다.

    원시 단계


    여기서 Github는 파이프의 원본 저장소로 사용됩니다.이 단계의 구성은 다음과 같습니다.
    1단계: 소스 구성

  • Github 버전 2를 소스 코드 저장소로 선택합니다.AWS codecommit 같은 다른 방법을 선택할 수 있습니다.github에 연결하려면 콘솔을 통해 직접 진행해야 합니다.
  • 저장소의 특정 분기에서 코드 변경이 발생할 때 파이프를 터치할 수 있도록 저장소 이름과 분기 이름을 설정해야 합니다.
  • 건조단계(지형계획단계)


    이 단계는 두 가지 구축, 하나의 수동 승인 절차와 하나의 배치 절차를 포함한다.첫 번째 건조는 지형 계획을 위한 것이다.AWS 코드 빌드는 빌드 프로젝트를 작성하는 데 사용됩니다.이 기능을 설정하려면 파이프 단계의 구축 단계에서 다음과 같은 새로운 조작 그룹을 추가하십시오
    CodePipeline에 구축 작업 추가


    이 항목은 AWS 코드 생성 항목이어야 하며, 항목 만들기를 누르면 만들 수 있으며, 이 항목은 아래와 같이 마법사를 열 수 있습니다.
    지형 계획의 코드 구축 프로젝트





    위의 주요 구성은 다음과 같습니다.
  • 2CPU를 사용하여 3gb 메모리 선택
  • 서비스 역할arn(이 역할은terraform에서 AWS 자원을 제공할 수 있는 권한을 부여한다).이것은terraform에 필요한 모든 권한을 포함해야 합니다. 예를 들어 S3, lambda 등
  • buildspec 파일에 사용될 환경 변수 TF COMMAND P.
  • buildspec의 경로입니다.구축 명령을 포함하는 yml 파일입니다.
  • git 저장소에서 상기 명령을 설정한 후,buildspec 파일을 포함해야 합니다. 필요한 명령을 포함해야 합니다.다음 그림과 같이
    지형도.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`
    

    수동 승인 단계


    다음과 같이 Terraform plan 작업 후에 수동 승인 구축 작업을 만듭니다.
    구축 단계 수동 승인


    승인 및 거부에 대한 알림을 받으려면 SNS 주제를 만들고 이메일 주소에 가입해야 합니다.

    지형 응용 단계


    Terraform plan for Terraform Apply build stage와 유사한 절차에 따라 다음buildspec 파일을 사용합니다.
    지형 적용.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`
    

    배치 단계


    현재 마지막 단계는 배치입니다. 코드 구축은 s3 버킷을 통해 코드를 lambda에 배치하는 데 사용됩니다.repo에 lambda code라는 폴더를 만들고 lambda 함수를 저장합니다.나는 그것을 좋아한다.새 코드 구축 프로젝트를 만듭니다.코드 구축 프로젝트의 모든 절차는 동일합니다.프로젝트의buildspec 파일은 다음과 같습니다.
    배치 상태 기계 코드.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로 보내면 트리거 파이프를 터치합니다. 모든 구축 작업의details 옵션을 통해 구축 과정을 볼 수 있습니다.

    5. 결론


    이 문서에서 AWS CodePipleine을 통해 terraform이 있는 AWS에 인프라를 배치하는 방법에 대해 설명합니다.이 시리즈의 다음 부분에서는 클라우드워치 이벤트를 통해 트리거되는 AWS Step Functions 워크플로우를 설정하는 방법을 보여 드리겠습니다.기대해주세요!

    좋은 웹페이지 즐겨찾기