Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

Terraform Cloud에서 workspace 사용하기

AWS S3 등을 제외하고도 Terraform Cloud에서 상태관리를 할 수 있는데 Terraform의 Workspace를 사용해 보면서 설정을 해보게 되었다. Workspace 관련해서는 이전에 Terraform workspace의 활용에서 설명한 적이 있다.

먼저 다음과 같은 terraform.tf 설정 파일을 만든다.(파일명은 상관없다.)

terraform {
  backend "remote" {
    organization = "outsider"
    workspaces {
      prefix = "s3-"
    }
  }
}

여기서 workspaces 부분은 앞에서 말한 Workspace보다는 Terraform Cloud의 Workspace를 얘기하는 건데 완전히 일치하지는 않지만, 어느 정도 같은 개념이기는 하다. 보통 워크스페이스를 하나 만들고 설정하면 name 키를 이용해서 워크스페이스의 이름을 지정해야 하지만 워크스페이스를 쓰려면 prefix를 써야 한다. AWS S3를 백엔드로 쓸 때key와 함께 workspace_key_prefix를 써야 한다.

$ terraform init

Initializing the backend...

Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.

Error: No existing workspaces.

Use the "terraform workspace" command to create and select a new workspace.
If the backend already contains existing workspaces, you may need to update
the backend configuration.

Terraform을 초기화하려고 하면 워크스페이스가 없다고 오류가 발생한다. 보통 워크스페이스를 사용하지 않으면 default 워크스페이스를 쓰게 되는데 본격적으로 워크스페이스를 쓸 때는 이 default 말고 다른 워크스페이스를 만들어야 한다.

$ terraform workspace new dev
Created and switched to workspace "dev"!

You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
$ terraform workspace list
* dev

dev 워크스페이스가 만들어졌고 선택된 상태임을 확인할 수 있다. 물론 현재는 하나만 만들었으므로 워크스페이스가 하나밖에 없다.

$ terraform init

Initializing the backend...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

이제 다시 terraform init을 실행하면 정상적으로 초기화할 수 있다.

Terraform Cloud에 가보면 아래처럼 s3-dev라는 워크스페이스가 만들어진 것을 볼 수 있다.

Terraform Cloud 화면에 s3-dev 워크스페이스가 생성되었다

이는 앞에서 prefix로 지정한 s3-에 workspace 이름인 dev가 붙어서 만들어진 이름이다. 필요한 워크스페이스별로 만들어 놓고 바꿔가면서 사용할 수 있다.

2020/09/05 21:01 2020/09/05 21:01

기술 뉴스 #157 : 20-09-01

웹개발 관련

  • An Update on MDN Web Docs : Mozilla의 최근 해고 발표에 MDN 팀도 포함되었다고 해서 많은 사람이 걱정했는데 코어 엔지니어링 팀에서 MDN을 계속 운영할 것이지만 Mozilla의 방향 변경으로 인해서 스폰서쉽, 개발자 이벤트 등은 어쩔 수 없이 축소한다고 한다.(영어)
  • [번역] 모든 길은 Rome으로 통할까? : Babel을 만들었던 Sebastian McKenzie가 새로 만든 프로젝트 Rome에 대한 글이다. Rome은 JavaScript 생태계에서 Webpack, Babel, ESLint 등 용도별로 나누어져 있는 도구들을 Rome에서 모두 처리하겠다는 도구인데 현재는 linting과 포매팅만 완전히 구현되어 있다. Rome을 쓰면 각 도구가 AST를 만드는 대신 하나의 AST를 용도별로 사용할 수 있고 설정 파일도 하나뿐이며 Rome은 다른 의존성이 갖지 않게 구현된 점을 강조하고 있고 장기적으로 Rome의 미래가 긍정적이라고 하고 있다.(한국어)
  • Microsoft will bid farewell to Internet Explorer and legacy Edge in 2021 : Microsoft가 2021년 8월 17일부터 Office 365, OneDrive, Outlook 등 자사의 온라인 서비스에서 IE 11을 지원하지 않을 것이라고 밝혔다. 이는 Windows 10에서 IE 11의 지원을 중단하기 전에 웹서비스에서 먼저 중단을 하기 시작한 것이다.(영어)
  • WCAG 2.2 작업 초안 둘러보기 - 두 번째 : 웹 콘텐츠 접근성 가이드라인(WCAG) 2.2의 두 번째 작업 초안을 보고 변경된 부분을 정리한 글이다. 이번 버전에서는 운동장애 사용자, 고령자(Retiree), 인지장애 및 학습장애 사용자, 저시력 사용자를 주 대상으로 "탐색 기능", "입력 방식", "예측 가능", "입력 지원" 부분이 추가되었다.(한국어)
  • Bootstrap Icons v1.0.0 : Boostrap에서 1,100개의 SVG 아이콘이 포함된 Bootstrap Icons의 1.0.0 버전을 공개했다.(영어)

