서버관리를 자동화하기 위해 이전 부터 python 2.7 기반의 fabric 을 소개해왔다. 이번에는 Restful api를 만드는 프로젝트를 소개할려고 한다. 이전부터 봐왔던 github 프로젝트중에 fabric_remote 를 소개하고자한다.
fabric remote는 인증은 패스워드 기반의 정적인 간단한 인증체계를 이고, 웹서비스를 flask로 지원하고 내부적으로 fabric을 호출하여 fabfile을 지원하는데 다중실행이 가능하도록 되어있다. fabfile자체가 멀티호스트를 지원함으로 fabric_remote 하나로 여러 서버를 한꺼번에 제어할수 있다. 따라서 내부적으로 업무용도로 사용할때는 한번더 보안정책을 고려하길 바란다.
해당 프로젝트에 Dockrefile이 있었다.
# cat Dockerfile
FROM python:2.7
RUN pip install pyyaml requests
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN python setup.py install
VOLUME ["/data"]
ENV FABFILE_PATH "/data/fabfile.py"
CMD ["fabric-remote-server"]
EXPOSE 1234
fabric_remote를 설치하면 fabric-remote-server라는 명령어를 설치하고 1234번 포트를 열도록한다.
/data 라는 디렉토리를 볼륨으로 서버와 컨테이너와 공유한다.
/data/fabfile.py라는 파일을 도커와 공유해서 실행하려나보다.
Quick Start
$ pip install fabric_remote
$ fabric-remote-server --fabfile-path PATH/TO/YOUR/FABFILE.py
* Running on http://0.0.0.0:1234/
now you can make HTTP requests that will run your Fabric tasks!
$ curl http://localhost:1234/executions -X POST --user admin:secret -H Content-Type:application/json -d "[{\"task\": \"host_type\", \"args\": [], \"kwargs\": {}}]"
{
"output": "/executions/zDUxHCMX5SBR4C4Xu9PDdB/output",
"results": "/executions/zDUxHCMX5SBR4C4Xu9PDdB/results"
}
curl로 결과를 실행하면 파일을 만들어 결과를 저장한다.
fabric이 여러 서버에 동시 접속해 실행결과를 받아오기 때문에 접속지연시간을 고려해서 바로 결과를 출력하는 대신 파일에 저장하는 방식으로 처리한 것으로 보인다.
python 3.0 시대, 리눅스 커널 4.3 시대에 웬 구닥다리 같은 python 2.7 시대의 fabric만 다루냐고 말할지도 모르겠다. 그러나, 오래묵은 것일수록 더 많은 기능과 모듈이 존재한다. fabric대신에 invoke도 다루겠지만, 그래도 SE로써 python을 공부하는 친구에게 좋은 힌트가 될 것 같아 소개한다.
이 프로젝트 웹페이지는 아래와 같다.
https://github.com/kevin1024/fabric_remote