[python] Fabric으로 서버 그룹 관리하기

이번 블로그 포스트에서는 Python의 Fabric 라이브러리를 사용하여 서버 그룹을 관리하는 방법에 대해 알아보겠습니다. Fabric은 SSH를 통해 리모트 서버를 관리할 수 있는 도구로, 서버 구성 변경, 배포 작업 등을 자동화할 수 있습니다.

Fabric 설치하기

먼저 Fabric을 설치해야 합니다. 다음 명령어를 사용하여 Fabric을 설치합니다:

pip install fabric

서버 그룹 정의하기

Fabric을 사용하여 서버 그룹을 관리하기 위해서는 먼저 서버 그룹을 정의해야 합니다. Fabric은 fabfile.py라는 파일을 사용하여 작업을 정의하고 실행합니다. fabfile.py 파일을 생성하고 다음과 같이 서버 그룹을 정의합니다:

from fabric import Connection, task

servers = {
    'web': ['web1.example.com', 'web2.example.com'],
    'db': ['db1.example.com', 'db2.example.com']
}

@task
def uptime(ctx, group):
    for host in servers[group]:
        conn = Connection(host)
        with conn:
            result = conn.run('uptime')
            print(f"{host}: {result.stdout.strip()}")

위 코드에서 servers 변수에는 서버 그룹의 이름과 해당 그룹에 속하는 서버 목록을 딕셔너리 형태로 정의합니다. uptime task는 특정 그룹에 속하는 모든 서버의 uptime을 출력하는 역할을 합니다.

서버 그룹 실행하기

이제 Fabric을 사용하여 서버 그룹을 실행해보겠습니다. 터미널에서 다음 명령어를 실행합니다:

fab -H username@host uptime:group=web

위 명령어를 실행하면 web 그룹에 속하는 서버의 uptime이 출력됩니다.

추가 작업 정의하기

Fabric을 사용하여 다양한 작업을 자동화할 수 있습니다. 예를 들어, 서버에 소스 코드를 배포하는 작업을 추가해보겠습니다. fabfile.py 파일에 다음 코드를 추가합니다:

@task
def deploy(ctx, group):
    for host in servers[group]:
        conn = Connection(host)
        with conn:
            conn.run('git pull')
            conn.run('restart_application')

위 코드에서 deploy task는 특정 그룹에 속하는 모든 서버에 대해 git pull 명령어와 restart_application 명령어를 실행합니다.

이제 터미널에서 다음 명령어를 실행하여 배포 작업을 실행해보세요:

fab -H username@host deploy:group=web

결론

Fabric을 사용하면 Python 스크립트를 통해 SSH를 통해 리모트 서버를 관리할 수 있습니다. 서버 그룹 정의, 작업 실행 등 다양한 작업을 자동화하여 서버 관리를 효율적으로 할 수 있습니다.

관련 참고 문서:

다음 포스트에서는 Fabric을 사용하여 실제로 서버 관리 작업을 자동화하는 예제에 대해 알아보겠습니다.