그 밖의 개발 관련

  • A leap of faith: Committing to open source : Babel에 리드 메인테이너이면서 풀타임 오픈소스 개발자인 Henry Zhu의 글이다. JSCS로 오픈소스에 참여하게 되면서 Adobe로 이직한 뒤 Babel에 참여하면서 매니저에게 얘기해서 절반 정도의 시간을 오픈소스에 쓸 수 있게 되었지만, 더 자유롭게 기여하고 싶어서 Adobe를 그만두고 기부를 받아서 풀타임으로 오픈소스 개발을 하게 된다. Henry가 오픈소스에 관심을 가지면서 알게 된 "I started to understand that maintainers are real people with lives, jobs, and families, and are sacrificing a lot to give back to a larger community."가 인상적이고 "In a way, code is the easy part. The hardest problems in engineering are about people, and open source is no different."라고 한 것처럼 오픈소스에서 코드보다 사람이 더 어렵고 이 부분에 더 많이 기여해보고 싶었다고 한다. 메인테이너를 오래 해왔기 때문에 "Open source consumption is free, but the maintainer’s time is not, even if we’re not paid."를 강조하고 있다.(영어)
  • Upgrading GitHub to Ruby 2.7 : GitHub이 프로덕션을 모두 Ruby 2.7로 업그레이드한 과정을 설명한다. 2.7에서 키워드 인자의 동작이 바뀌어서 폐기 예정 경고가 나오는데 GitHub 코드에서 만개가 넘는 경고가 나와서 Warning 모듈을 몽키 패치해서 경고를 수집해서 warnings.txt에 남기고 CODEOWNERS를 이용해서 각 팀에 알려주어 관리하는 코드의 경고를 제거하도록 했다고 한다. 배포할 때는 Kubernetes에서는 2%만 적용되도록 한 후 오류를 해결하고 점차 비율을 높여서 전체 코드를 배포했고 성능 향상도 있었지만 이를 정리하면서 안 쓰는 코드를 제거하고 관리되지 않는 의존성도 정리하는 기회가 되었다고 한다.(영어)
  • Docker best practices with Node.js : Node.js 애플리케이션을 Docker 이미지로 만들 때의 팁이 정리되어 있다. 멀티스테이지를 사용하고 OS 시그널을 받을 수 있도록 npm scripts 대신 node 명령어로 실행하고 프로세스 매니저 대신 직접 node를 사용하고 gracefull shutdown을 위해 tini 프로세스 매니저를 이용하는 방법 등이 나와 있다.(영어)
  • Automate releases and more with the new Sentry Release GitHub Action : Sentry에서 애플리케이션을 릴리스 할 때 릴리스 정보와 커밋 정보를 Sentry에 보내서 오류를 더 쉽게 추적할 수 있게 하는 GitHub Action을 공개했다. 릴리스와 커밋 추적 기능은 Sentry에 이미 있던 기능이고 이 GitHub Action은 이를 자동화 할 수 있다.(영어)
  • 비주얼 타이머 앱 개발하며 배운 것들 : 사이드 프로젝트로 iOS 타이머 앱을 React Native로 만들어서 1년간 운영한 후기이다. 생산성 도구를 만들고 싶었고 이전보다 약간 더 큰 앱을 만들어서 약간의 수익도 올려보려고 만들었고 소셜 계정 등에서만 마케팅을 했고 사용자들의 리뷰를 백로그에 등록해서 개선해왔다고 한다. 사이드 프로젝트는 하다가 그만두기 쉬운데 릴리스 후 1년이나 운영하고 그 경험이 나와 있어서 재미있다.(한국어)
  • 캐시 성능 향상기 (Improving Cache Speed at Scale) : Redis Conf 2020의 "Improving Cache Speed at Scale"이라는 세션을 보고 정리한 내용이다. Redis의 저장한 값이 TTL이 만료되었을 때의 요청이 데이터베이스로 한꺼번에 몰리는 Cache Stampede 문제를 해결하기 위해 디바운스를 이용해서 성능을 향상하고 하나의 키에 너무 많은 요청이 몰리는 Hot Keys 문제를 복제본으로 만들어서 성능을 개선하는 방법 등을 소개하고 있다.(한국어)
  • Apex Logs public beta : 과거 Node.js에서 유명한 개발자였고 지금은 Golang을 하는 TJ Holowaychuk이 1인 스타트업으로 운영 중인 Apex에서 로그 관리 시스템 Apex Logs를 퍼블릭 베타로 공개했다. 타 서비스 대비 1/10 정도의 비용이라고 얘기하고 있고 로그 검색 및 알림 시스템도 갖추고 있다.(영어)

