다양한 객체 관리

이 글은 Snowflake Advent Calendar 2020 21일째 글이다.
Snowflake 중심의 데이터에 더해 다양한 Snowflake 대상을 어떻게 관리하는지는 여전히 궁금하다.
이 기사에서는 스노우플래크를 실제로 도입할 때 논의/조사한 내용을 공유해 보려고 한다.
더 좋은 방법이 있으면 꼭 알려주세요:)

declative인가 imperative인가


SQL 작업은 Snowflake에서 모두 사용할 수 있습니다.
따라서 RDBMS 등과 마찬가지로 DevOps와 CI/CD를 가속화하기 위해 데이터베이스 교환 관리(DCM) 도구를 사용하는 것을 논의하는 것은 자연스럽다.
이러한 DCM 도구는 일반적으로 declative와 imperative가 존재하지만 현재 Snowflake의 주변 도구에는 declaitive에서 SQL을 기반으로 관리할 수 있는 도구가 존재하지 않는다.
또 임페라티브의 DCM 도구로 전체를 관리하는 스노우플레이크 대상을 직접 체험해보면 임페라티브의 관리에 적합하지 않은 것들이 있다는 인상도 있다.
구체적으로 사용자, 캐릭터, 권한 주변에 특히 이런 느낌을 주고, 의도하지 않은 상태가 되지 않도록 일람성을 유지하는 의미에서도 declaitive를 미리 관리해야 한다.
실제로 스노우플래크의 대상을 다음 그림과 같이 분류하고 조합에 따라 처리 방법을 바꾸자는 제안도 아래 글에서 나왔다.

https://medium.com/@jeremiahhansen/a-new-approach-to-database-change-management-with-snowflake-8e3f0fee281
그럼 각자 어떻게 관리하는지 살펴봅시다.

Users and Roles


SCIM은 Snowflak에서 활용할 수 있습니다.
https://docs.snowflake.com/en/user-guide/scim-intro.html
내가 속한 조직은 맞춤형 IdP를 선택할 수 있기 때문에 이 방면에서 같은 방법을 사용하고 싶다. 지금은 Terraform을 이용하여 관리하고 있다.
HCL에 SQL에서 관리할 수 있는 모든 것을 기술했지만, 회사 내에서는 declaitive를 원하는 대상이기 때문에 Terraform을 전면적으로 사용했다.
provider snowflake {
  alias    = "SECURITYADMIN"
  region   = "ap-northeast-1.aws"
  username = var.username
  account  = var.account
  password = var.password
  role     = "SECURITYADMIN"
}

resource snowflake_role sandbox_admin {
  provider = snowflake.SECURITYADMIN

  name = "SANDBOX_ADMIN"
  comment = "sandbox データベースの管理ロール"
}
실행할 때의 역할을 지정하기 위해 여러 개의provider를 준비하여alias를 설정하는 데 신경을 썼을 수 있습니다.
Terraform v0도 함께 제공됩니다.13 이상을 사용할 수 있다면 3rd-party의Terraform 제공자도 간단하게 처리할 수 있어 매우 편리하다.
  • 참조:
  • https://www.hashicorp.com/blog/automatic-installation-of-third-party-providers-with-terraform-0-13
  • https://github.com/chanzuckerberg/terraform-provider-snowflake#for-terraform-v013-users
  • Grants


    아니면 우리도 declaitive를 관리하고 싶은지.나는 현재 상황을 어떻게 해야 할지 고민 중이지만, 기존의 도구로 다음과 같은 내용을 발견했다.
  • Snowflake-Labs/snowflake-rbgm
  • gitlab-data/permifrost
  • 개발 자체의 후자가 비교적 활발하다.
    기능도 풍부하고 설정의 전망도 좋고 관리도 편리하기 때문에 개인은 후자를 사용하기를 희망한다.
    또는 User and Roles에서 Terraform을 이미 사용한 경우 Terraform으로 모두 완료할 수 있습니다.

    Other Database Objects


    대략적인 분류지만 나머지는 전부다.(좀 더 세분화할 수 있다...)
    이 그룹에 속하는 대상(상대적으로) imperative의 관리도 좋기 때문에 도구로 Snowflak이 대응하면 무엇이든 좋은 선택이 조금 더 많을까요?유명한 곳은 flyway와 liquibase 등이다.
    한편, 나 자신은 지금 시도하고 있다Snowflake-Labs/snowchange.
    스노우팩 공식은 아니지만 안에 있는 사람들이 지키고 있기 때문에 어느 정도 안도감이 있는 것도 이유 중 하나겠죠.
    It follows an Imperative-style approach to Database Change Management (DCM) and was inspired by the Flyway database migration tool.
    README에 적힌 것처럼 flyway와 같은 일반적인 도구와 비슷하고 가져오기 자체도 쉽다.이력서에 집행 이력서를 저장하는 경우가 많다.
    2021/01/27 추기: 지금도 논의 중입니다.

    끝말


    많은 도구를 도입하는 것이 그리 힘든 느낌은 아니지만, 적절히 지역별로 나눠 쓰면 운용 중 위험과 비용이 줄어들기 때문에 일정 기간 정보를 쫓아가며 개선할 수 있기를 기대한다.(사실 스키마, ridgepole, sqldef 같은 decractive, 그리고 Snowflake에 대응하는 도구...!)
    또 소개한 기사에서 여기서부터 Dataset Object라는 그룹으로 더 세분화한 점도 조사하고 싶다.
    그나저나 스노우플레이크는 일본에서 아직 정보가 적어 평소Reddit에 정보를 많이 수집하고 있다.관심 있으면 꼭 보세요.

    참고 자료

  • https://www.skeema.io/blog/2019/01/18/declarative/
  • https://www.snowflake.com/blog/embracing-agile-software-delivery-and-devops-with-snowflake/
  • https://medium.com/@jeremiahhansen/snowchange-a-database-change-management-tool-b9f0b786a7da
  • https://medium.com/@jeremiahhansen/a-new-approach-to-database-change-management-with-snowflake-8e3f0fee281

  • 좋은 웹페이지 즐겨찾기