본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Machine CPU와 RAM 확장하기 (Scale Machine CPU and RAM)

원문 보기 위키 갱신

Fly Launch(fly deploy + fly.toml)로 관리되는 앱에서 전체 프로세스 그룹의 Machine 메모리와 CPU 설정을 확장할 수 있어요. 이 가이드에서는 fly.toml의 [[vm]] 설정과 flyctl의 fly scale 명령으로 Machine 크기를 조정하는 방법을 알려드릴게요.

출처: 문서

본문

Fly Launch(fly deploy + fly.toml)로 관리되는 앱에서 전체 프로세스 그룹의 Machine 메모리와 CPU 설정을 확장할 수 있어요. 프로세스 그룹을 정의하지 않았다면 명령과 설정이 앱의 모든 Machine(기본 app 프로세스 그룹)에 적용돼요.

앱이 크래시했더라도 확장할 수 있어요. Machine은 새 사양으로 재시작되지만, 앱을 재배포하면 `fly.toml`의 모든 VM 설정이 우선해요.

Machine 크기 설정 우선순위

  1. fly.toml의 [[vm]] 섹션: fly deploy와 fly scale count 명령은 앱의 fly.toml 파일에 있는 VM 크기 설정을 존중해요.
  2. 앱의 기존 Machine 크기: fly.toml에 VM 크기가 설정되지 않았다면 fly deploy는 기존 Machine을 변경하지 않고, fly scale은 기존 Machine을 사용해 새 Machine 크기를 추론해요.
  3. shared-cpu-1x 기본 Machine 크기: fly.toml에 VM 크기가 설정되지 않고, 크기를 추론할 기존 Machine도 없다면 기본 Machine 크기가 사용돼요.

앱의 VM 리소스 확인

여기 서로 다른 리전에서 실행되는 Machine 세 개가 있는 간단한 웹 앱이 있어요: 토론토에 두 개, 도쿄에 하나. 다른 프로세스가 없으므로 앱의 모든 Machine은 기본 프로세스 그룹인 app에 속해요.

fly status
App
  Name     = testrun                                        
  Owner    = personal                                   
  Hostname = testrun.fly.dev                                
  Image    = testrun:deployment-01GWZY7ZVJ2HNED4B0KZBPS3AQ  

Machines
PROCESS	ID            	VERSION	REGION	STATE  	ROLE	CHECKS	                  LAST UPDATED
app    	[17811943f031d8]	3     	yyz   	stopped	    1 total, 1 passing      	2024-02-07T15:34:57Z
app    	[328749d3c53958]	3     	yyz   	stopped	    1 total, 1 passing      	2024-01-23T19:39:50Z
app   	[908057ef21e487]	3     	nrt   	started	    1 total, 1 passing      	2024-01-23T19:39:51Z

fly scale show는 이 앱에서 fly deploy로 배포된 모든 Machine의 CPU와 RAM 설정을 보여줘요.

fly scale show
VM Resources for app: testrun

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS    
app     3       shared  1       256 MB  nrt,yyz(2)

이 Machine들은 단일 공유 vCPU와 256MB RAM으로 shared-cpu-1x 프리셋 규모로 실행되는 거예요.

fly.toml에 Machine 크기 설정 추가

fly.toml의 [[vm]] 섹션으로 기본 Machine VM 메모리와 CPU 설정을 지정할 수 있고, 이 설정은 fly deploy나 fly scale count 같은 명령을 실행할 때 우선권을 가져요.

이 예시는 shared-cpu-2x 프리셋과 2GB RAM을 지정하는 아주 간단한 설정이에요:

[[vm]]
  size = "shared-cpu-2x"
  memory = "2gb"

[[vm]] 섹션에 프로세스 그룹을 포함하지 않으면 설정이 앱의 모든 프로세스 그룹에 적용돼요. 특정 프로세스 그룹에 다른 CPU나 메모리 설정을 원하면 [[vm]] 섹션을 하나 더 추가하세요.

자세한 내용과 더 많은 설정은 fly.toml 레퍼런스의 The vm section을 확인하세요.

flyctl로 VM 메모리와 CPU 확장

fly scale 하위 명령을 사용해 모든 Machine에 VM 메모리와 CPU 설정을 적용하세요. fly scale vm은 프리셋 CPU/RAM 조합을 적용하고, fly scale memory는 프리셋의 RAM이 부족한 경우 RAM을 별도로 설정해요.

**중요:** `fly scale vm`이나 `fly scale memory`로 변경한 경우, 앱을 재배포하면 `fly.toml`의 VM 설정이 우선해요.

프리셋 CPU/RAM 조합 선택

사용 가능한 VM 크기 프리셋은 여러 개가 있어요. 유효한 명명된 프리셋 목록은 fly platform vm-sizes에서 확인하세요.

fly scale vm으로 다른 프리셋으로 확장하세요. 일반적으로 원하는 CPU 유형과 규모에 따라 명명된 VM "size"를 선택하면 되고, RAM은 별도로 늘릴 수 있어요.

fly scale vm shared-cpu-2x
Updating machine 148ed599c14189
  Waiting for 148ed599c14189 to become healthy (started, 1/1)
