GitLab runner로 Terraform 실행

강재민·2023년 10월 8일
0
post-custom-banner

Runner에 권한 부여하기

방법1. AWS IAM key 변수로 등록

GitLab에 CI/CD 변수로 AWS Access key와 secrets키를 등록하면 해당 IAM이 가지고 있는 권한으로 AWS CLI명령어를 부여 받은 terraform 실행이 가능합니다.
/Settings/Variables/Add Variables

방법2. AWS IAM 직접 부여하기

두 번째 방법으로는 Runner에 해당 권한을 AWS상에서 직접 부여하는 방법입니다. key를 변수로 등록하는 과정에서 키가 유출되는 것을 방지할 수 있습니다.
다만 해당 runner를 사용하는 사용자를 gitlab에 유저관리를 통해 제한하는 것이 중요합니다.
runner인스턴스선택/Actions/Security/ModifyIamrole


gitlab-ci.yml 파일 작성하기

gitlab-ci.yml

default:
  image: registry.gitlab.com/gitlab-org/terraform-images/stable:latest
  cache:
    key: example-production
    paths:
      - ${TF_ROOT}/.terraform
  before_script:
    - cd ${TF_ROOT}

variables:
  TF_ROOT: ${CI_PROJECT_DIR}/environments/example/production
  TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/example-production

stages:
  - prepare
  - validate
  - build
  - deploy

init:
  stage: prepare
  script:
    - gitlab-terraform init

validate:
  stage: validate
  script:
    - gitlab-terraform validate

plan:
  stage: build
  script:
    - gitlab-terraform plan
    - gitlab-terraform plan-json
  artifacts:
    name: plan
    paths:
      - ${TF_ROOT}/plan.cache
    reports:
      terraform: ${TF_ROOT}/plan.json

apply:
  stage: deploy
  environment:
    name: production
  script:
    - gitlab-terraform apply
  dependencies:
    - plan
  when: manual
  only:
    - master

테라폼 코드 올리고 실행하기

main.tf

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "t1013-xgro-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = false
  enable_vpn_gateway = false

  tags = {
    Terraform = "true"
    Environment = "dev"
  }
}

post-custom-banner

0개의 댓글