기술 회사에서 Slack을 사용하여 유연한 백그라운드 도구 만들기

SaaS 제품에서 작업할 때 사용자를 돕거나 디버깅을 돕는 관리 조치가 필요할 때가 있습니다.어떤 것들은 한 손이 필요하거나, 재판에서 일주일 더 머물려고 하는 것일 수도 있다.만약 Django와 같은 도구를 사용한다면, 모델 정의에 따라 내장된 관리 UI를 얻을 수 있습니다. 기본적으로 좋은 도구를 사용할 수 있습니다.비록 접근 흐름을 꼼꼼히 설계해야 하지만, 그렇지 않으면 공격 방향이 될 수 있습니다.
그러나 만약 당신이 '많은 라이브러리를 통합하고 우리가 필요로 하는 것을 구축하자' 는 맞춤형 방식으로 프로젝트를 구축하고 있다면, 당신은 데이터베이스의 원시 조회 언어 인터페이스만 가지고 있을 뿐만 아니라, 평범하지 않은 조회를 지원하는 데이터베이스를 충분히 선택했을 때만 가지고 있을 것이다.
그러나 장기적으로 보면 대부분의 개발자들이 알고 있는 바와 같이prod에서 SQL 조회를 실행하는 것은 진정한 확장 가능하거나 안전한 방법이 아니기 때문에 의외의 데이터 손상을 피하기 위해 대량의 조율, 소통과 감독이 필요하다.또한 소수의 특정 개인에 대한 접근을 제한하고 민감한 데이터에 대한 접근을 관리해야 합니다.
또한 SQL 데이터베이스 이외의 다른 종속성도 있을 수 있습니다.그리고 모든 타사 서비스를 관리하려면 여러 관리 UI를 우회하여 모든 것을 더욱 복잡하고 실수하기 쉽도록 해야 합니다.

명백히 알 수 있었어™ 솔루션


