Slack 명령에 대한 또 다른 구현

3078 단어 apidevopspython
우리는 팀 내 커뮤니케이션을 위해 슬랙을 사용하고 있습니다. Slack 슬래시 명령을 사용하여 요구 사항에 따라 다른 서버에서 배포를 트리거하는 것과 같은 일반적인 일상 작업도 처리합니다. 오랫동안 이것이 우리의 주요 사용 사례로 남아 있었기 때문에 이 작업을 처리하는 단일 AWS Lambda 함수가 있었지만 성장하는 팀과 비즈니스와 함께 이러한 방식으로 다른 여러 작업을 처리해야 할 필요성을 느꼈습니다. 따라서 우리는 서로 다른 작업을 처리하는 몇 가지 람다 함수를 더 만들었지만 모든 람다가 별도로 유지 관리되기 때문에 서로 다른 람다 함수 간의 동작이 일관되지 않았습니다.

일반적인 생각



우리는 모든 슬래시 명령 요구 사항을 처리하는 데만 사용할 단일 람다 함수를 만들기로 결정했습니다. 명령은 일반 셸 명령과 유사한 구조를 따릅니다. 몇 가지 예는 다음과 같습니다.


명령
설명


돕다
사용법과 함께 모든 슬래시 명령을 나열하십시오.

배치를 돕다
필요한 모든 옵션 및 플래그를 포함하여 배포 명령에 대한 도움말 텍스트를 나열합니다.

전개하다
특정 클라이언트에 배포


slack 슬래시 명령의 몇 가지 예는 다음과 같습니다(슬래시 명령이/example이라고 가정).

/example help
/example help deploy
/example help deploy --client test-client --branch master


매우 간단한 구성을 사용하여 명령을 실행할 수 있는 사용자와 명령을 실행할 수 있는 채널을 제한할 수 있습니다.

{
    "command": "deploy"
    "users": [
        "example.user"
    ],
    "channels": [
        "channel_id"
    ]
}


구현



우리는 오픈 소스 커뮤니티의 몇 가지 유용한 패키지의 도움을 받아 Python에서 이 솔루션을 구현했습니다. 이러한 패키지 중 일부는

  • Fast Api : API 구현용

  • Mangum : Aws Lambda 및 Api 게이트웨이와 FastApi의 통합용

  • Python Jenkins : 배포를 처리하는 Jenkins 서버와 상호 작용하는 경우

  • Argparse : 인수 구문 분석 처리용

  • 구현 방식은 다음과 같습니다.
  • 사용자가 슬랙을 통해 명령을 보냅니다
  • .

  • Lambda 함수 확인
  • 명령이 존재하는 경우
  • 사용자가 명령을 실행할 수 있는 경우
  • 지정된 채널에서 명령 실행이 허용된 경우
  • 명령에 모든 필수 매개변수가 있는 경우


  • 그리고 적절하게 반응한다
  • 명령을 실행하고 슬랙 채널로 응답을 다시 보냅니다
  • .
  • 장기 실행 명령을 Ecs 컨테이너로 오프로드(예: 데이터베이스 백업 또는 복원)

  • 이 솔루션의 일반적인 아키텍처는 다음과 같습니다.



    이를 통해 새로운 슬랙 명령을 정말 빠르게 구현할 수 있습니다. 모든 오류 처리는 서로 다른 명령에서 유사하므로 모든 새 명령에 대해 개별적으로 오류를 처리할 필요가 없습니다.

    좋은 웹페이지 즐겨찾기