GCP에서 ASF를 사용해 스팀 농사를 지어보자!

과거에 한 번 다른 분이 쓴 글을 보고1 이걸 최근에 관심을 가지고 열심히 공부하던 Docker의 Container를 응용해서 단순화 해보자는 생각을 하게 되었습니다. 오랜만에 생각이 들자마자 바로 시도해서 성공한 결과를 글로 남겨 봅니다.

시작하기 전에…

구글 클라우드 플랫폼(Google Cloud Platform, 이하 GCP)은 AWS, MS Azuer와 마찬가지로 클라우드 컴퓨팅 서비스를 제공합니다. 구글의 가장 큰 장점 중에 하나는 평생 무료로 사용 가능한 가상 머신(Virtual Machine, 이하 VM)을 제공받을 수 있다는 것입니다. 사양은 0.2vCPU + 0.6GB RAM 정도이지만 이정도만 해도 제 블로그를 올릴수도 있는 사양이더군요. 그렇지만 저는 이미 블로그를 On Premises에서 사용하고 있으므로, GCP의 무료 혜택은 ASF로 사용해보도록 하겠습니다.

ASF(Archi Steam Farm2)는 스팀 게임을 실행하면 일정 시간이 지난 후에 하나씩 제공하는 트레이딩 카드를 얻기 위한 툴 입니다. 게임이 한, 두 개인 사람은 전혀 필요가 없지만 게임이 1,000 단위가 넘어가면 일일히 모든 게임을 해보는 것은 매우 어렵기 때문에 이러한 툴을 통해서 트레이딩 카드를 말 그대로 농사짓는 것입니다. 이처럼 농사를 짓기 위해서는 ASF를 항상 틀어놔야 한다는 약간의 귀찮은 점이 있습니다. (설정이 매우 복잡하다는 것도…) 이걸 GCP에 올리면 신경쓰지 않아도 언제나 자동으로 농사를 지을테니 매우 편리하겠다는 생각이 저절로 떠올랐지요. 그러면 이제 과정을 알아보도록 하겠습니다.

GCP 가입 및 설정하기

먼저 GCP에 가입합니다.3 구글 계정이 있으면 그걸로 로그인하시면 됩니다. 아마도 [무료로 사용해 보기]를 누르시면 될 것 같습니다.

첫 가입때는 청구지 주소 및 결제 프로필 설정으로 좀 복잡할 수 있습니다. 특히 카드를 등록해야 하는데, 카드는 등록 하더라도 무료 제공인 $300을 초과하지 않으면 결제되지 않습니다. 특히 지금 시도하려는 것은 무료 제공되는 서버이기 때문에 애초에 결제될 일 자체가 없습니다. 다만 중간 과정에서 실수를 하게 되면 요금이 발생할 수 있으므로 주의하시기 바랍니다. 구체적인 가입 방법은 건너뛰도록 하겠습니다.4

프로젝트 콘솔 화면은 위와 같이 나타납니다. 초기에는 프로젝트가 없어서 New Project를 만들어야 할 수 있습니다. 이제 좌측 메뉴에서 Compute Engine > VM Instances 로 들어갑니다.

제 ASF 가상 머신이 열일하고 있군요. 새로 만들기 위해서 상단 바의 CREATE INSTANCE를 눌러 줍니다.

여기서부터 매우 중요합니다. 무료 VM Instance는 미국 내 특정 지역에 한해서만 제공됩니다. 제일 먼저, 이름은 중복되지 않고 구별하기 쉬운 고유한 값을 적습니다. 그리고 아래 내용을 하나하나 채워 넣습니다.

  • Region: us-west1 (Oregon)
  • Zone: 건드리지 않습니다.
  • Machine Type: micro (1 shared vCPU)
  • Container: 체크하세요.
  • Container Image: justarchi/archisteamfarm
  • Restart Policy: 건드리지 않습니다.
  • Run as Previleged: 건드리지 않습니다.
  • Allocate a buffer for STDIN: 체크하세요.
  • Allocate a pseudo-TTY: 체크하세요.
  • Command: 건드리지 않습니다.
  • Command Arguments: 건드리지 않습니다.
  • Environmental Variables: 건드리지 않습니다.
  • Volume Mounts: Add volume을 눌러줍니다.
  • Volume Type: Directory
  • Mount Path: /app/config
  • Host Path: /home/<내 아이디>/ASF/config
  • Mode: Read/Write
  • 이하, 건드리지 않습니다.