Machine 148ed599c14189 updated successfully!
Updating machine 32874400f35285
  Waiting for 32874400f35285 to become healthy (started, 1/1)
Machine 32874400f35285 updated successfully!
Updating machine 9080e6e1f94987
  Waiting for 9080e6e1f94987 to become healthy (started, 1/1)
Machine 9080e6e1f94987 updated successfully!
Scaled VM Type to 'shared-cpu-2x'
      CPU Cores: 2
         Memory: 512 MB

app 프로세스 그룹에 이 확장이 적용되었는지 확인하세요:

fly scale show   
VM Resources for app: testrun

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS    
app     3       shared  2       512 MB  nrt,yyz(2)

fly machine status <machine ID>로 개별 Machine의 설정이 이와 일치하는지 확인할 수도 있어요:

fly machine status 148ed599c14189
Machine ID: 148ed599c14189
Instance ID: 01GX6Q2WE04M85XTHGPYGJK4X6
State: started

VM
  ...                                       
  Process Group = app                                        
  CPU Kind      = shared                                     
  vCPUs         = 2                                          
  Memory        = 512                                        
  ...

좋아 보이네요!

RAM 추가

CPU 리소스는 만족스럽지만 메모리가 더 필요하다면 fly scale memory를 사용해 RAM을 늘리세요.

앱이 out-of-memory 오류로 크래시된다면 RAM을 늘리세요. Flyctl이 Machine을 재시작해서 새 설정을 적용해요. 이렇게 메모리를 확장하면 원하는 만큼 더 많거나 적은 RAM으로 앱을 테스트해 볼 수 있고, 필요하다면 나중에 fly.toml에 메모리를 더 영구적으로 설정할 수 있어요.

fly scale memory 4096
Updating machine 32874400f35285
  Waiting for 32874400f35285 to become healthy (started, 1/1)
Machine 32874400f35285 updated successfully!
Updating machine 148ed599c14189
  Waiting for 148ed599c14189 to become healthy (started, 1/1)
Machine 148ed599c14189 updated successfully!
Updating machine 9080e6e1f94987
  Waiting for 9080e6e1f94987 to become healthy (started, 1/1)
Machine 9080e6e1f94987 updated successfully!
Scaled VM Type to 'shared-cpu-2x'
      CPU Cores: 2
         Memory: 4096 MB
fly scale show
VM Resources for app: testrun

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS    
app     3       shared  2       4096 MB nrt,yyz(2)

fly scale memory로 호환되지 않는 CPU/RAM 조합을 설정하려고 하면 flyctl이 알려줘요. 허용되는 CPU/RAM 조합과 가격 목록은 Pricing 페이지에서 확인할 수 있어요.

프로세스 그룹별 확장

fly scale vm이나 fly scale memory와 함께 --process-group 옵션을 사용해 확장할 프로세스 그룹을 지정하세요.

**참고**: `--process-group` 옵션은 더 빠른 명령 입력을 위해 `-g`로도 별칭 지정돼요.

여기 프로세스 그룹이 두 개 정의된 앱이 있어요:

fly scale show
VM Resources for app: mr18-2

Groups
NAME    COUNT   KIND    CPUS    MEMORY  REGIONS 
worker  2       shared  1       512 MB  ams,yyz
web     1       shared  1       512 MB  yyz   

워커가 계속 데이터를 처리해서 더 커야 한다고 가정해 봐요. --process-group 옵션으로 단일 프로세스 그룹을 확장할 수 있어요:

fly scale vm performance-2x --process-group worker
Updating machine 0e286561f35586
No health checks found
Machine 0e286561f35586 updated successfully!
Updating machine 32873d9b012048
No health checks found
Machine 32873d9b012048 updated successfully!
Scaled VM Type for 'worker' to 'performance-2x'
      CPU Cores: 2
         Memory: 4096 MB

결과를 확인하세요:

fly scale show
VM Resources for app: mr18-2

Groups
NAME    COUNT   KIND            CPUS    MEMORY  REGIONS 
worker  2       performance     2       4096 MB ams,yyz
web     1       shared          1       512 MB  yyz 

Fly Launch에 속하지 않는 Machines

앱에 Fly Launch에 속하지 않는 Machines(fly machine run이나 Machines API로 만든 Machines)이 있다면, fly status가 그 존재를 경고해 줘요:

Found machines that aren't part of Fly Launch, run fly machines list to see them.

앱 전체의 fly scale 명령과 fly.toml의 VM 설정은 이런 Machines에는 적용되지 않지만, fly machine update로 Machine 하나를 개별적으로 확장할 수 있어요:

fly machine update --vm-size shared-cpu-2x 21781973f03e89
fly machine update --vm-memory 1024 21781973f03e89
fly machine update --vm-cpus 2 21781973f03e89

fly machine update --vm-memory나 fly machine update --vm-cpus로 호환되지 않는 CPU/RAM 조합을 설정하려고 하면 flyctl이 알려줘요. flyctl과 Machines API로 개별 Machine 크기 조정에 대해 자세히 알아보세요.

더 알아보기 (Learn more)