Codenize 경찰이있는 삶

이 기사는 쿠후 컴퍼니 Advent Calendar 2019의 13 일째 기사입니다.

DaVinciStudio 에서 SRE를 하고 있는 요코야마입니다.
DaVinciStudio의 SRE는 쿠후 컴퍼니 각사의 인프라 기반을 관리하고 있습니다.
그리고, 인프라 기반의 관리에는 Terraform 이나 아이와 비슷합니다. 그리고 ls , CloudFormation 를 사용하고 있습니다.
이번에는 이 관리 툴의 운용에 대해 한 글을 쓰고 싶습니다.

Terraform 및 Codenize.tools 및 CloudFormation 정보



인프라의 코드 관리라고 하면, 일반적으로 이러한 3 툴을 이용되고 있는 것이 많지 않을까요?
잡에 비교하면 이하와 같은 느낌이 됩니다.


이름
좋은 곳


Terraform
풍부한 리소스(AWS, GCP, datag, Azure, GitHub, 도미노 피자 (거짓말) 등)

Codenize.tools
Ruby DSL, Ruby로 프로그래밍 가능하게 리소스 정의 가능

CloudFormation
공식 툴이라는 안심감.


우리는 기본적으로 terraform을 사용하고 신규로 구축하는 것에는 CloudFormation이 사용되는 경우가 많습니다.
이는 CloudFormataion이 기존 리소스를 가져올 수 없다는 문제가 있었기 때문입니다.
그러나 이 문제는 다음과 같이 최근 업데이트에서 해결되었습니다. 앞으로는 적극적으로 사용해 나갈 생각입니다.
htps : // 아 ws. 아마존. 이 m / jp / b ぉ gs / 네 ws / 네 w m m rt ぃ s 찐 갓 rso s

코드 관리의 괴로움



그런데 본제입니다. 코드 관리는 이러한 도구를 도입하여 끝이 아닙니다. 매일 운용해 나가야 합니다.
이런 것, 마음이 닿지 않습니까? ?

흠, 이 검증을 위한 IAM 롤, 일일이 풀릭 만들어 코드를 바꾸는 어려운, 일단 수동으로 만들까. 잘 가면 내일 제대로 코드화하라.

내일은 영원히 오지 않습니다. 그대로 잊혀져 시간이 지나고,
다음에 IAM 롤에 변경을 하려고 하는 사람이 dry-run 했을 때 의도하지 않은 차이를 알아차리는 것입니다. .
이것은 매우 슬프다.
수동 작성을 금지하고, 엄격하게 운용해야 한다는 츳코미는 말씀하시는 대로라고 생각합니다.
그러나 수동으로 만들 수 있는 느슨한 운용도 이것이 이것으로 장점이 있다고 생각합니다.
그래서 이런 느슨함을 유지하면서 슬픈 생각을 하는 사람이 줄어들도록 Codenize 경찰을 만들었습니다.

Codenize 경찰



Codenize 경찰의 내용은 Shell 스크립트입니다.
예를 들어 hogehoge/hogehoge 리포지토리에 코드가 있는 경우 다음과 같습니다.GITHUB_TOKEN , SLACK_WEBHOOK_URL 는 환경 변수로 전달합니다.
#!/bin/bash
set -x
function slack_notify_change_of () {
  payload="payload={'attachments':[{'color': '#e73613', 'text': '${1}の差分を検知しました。'}]}"
  curl -X POST --data-urlencode "$payload" $SLACK_WEBHOOK_URL
}

export AWS_REGION=ap-northeast-1
git clone --depth 1 https://$GITHUB_TOKEN@github.com/hogehoge/hogehoge.git

cd /opt/hogehoge
bundle install

cd /opt/hogehoge/codenize-tools
services=(roadwork)
for service in ${services[@]}; do
  bundle exec ${service} -a --dry-run | grep -e Create -e Delete -e Update
  if [ ${?} = 0 ]; then
    slack_notify_change_of ${service}
  fi
done

cd /opt/hogehoge/terraform
services=(cloudfront codebuild codecommit codepipeline datadog eip github iam kms lb s3 security_group vpc)
for service in ${services[@]}; do
  cd /opt/hogehoge/terraform/${service}
  terraform init
  terraform plan -detailed-exitcode -parallelism 50
  if [ ${?} = 2 ]; then
    slack_notify_change_of ${service}
  fi
done


나머지는 이 Shell 스크립트를 임의의 환경에서 움직이기만 하면 됩니다.
당사에서는 ECS나 EKS를 도입하고 있기 때문에, 이 스크립트를 배치한 Docker 컨테이너를 ECS상에서 하루에 1회 실행(순회)시키고 있습니다.
이렇게 하면 차이가 있을 때 Slack에게 다음과 같이 통지되어 코드에 반영되지 않은 변경이 장기간 방치되지 않습니다.
※사정에 의해 아이콘 화상은 보여드릴 수 없습니다.


요약



이런 조금 하고 싶은 식의 쌓아서 생활을 편리하게 해 가고 싶은 것이군요.
쿠후 컴퍼니 Advent Calendar 2019 , 내일의 14일째는 마츠히사_h씨의 「수수한 이야기」입니다.

좋은 웹페이지 즐겨찾기