여기서 <내 아이디> 부분은 이메일 주소가 abc@gmail.com인 경우에는 abc를 입력하면 됩니다. 지메일이 아닌 경우는 확실하지 않은데, 이걸 잘못 입력한다고 큰 문제가 생기진 않으니까 걱정 말고 입력합니다. 또한, 매달 $4.28 지불한다고 나오지만 실제로는 제가 빨간 박스로 표기한 내용에 의해 매달 744시간의 사용에 대해서는 과금하지 않는다고 나옵니다. 744시간은 31일 내내 사용하는 것과 동일한 시간입니다. 즉, 무료라는 뜻입니다.

이제, 하단의 Create 버튼을 눌러 VM을 만들어 줍니다. 만들고 나서 2-3분 기다려 줍니다. VM 자체에서도 셋팅하는데 시간이 걸립니다. VM 생성이 완료되었으면 앞서 제가 올려드렸던 사진과 같이 VM 목록에서 방금 만든 VM을 볼 수 있습니다.

ASF 설정하기

GCP 환경은 앞선 설정으로 구성이 완료되었습니다. 이제부터 할 일은 방금 만든 VM에서 ASF 설정을 완료해주어야 합니다. 이 부분이 약간 복잡할 수 있지만 차근차근 진행해보도록 하겠습니다.

먼저, VM에 접속해야 합니다. 위의 VM 목록 우측 하단의 ssh를 눌러서 서버로 ssh 접속을 시작합니다. 그러면 잠깐 뒤에 아래와 같은 화면이 나타나게 됩니다.

기본적으로 VM은 리눅스 기반이므로 리눅스에 익숙한 사람이라면 금방 이것저것 입력해볼 수 있습니다. 가장 먼저 해야할 일은 ASF의 설정 파일을 만드는 일입니다. 앞서 입력했던 Host Path로 가보도록 하겠습니다.

cd /home/<내 아이디>/ASF/config

ls 명령어를 보내도 비어있는 폴더이므로 아무것도 없을 겁니다. 여기에 전체 설정과 개별 설정 두 파일을 만들어야 합니다. 혹은 기존에 ASF를 사용하시던 분들은 아래 과정에서 본인들의 json 파일 내용을 복사 붙여넣기 하시면 됩니다.

아래 명령어를 입력해서 전체 설정 파일을 생성합니다.

sudoedit ASF.json

Insert 키를 cli 화면에 한 번 눌러준 다음에 아래의 내용을 복사, 붙여넣기 합니다. Insert는 기본적으로 vi 에디터에서 내용을 입력하기 위해 눌러주는 것입니다.5

{
	"AutoRestart": true,
	"Blacklist": [],
	"CommandPrefix": "!",
	"ConfirmationsLimiterDelay": 10,
	"ConnectionTimeout": 60,
	"CurrentCulture": null,
	"Debug": false,
	"FarmingDelay": 15,
	"GiftsLimiterDelay": 1,
	"Headless": false,
	"IdleFarmingPeriod": 8,
	"InventoryLimiterDelay": 3,
	"IPC": false,
	"IPCPassword": null,
	"LoginLimiterDelay": 10,
	"MaxFarmingTime": 10,
	"MaxTradeHoldDuration": 15,
	"OptimizationMode": 0,
	"Statistics": true,
	"SteamMessagePrefix": "/me ",
	"SteamOwnerID": 0,
	"SteamProtocols": 7,
	"UpdateChannel": 1,
	"UpdatePeriod": 24,
	"WebLimiterDelay": 300,
	"WebProxy": null,
	"WebProxyPassword": null,
	"WebProxyUsername": null
}

다행히도 전체 설정은 꼭 바꿔야 할 부분은 없습니다. 다만 필요에 의해 옵션 수치는 변경해야 할 것입니다. 전체 설정을 저장하기 위해서 ESC를 한 번 누르고 :wq를 입력한 다음 엔터 눌러 종료합니다.

이제, 스팀에서 농사를 지을 본인의 아이디, <bot-id>에 해당하는 json파일을 생성해야 합니다. <bot-id>는 숫자가 될 수도 있고 영어가 될 수도 있고, 단순하게는 본인의 스팀 이름이 될 수도 있습니다. 앞서 전체 설정과 마찬가지로 명령어를 입력하여 설정 파일을 생성합니다.