인프라 관련

  • Analysis of Today's CenturyLink/Level(3) Outage : 30일 4시간가량 발생한 CenturyLink/Level(3) 장애를 Cloudflare가 정리한 글이다. 이 장애는 사실 ISP 업체인 CenturyLink의 장애이므로 CenturyLink에서 내용을 공개해야 하지만 초반에 Cloudflare의 장애로 알려져서 Cloudflare가 자신들이 본 상황만으로 장애를 정리했다. UTC 기준 10:03에 CenturyLink에 문제가 발생해서 522 오류가 발생했는데 Cloudflare 시스템은 자동으로 CenturyLink를 다른 ISP로 라우팅해서 5분 이내에 문제는 해결했지만 CenturyLink 외 다른 ISP를 이용할 수 없는 고객 등 일부 트래픽은 14시 30분 CenturyLink가 문제를 해결할 때까지 계속 장애를 겪었다.(영어)
  • Prometheus와 Python GC 모듈을 이용해 동작 중인 애플리케이션의 힙 사용량 측정해 본 이야기 : Python 애플리케이션에서 메모리 누수를 모니터링하기 위해 Heap을 추적하는 heapsy라는 모듈을 만들어서 간단한 Flask 애플리케이션으로 메모리 누수를 Prometheus로 추적하는 과정을 설명하고 있다.(한국어)
  • Logging in Kubernetes: EFK vs PLG Stack : Kubernetes에서 로깅에 이용할 수 있는 EFK(Elastic search, FluentD, Kibana) 스택과 PLG(Promtail, Loki, Grafana) 스택을 비교한 글이다. Loki에 더 우호적으로 쓰인 느낌이 있지만 각 스택의 특징을 정리하고 질의 언어, 확장성, 비용 면에서 두 스택을 비교하고 있다.(영어)
  • 10 most common mistakes using kubernetes : Kubernetes를 사용할 때 주의해야 할 점을 정리한 글이고 제목과 달리 10가지 실수를 정확히 꼬집어서 얘기하고 있진 않다. 리소스의 requests, limits을 어떻게 설정해야 하는지 livenessreadiness를 왜 둘 다 지정하는 게 좋은지 노드를 스케일 인/아웃 할 때 무슨 문제가 있는지 등이 나와 있고 PodDisruptionBudget, externalTrafficPolicy를 어떻게 이용하면 되는지 나와 있다.(영어)
  • Announcing the Contributor Website : Kubernetes 컨트리뷰터들을 위한 웹사이트가 공개되었다. 이 페이지에서는 Kubernetes에 기여하는데 필요한 기여 방법, Pull Request 프로세스, GitHub 워크플로우 등 Kubernetes의 개발 가이드라인과 정책들이 나와 있다.(영어)
  • 그라파나(Grafana)란? : Grafana가 Datadog과 어떤 부분이 다르고 직접 설치해서 사용하는 오픈소스 버전 외에 그라파나 랩에서 제공하는 그라파나 클라우드와 그라파나 엔터프라이즈에서 어떤 기능을 제공하는지를 설명하고 있다. 세부 설정 및 동작보다는 간단히 제품을 소개하는 글이고 마지막에는 Docker로 직접 실행해서 사용하는 방법을 보여주고 있다.(한국어)
  • Introducing the AWS Controllers for Kubernetes (ACK) : AWS에서 Kubernetes 내에서 AWS 리소스를 정의하고 사용할 수 있는 ACK를 오픈소스로 공개했다.(영어)