이 용례를 해결하기 위한 맞춤형 도구인 WYSIWYG 백엔드 도구가 한 세트 있다.이 도구 중 하나를 사용하면 아래 SQL 쿼리를 포함하는 대화 상자를 쉽게 만들고 데이터베이스에 직접 연결할 수 있습니다.공구에 따라 비기술자가 사용할 수도 있다.
불행하게도, 이러한 도구들도 일련의 문제를 가져왔다. 주로 방문 관리이다. 사람에 대한 것이든 도구 자체에 대한 것이든.클라우드 기반의 위탁 관리 도구를 사용할 수 있지만, 그 다음에 내부 생산 데이터베이스에 대한 임의의 조회 접근 권한을 제공해야 합니다.이것은 통상적으로 일리가 있지만, 이것은 반드시 고려해야 할 안전 요소이다.또한 자체 관리형 오픈 소스 툴을 사용할 수도 있지만 이러한 툴은 다음과 같은 다양한 이점을 제공합니다.
  • 너는 반드시 스스로 그들을 접대하고 너의 귀중한 시간을 낭비해야 한다.
  • 그들은 당신의 생산 데이터베이스에 접근해야 하고 당신의 조직의 인원도 이 데이터베이스에 접근해야 한다.그래서 공개적으로 방문하게 하거나, 보안을 믿게 하거나, 내부에서 방문하게 하고, 그들을 사용해야 하는 모든 사람들에게 제한된 내부 네트워크 접근을 설정하도록 해라.
  • 도구 자체의 액세스 관리
  • 그 외에 흔히 볼 수 있는 단점은 일상적인 업무에서 반드시 사용해야 할 또 다른 도구라는 것이다.일반적으로 타사 서비스가 아닌 SQL 데이터베이스에 최적화되어 있습니다.
    클라우드/개원 불일치 쌍방의 각종 해결 방안을 비교한 후에 우리는 이 두 가지 방안 중 어느 것도 좋아하지 않기로 결정했다. 왜냐하면 이 두 가지 방안은 일정 시간 동안 전체 계획을 방해하기 때문이다.
    그리고 저희가 아이디어가 하나 있는데... 가장 유행하는 DevOps 관리 도구는 무엇입니까?당연하지!나는 약간 농담을 했지만, 차토프스 추세의 중요성은 부인할 수 없다.이런 상황에서 그것은 확실히 우리의 모든 문제를 해결할 수 있을 것 같다.

    왜 느슨해졌어?


    게으름이 위대한 데는 몇 가지 이유가 있다.
  • 이것은 텍스트 인터페이스로 거의 단말기이기 때문에 단말기 체험에서 대량의 사용자 체험 지식을 옮길 수 있다.개발자들은 항상 텍스트 인터페이스를 즐겨 사용한다.
  • 유휴 채널에 대한 액세스를 관리하므로 선택한 채널에서만 도구를 사용하여 백업할 수 있습니다.이렇게 하면 도구에 대한 추가 접근 관리를 구축할 필요가 없습니다.
  • 사용자 체험을 잘 설계하면 비기술 사용자가 쉽게 사용할 수 있다.
  • 실행된 모든 명령에 대한 공용 감사 로그 - 채널 메시지 기록을 자동으로 보유합니다.
  • 슬랙을 사용했습니다.
  • 그것도 단점이 있다.
  • 슬랙이 다운되었을 때 (최근 이 경우는 드물지 않습니다) 백오피스 도구에 접근할 수 없습니다.그러나 이것은 상관없습니다. 다른 방문 채널을 통해 가장 중요한 유지보수 명령을 사용할 수 있다면.
  • 이제 느슨한 기술 디테일을 살펴보자.이런 항목에 대해서는 slash 명령이나 slackbot을 사용할 수 있습니다.슬래시 명령은 구조적이지만 한계가 있다는 것이 포인트다.다른 한편, 슬랙봇스는 일반 사용자처럼 채널과 상호작용을 하기 때문에 유연성은 무한하지만, 더 많은 일을 해야 한다.가능한 한 우호적이고 신기한 체험을 제공하기 위해 우리는 슬랙봇 방법을 채택했다.
    그래서 백스테이지 로봇이 탄생했는데..

    슬랙봇 만들기


    내부에서, 우리는 이미 응용 프로그램 이벤트를 위해 이벤트 처리 시스템, 즉 GitHub 전송 알림을 준비했다.실제로 우리는 Slack integration까지 있기 때문에 복사 접착 구동 개발을 할 수 있는 충분한 기회가 있다.
    하지만 사실은 간단하다.느슨한 웹훅을 처리하기 위해 AWS API 인터페이스가 있습니다. 이벤트를 SQS 대기열에 놓고 모든 관련 생산 시스템에 접근할 수 있는 프로세서가 모든 메시지를 처리하고 응답할 수 있습니다.

    slackbot이 기존의 이벤트 처리 프레임워크를 사용하는 또 다른 장점은 SQL 데이터베이스에 접근할 수 있을 뿐만 아니라 우리가 사용하는 모든 제3자 제품, 예를 들어 각종 AWS 제품도 접근할 수 있다는 것이다.

    라우터 구조


    모든 명령은 메시지 모드로 등록된 다음 파라미터 포획 그룹을 가진 정규 표현식으로 변환합니다.다음은 프로세서가 있는 명령을 지정하는 예제 코드 블록입니다.
    {
      Command:     "set <subdomain> trial remaining to <number> days",
      Description: "Set account to be on an Enterprise trial for a specified number of days from now.",
      Channels:    []string{s.BackofficeChannelID},
      Handler: func(ctx *Context, event slackevents.EventsAPIInnerEvent, params map[string]string) error {
         ctx.sendSimpleResponse("Setting %s trial remaining to %s days.", params[“subdomain”], params[“number”])
         // ...
      },
    },
    
    처음에, 우리는 그것을 복잡한 trie 기반의 공유기로 만들 계획이었으나, 이것은 일련의 정규 표현식을 보고 그것들과 일치하려고 시도하는 것보다 훨씬 복잡하다.이렇게 큰 데이터와 이렇게 많은 명령이 있으니 더 이상 최적화할 필요가 없다.
    명령을 추가하는 방법은 매우 간단하며, 현재 채널에서 사용할 수 있는 모든 명령을 동적으로 열거하고 설명하는 자동 생성 @Backoffice Bot help 의 장점도 있다.

    승인 프로세스


    이러한 절차에 대해, 당신은 일반적으로 어떤 명령들이 비준을 필요로 하기를 희망합니다.우리는 이완 반응을 통해 이 점을 실현한다.
    슬랙봇은 먼저 무엇을 하고 싶은지 자세히 설명한 다음 승인을 요청할 것이다.호출자와 미리 정의된 수량을 필요로 하는 다른 사람의 비준은 수중의 명령의 파괴성에 달려 있다.

    명령을 반복하지 않기 위해서, 우리는 처리된 메시지를 느슨하게 표시합니다. 그러면 외부 데이터베이스를 사용할 필요가 없습니다.위의 그림에서 이 점을 볼 수 있고, 루트 메시지에서Spacelift 로고의 반응을 볼 수 있습니다.

    액세스 제어


    또 다른 요구는 사람마다 다른 명령을 집행하도록 허락하는 것이다.우리의 예에서 일부 명령은 비기술자를 위해 구축된 것이다. 예를 들어 계정 확장을 시험적으로 사용하는 것이다.진단 정보를 표시하거나 순환 작업자 풀을 표시하는 등 기술자를 위한 명령도 있습니다.
    우리는 채널 제한을 기반으로 사용 가능한 명령을 통해 이 점을 실현했다.Dell에는 비엔지니어를 위한 #백그라운드 채널과 기술자를 위한 #백그라운드 개발자 채널이 있습니다.그것들은 개인적인 것이기 때문에 우리는 특정한 사람을 초청하여 관련 채널에 방문하도록 함으로써 방문 등급을 제한할 수 있다.
    도움말 메시지는 이 점을 고려하여 현재 채널에서 사용할 수 있는 명령만 표시합니다.

    그것은 실천에서 어떻게 일을 하는가


    우리의 새로운 백오피스 로봇을 사용하는 모든 사람들이 곧 그것을 사랑하게 되었다.새 명령을 추가하는 과정은 표준 제품 변경을 생산에 도입하는 과정과 마찬가지로 모든 개발자가 이 과정을 잘 알고 있다.유지 보수가 필요한 기타 도구, 워크플로우 또는 프로세스가 없습니다.만약 당신이 비슷한 도전을 해결해야 한다는 것을 발견한다면, 우리는 절대로 이런 방법을 추천합니다.

    (원문은 Spacelift에 발표됨)

    좋은 웹페이지 즐겨찾기