sudoedit <bot-id>.json

똑같이, Insert를 한 번 누르고 아래 내용을 복사, 붙여넣기 합니다.

{
	"AcceptGifts": false,
	"AutoSteamSaleEvent": false,
	"BotBehaviour": 0,
	"CustomGamePlayedWhileFarming": null,
	"CustomGamePlayedWhileIdle": null,
	"Enabled": false,
	"FarmingOrders": [],
	"GamesPlayedWhileIdle": [],
	"HoursUntilCardDrops": 3,
	"IdlePriorityQueueOnly": false,
	"IdleRefundableGames": true,
	"LootableTypes": [1, 3, 5],
	"MatchableTypes": [5],
	"OnlineStatus": 1,
	"PasswordFormat": 0,
	"Paused": false,
	"RedeemingPreferences": 0,
	"SendOnFarmingFinished": false,
	"SendTradePeriod": 0,
	"ShutdownOnFarmingFinished": false,
	"SteamLogin": null,
	"SteamMasterClanID": 0,
	"SteamParentalCode": null,
	"SteamPassword": null,
	"SteamTradeToken": null,
	"SteamUserPermissions": {},
	"TradingPreferences": 0,
	"TransferableTypes": [1, 3, 5],
	"UseLoginKeys": true
}

필요에 따라 위의 내용은 반드시 수정해야 할 수 있습니다. 설정을 저장하기 위해서 ESC를 한 번 누르고 :wq를 입력한 다음 엔터 눌러 종료합니다.

ASF 사용하기

이제 설정값은 모두 입력되었습니다. 그러면 ASF가 실행중인지는 어떻게 알까요? Docker 기반이기 때문에 명령어를 통해서 Container가 실행중인지 알 수 있습니다. 아래 명령어를 입력해보세요.

docker ps

그러면 아래와 같은 결과가 나올 것입니다.

CONTAINER ID        IMAGE                                                                COMMAND                  CREATED             STATUS              PORTS               NAMES
6188b4931bf3        gcr.io/stackdriver-agents/stackdriver-logging-agent:0.2-1.5.33-1-1   "/entrypoint.sh /usr…"   6 hours ago         Up 6 hours                              stackdriver-logging-agent
f994df3c5f7c        justarchi/archisteamfarm                                             "./ArchiSteamFarm-Se…"   6 hours ago         Up 4 hours                              klt-lamanus-asf-dwhn

여기서 Image가 justarchi/archisteamfarm 인 Container의 ID 값은 f994…인 것을 알 수 있습니다. 다른 녀석은 6188… 이네요. 그러면 편의상 ASF의 Container는 f9라고 입력해도 6188…인 것과는 구별됩니다.

이제 ASF로 접속을 해보겠습니다.

docker attach f9

위 명령어를 입력하면 아마도? 아무런 반응이 없을 겁니다. 이미 ASF가 실행중이기 때문에 출력 메시지가 추가로 나오지 않으면 아무 반응이 없는 것처럼 보일 수 있습니다. 컨트롤 + C를 눌러 화면을 나온 다음에 바로 다시 위의 명령어로 접속해봅니다. 그러면 출력물이 나타나는 것을 알 수 있습니다.

이제는 아이디를 입력하고, 비밀번호를 입력하고 로그인하는 절차만 남았습니다. 여기까지의 과정에서 ASF 설정에 대해서는 자세히 언급하지 않았습니다. 본 글을 따라하기 이전에 반드시 본인의 컴퓨터에서 ASF 사용법을 숙지하고 진행하셨으면 좋겠습니다.

마치며…

오늘은 이렇게 ASF를 GCP의 VM에 올려서 구동하는 방법에 대해 알아보았습니다. 이렇게 진행하여 24/7, 365일 내내 가동하여도 무료인 훌룡한 파밍 머신을 만들어 버렸습니다. 하라는 스팀 게임은 안하고…

이 단계에서 조금 더 나아가면 ASF의 IPC 기능으로 웹 기반 ASF GUI를 사용할 수도 있습니다. 이미 셋팅은 되었지만 보안 문제가 있어서… 함부로 권해드리기가 참 어렵습니다. 기회가 된다면 다음 글을 통해서 GUI 이용법을 알아보도록 하겠습니다.

그나저나, CPU 사용량이 10%밖에 안되는군요.