볼만한 링크

  • Laying the foundation for Rust's future : Mozilla의 최근 해고 발표에 Rust 프로젝트에서 활발하게 활동하는 사람들도 포함되었기 때문에 Rust 커뮤니티에 영향을 줄 수밖에 없는 상황이 되었는데 Rust 코어팀과 Mozilla가 Rust 재단을 만들기로 합의했다고 한다. 올해 말까지 재단을 만들어서 운영하는 것이 목표이고 Rust의 트레이트마크나 도메인 등을 재단에 넘기는 작업을 할 예정이라고 한다.(영어)
  • '글'이 디자인이 될 때 : 도도 포인트를 만드는 spoqa에서 UX Writing을 개선한 부분을 설명한 글이다. 도도 포인트에서 단어, 문장을 사용자가 더 잘 이해하고 긍정적으로 받아들일 수 있도록 가이드를 만들어서 섞어서 사용하는 단어를 정리하고 숫자와 기호의 표기 방법과 문구의 주어와 톤을 정리했다고 한다.(한국어)
  • 소프트웨어 학습 태도 : 개발을 공부하는 방법을 다음 7가지로 정리한 글이다. 특정 기술을 학습하는 방법보다 더 광범위하게 어떤 학습 태도로 개발을 공부하는 게 좋은지 정리해 놓은 글로 공감되는 글이다.(한국어)

    1. 내가 걷는 속력과 방향을 인지하자.
    2. 익숙한 것을 내려놓고, 낯선 방식으로 해결하자.
    3. 개구리를 해부하지 말고, 직접 만들어봐라.
    4. 자존심을 버리고, 자존감을 키우자.
    5. 결과만 보기보다는 과정을 보자.
    6. 실수를 반복하면서 적어도 하나씩 개선하라.
    7. 스스로 여러 가지 답을 찾고, 남에게 공유하라.
  • 1.1.1.1 BETA DESKTOP RELEASE : Cloudflare의 1.1.1.1 WARP의 macOS, Windows 데스크톱 앱이 베타로 공개되었다.(영어)
  • Congratulations for reaching a million, Gordon Linoff! : Gordon Linoff라는 Stack Overflow 사용자가 71,839개의 답변을 달면서 백만 레퓨테이션을 넘었다. 첫 백만 레퓨테이션을 얻은 사람은 Jon Skeet인데 백만클럽(?) 합류를 환영하는 답변을 달았다.(영어)

IT 업계 뉴스

프로젝트

  • ts-migrate : Airbnb에서 오픈소스로 공개한 도구로 JavaScript로 된 코드를 TypeScript로 마이그레이션 해준다.
  • theheadless.dev : Puppeteer와 Playwright를 학습할 수 있는 사이트.
  • orogene : JavaScript 패키지 매니저.
  • heroicons : tailwindcss 만든 사람들이 만든 무료 SVG 아이콘으로 200여 개의 아이콘을 제공하고 있다.
  • WHATS UP : Swagger 관리 도구.

버전 업데이트

2020/09/01 03:09 2020/09/01 03:09