tencent cloud

Cloud Virtual Machine

사용자 정의 이미지 생성

다운로드
포커스 모드
폰트 크기
마지막 업데이트 시간: 2026-06-15 15:16:52

작업 시나리오

Tencent Cloud에서 제공하는 공용 이미지 외에도 동일한 구성으로 CVM 인스턴스를 만들 수 있는 사용자 정의 이미지를 만들 수도 있습니다.
설명:
이미지는 데이터 저장을 위해 CBS 스냅샷 서비스를 사용합니다.
사용자 정의 이미지를 생성하면 해당 이미지와 연결된 스냅샷이 기본 생성됩니다. 사용자 정의 이미지 보관은 일정 스냅샷 요금이 발생합니다. 자세한 내용은 Billing Overview를 참고하십시오.

주의 사항

각 리전은 당분간 500개의 사용자 정의 이미지를 지원합니다. 정상적인 경우 생성된 사용자 정의 이미지의 용량은 인스턴스 디스크 크기와 일치합니다.
Linux 인스턴스에 데이터 디스크가 있지만 시스템 디스크의 사용자 정의 이미지만 만드는 경우 /etc/fstab에 데이터 디스크 구성이 포함되어 있지 않은지 확인하십시오. 그렇지 않으면 이 이미지로 생성된 인스턴스를 정상적으로 시작할 수 없습니다.
제작 프로세스는 10분 또는 그 이상 시간이 소요되며 구체적인 시간은 인스턴스의 데이터 크기와 연관되므로 서비스에 영향을 주지 않도록 미리 준비하십시오.
Windows 인스턴스에 도메인 로그인이 필요하고 도메인 계정을 사용하는 경우, 사용자 정의 이미지를 생성하기 전에 인스턴스 도메인 로그인 후 SID의 고유성을 보장하기 위해 Sysprep 작업을 실행하십시오. 자세한 내용은 Sysprep을 통한 CVM 도메인 로그인 후 SID 고유성 구현을 참고하십시오.
25Gbps NIC가 구성된 베어메탈 서버(즉, 모델의 내부 네트워크 대역폭 값이 25Gbps)를 사용하는 경우, 콘솔 및 API를 통한 사용자 정의 이미지 생성을 당분간 지원하지 않습니다.

작업 단계

인스턴스 콘솔을 사용하여 생성
미러 이미지 콘솔을 사용하여 생성
API 로 생성
Linux 클라이언트 Packer 툴 기반
Windows 클라이언트 기반 Packer 툴

인스턴스 종료(옵션)

1. CVM 콘솔에 로그인하여 해당 인스턴스를 종료해야 하는지 확인합니다.
주의사항:
2018년 7월 이후 공용 이미지를 기반으로 생성된 인스턴스(클라우드 디스크를 시스템 디스크로 사용)는 온라인 이미지 생성이 지원됩니다(즉, 인스턴스가 종료되지 않은 상황에서 이미지 생성). 이러한 인스턴스 이외의 인스턴스는 이미지와 현재 인스턴스의 배포 환경의 완벽한 일치성을 위해 먼저 인스턴스를 종료한 뒤 이미지를 생성하시기 바랍니다.
필요한 경우, 단계를 계속 진행합니다.
필요하지 않은 경우, 사용자 정의 이미지 생성 단계를 진행합니다.
2. 인스턴스의 관리 페이지에서 사용된 실제 뷰 모드에 따라 작동합니다.
리스트 뷰: 인스턴스가 위치한 행의 오른쪽에 있는 더보기 > 인스턴스 상태 > 종료를 선택합니다. 아래 그림과 같습니다.

탭 뷰: 인스턴스 상세정보 페이지의 종료를 선택합니다. 아래 그림과 같습니다.


사용자 정의 이미지 생성

1. 인스턴스의 관리 페이지에서 사용된 실제 뷰 모드에 따라 작동합니다.
리스트 뷰: 더보기 > 이미지/운영 체제 > 사용자 정의 이미지 생성를 선택합니다. 아래 그림과 같습니다.

탭 뷰: 오른쪽 상단의 더보기 > 이미지/운영 체제 > 사용자 정의 이미지 생성를 선택합니다. 아래 그림과 같습니다.

2. 사용자 정의 이미지 생성 창이 팝업되면, 아래 정보를 참고하여 설정합니다.
이미지 이름이미지 설명: 이름과 설명을 사용자 정의합니다.
태그: 리소스의 분류, 검색 및 취합을 위해 필요에 따라 태그를 추가할 수 있습니다. 자세한 내용은 Tag를 참고하십시오.
설명:
시스템 디스크 및 데이터 디스크를 포함하는 사용자 지정 이미지를 생성하려면 티켓 제출을 통해 활성화를 신청하십시오.
3. 이미지 생성을 클릭합니다.
왼쪽 네비게이션 바의 이미지를 클릭하여 이미지 페이지에서 이미지 생성 진행 상황을 확인할 수 있습니다.

사용자 정의 이미지를 사용하여 인스턴스 생성(옵션)

이미지 생성이 완료되면, 이미지 리스트에서 생성한 이미지를 선택하고 해당 행 오른쪽의 인스턴스 생성을 클릭하여 이전과 동일한 이미지의 서버를 구입할 수 있습니다. 아래 그림과 같습니다.


사용자 정의 이미지 생성

1. CVM 콘솔에 로그인하여 해당 인스턴스를 종료해야 하는지 확인합니다.
주의사항:
2018년 7월 이후 생성된 인스턴스(시스템 디스크가 CBS인 경우)는 온라인 이미지 생성을 지원합니다(즉, 인스턴스를 종료하지 않고 이미지 생성). 이 외의 인스턴스는 이미지와 현재 인스턴스의 배포 환경이 완전히 일치하도록, 먼저 인스턴스를 종료한 후 이미지를 생성하시기 바랍니다.
필요한 경우 인스턴스 종료를 수행합니다.
필요하지 않습니다. 다음 단계를 계속 진행하십시오.
2. 왼쪽 네비게이션 바의 이미지를 클릭하여 이미지 페이지로 이동한 후, 리스트 상단에서 사용자 정의 이미지 생성을 선택합니다.

3. 사용자 정의 이미지 생성 창이 팝업되면, 아래 정보를 참고하여 설정합니다.
인스턴스 선택: 해당 리전에서 사용자 정의 이미지를 생성할 인스턴스를 선택합니다.
이미지 이름이미지 설명: 이름과 설명을 사용자 정의합니다.
태그: 리소스의 분류, 검색 및 취합을 위해 필요에 따라 태그를 추가할 수 있습니다. 자세한 내용은 Tag를 참고하십시오.
인스턴스에 데이터 디스크가 포함된 경우, 시스템 디스크와 데이터 디스크를 포함한 전체 인스턴스 이미지가 기본값으로 생성되며, 시스템 디스크 이미지만 생성하도록 지정할 수 있습니다.
4. 이미지 생성을 클릭합니다.
이후 이미지 페이지에서 이미지 생성 진행 상황을 확인할 수 있습니다.

사용자 정의 이미지를 사용하여 인스턴스 생성(옵션)

이미지 생성이 완료되면, 이미지 리스트에서 생성한 이미지를 선택하고 해당 행 오른쪽의 인스턴스 생성을 클릭하여 이전과 동일한 이미지의 서버를 구입할 수 있습니다. 아래 그림과 같습니다.

CreateImage 인터페이스를 이용하여 사용자 정의 이미지를 생성할 수 있습니다. 자세한 내용은 CreateImage를 참고하십시오.

배경 정보

Packer는 오픈소스이며 경량의 자동화 이미지 빌드 툴입니다. JSON 포맷 또는 HCL2(HashiCorp Configuration Language) 구성 파일을 사용하여 이미지 빌드 과정을 정의함으로써, 빠르고 안정적인 이미지 빌드 및 배포를 실현합니다. 또한 Packer는 이미지 테스트 및 업데이트에 편의성을 제공하여, 이미지 운영 및 관리에 소요되는 시간 비용을 절감합니다. 자세한 내용은 Packer 공식 홈페이지를 참고하십시오.

전제 조건

서브 계정이 생성되었으며, CVM 및 Cloud API에 대한 모든 권한을 보유합니다.
서브 계정을 생성하려면 서브 계정 생성을 참고하십시오.
서브 계정에 권한을 부여하는 방법은 서브 계정 권한 설정을 참고하십시오. 본 문서에서는 서브 계정에 QcloudCVMFullAccess, QcloudCVMFinanceAccessQcloudAPIFullAccess 사전 정의된 정책을 부여합니다.
서브 계정에 대한 SecretId와 SecretKey를 생성합니다. 작업 단계는 서브 계정 액세스 키 관리를 참고하십시오. 생성된 키를 기록하고 안전하게 보관하십시오.
주의사항:
루트 계정의 SecretId와 SecretKey를 사용할 수 있지만, 루트 계정은 소유한 모든 리소스에 대한 완전한 제어 권한을 보유하고 있어 액세스 키 유출로 인한 보안 위험을 방지하기 위해 루트 계정 사용을 권장하지 않습니다. 서브 계정을 생성하십시오.

작업 단계

Packer 설치

1. 아래 명령어를 실행하여 Packer 설치 패키지를 획득합니다.
wget https://releases.hashicorp.com/packer/1.9.4/packer_1.9.4_linux_amd64.zip
2. 아래 명령어를 실행하여 Packer 설치 패키지를 압축 해제합니다.
unzip packer_1.9.4_linux_amd64.zip
3. 아래 명령어를 실행하여 Packer를 환경 변수 디렉터리 /usr/local/bin에 설치합니다.
sudo mv packer /usr/local/bin
4. 아래 명령어를 실행하여 Packer 버전을 확인하고, 설치 성공 여부를 검증합니다.
packer -v
설명:
Packer 설치 방법은 Packer 공식 홈페이지를 참고할 수도 있습니다.

Packer 템플릿 정의

Packer를 사용하여 사용자 정의 이미지를 생성하려면, 먼저 HCL 포맷 또는 JSON 포맷의 템플릿 파일을 정의해야 합니다. 다음으로, 해당 파일에서 사용자 정의 이미지 생성을 위한 Builders(생성기)와 Provisioners(구성기), 그리고 생성 과정에서 사용되는 임시 인스턴스 정보를 지정해야 합니다.
1. 아래 명령어를 실행하여 템플릿 파일을 생성합니다.
HCL 포맷
JSON 포맷
vim tencentcloud.pkr.hcl
vim tencentcloud.json
2. i를 눌러 파일 편집 모드로 진입한 후, 실제 상황에 따라 사용자 정의 이미지 생성기 구성기와 인스턴스 정보를 편집합니다.
HCL 포맷
JSON 포맷
variable "secret_id" {
type = string
default = env("TENCENTCLOUD_SECRET_ID")
}

variable "secret_key" {
type = string
default = env("TENCENTCLOUD_SECRET_KEY")
}

source "tencentcloud-cvm" "basic" {
secret_id = var.secret_id
secret_key = var.secret_key
region = "ap-guangzhou"
zone = "ap-guangzhou-6"
instance_type = "SA3.MEDIUM2"
disk_type = "CLOUD_PREMIUM"
source_image_id = "img-9xqekomx"
image_name = "packer-basic"
ssh_username = "root"
associate_public_ip_address = true
run_tags = {
"packer" = "packer-test"
}
}

build {
sources = ["source.tencentcloud-cvm.basic"]
provisioner "shell" {
inline = ["sleep 30", "yum install redis.x86_64 -y"]
}
}
{
"variables": {
"secret_id": "{{env `TENCENTCLOUD_SECRET_ID`}}",
"secret_key": "{{env `TENCENTCLOUD_SECRET_KEY`}}"
},
"builders": [
{
"type": "tencentcloud-cvm",
"secret_id": "{{user `secret_id`}}",
"secret_key": "{{user `secret_key`}}",
"region":"ap-guangzhou",
"zone": "ap-guangzhou-6",
"instance_type": "SA3.MEDIUM2",
"disk_type": "CLOUD_PREMIUM",
"source_image_id": "img-9xqekomx",
"image_name": "packer-basic",
"ssh_username": "root",
"associate_public_ip_address": true,
"run_tags": {
"packer": "packer-test"
}
}
],
"provisioners": [{
"type": "shell",
"inline": ["sleep 30", "yum install redis.x86_64 -y"]
}]
}
사용자 정의 각 매개변수에 대한 설명은 아래 표와 같습니다.
매개변수
필수 여부
설명
secret_id
secret_id는 TENCENTCLOUD_SECRET_ID 환경 변수로 설정하는 것을 권장합니다.
secret_key
secret_key는 TENCENTCLOUD_SECRET_KEY 환경 변수로 설정하는 것을 권장합니다.
region
지역. 임시 CVM을 생성하는 지역 및 미러 이미지를 생성하는 지역입니다.
예시 값: ap-guangzhou
zone
가용 영역. 임시 CVM을 생성하는 가용 영역입니다.
예시 값: ap-guangzhou-6
instance_type
인스턴스 모델입니다. 서로 다른 인스턴스 모델은 각기 다른 리소스 사양을 지정합니다.
예시 값: SA3.MEDIUM2
source_image_id
기본 미러 이미지 ID로, 임시 CVM 미러 이미지 생성에 사용되며, 공개 미러 이미지 리스트에서 획득하거나 DescribeImages 인터페이스를 통해 쿼리하여 얻을 수 있습니다.
예시 값: img-9xqekomx
image_name
사용자 정의 이미지의 이름을 지정합니다. 이름은 영문자, 숫자, 하이픈(-)으로 구성되며, 60자를 초과할 수 없습니다.
예시 값: packer-basic
image_description
아니오
미러 이미지 설명입니다. 60자를 초과할 수 없습니다.
associate_public_ip_address
아니오
임시 CVM에 공용 IP를 활성화할지 여부입니다. 기본값은 false입니다. 공용 IP를 통해 연결하는 경우, 값을 true로 설정하시기 바랍니다.
force_poweroff
아니오
임시 CVM을 종료하여 미러 이미지를 생성하는 데 실패할 경우, 강제 종료하여 미러 이미지를 생성할지 여부입니다. 기본값은 false입니다.
sysprep
아니오
Windows 이미지 생성 중에 Sysprep를 활성화할지 여부입니다.
예시 값: false
image_copy_regions
아니오
미러 이미지 생성 후 복제될 지역입니다.
예시 값: ["ap-beijing"]
image_share_accounts
아니오
미러 이미지 생성 후 공유될 계정입니다.
예시 값: ["10002297xxxx"]
skip_region_validation
아니오
검증 시 지역을 확인하지 않습니다.
예시 값: false
internet_max_bandwidth_out
아니오
시작 시 최대 대역폭(Mbps 단위)입니다. 값은 1 ~ 100 사이로 설정할 수 있습니다.
instance_name
아니오
인스턴스 이름입니다.
disk_type
아니오
시스템 디스크 유형입니다. 기본값은 CLOUD_PREMIUM입니다. 시스템 디스크 정보를 참조하십시오.
disk_size
아니오
시스템 디스크 크기입니다. 값 범위(GB 단위):
LOCAL_BASIC: 50
Other: 50 ~ 1000 (>50는 화이트리스트 필요)
data_disks
아니오
데이터 디스크 구성입니다. 디스크 상세내용은 데이터 디스크 상세내용을 참조하십시오.
vpc_id
아니오
임시 CVM 생성에 필요한 vpc_id입니다.
vpc_name
아니오
VPC 이름입니다. CVM 생성 전에 생성되는 VPC의 이름이며, 입력하지 않으면 기본값(예: packer-****)이 부여됩니다.
cidr_block
아니오
vpc_id를 설정하지 않은 경우, 생성될 VPC의 CIDR 블록을 지정합니다.
예시 값: false
subnet_id
아니오
임시 CVM 생성에 필요한 subnet_id입니다.
subnet_name
아니오
서브넷 이름입니다. CVM 생성 전에 생성되는 서브넷의 이름이며, 입력하지 않으면 기본값(예: packer-****)이 부여됩니다.
subnet_cidr_block
아니오
subnet_id를 설정하지 않은 경우, 생성될 서브넷의 CIDR 블록을 지정합니다.
예시 값: false
security_group_id
아니오
임시 CVM 생성에 필요한 보안 그룹 ID입니다.
security_group_name
아니오
보안 그룹 이름입니다. security_group_id를 설정하지 않은 경우, 보안 그룹 생성 시 필요합니다.
user_data
아니오
사용자 데이터입니다.
user_data_file
아니오
사용자 데이터 파일입니다.
host_name
아니오
호스트명입니다.
run_tags
아니오
태그입니다. 임시 CVM 생성 시 인스턴스 태그를 지정하는 데 사용되며, 미러 이미지 생성에는 사용되지 않습니다.
데이터 디스크 상세정보
:
매개변수
필수 여부
설명
disk_type
데이터 디스크의 유형입니다. 유효한 선택 항목은 CLOUD_BASIC, CLOUD_PREMIUMCLOUD_SSD입니다.
disk_size
데이터 디스크의 크기입니다.
disk_snapshot_id
데이터 디스크 스냅샷의 ID입니다.
더 많은 매개변수는 Packer 공식 홈페이지 매개변수를 참고하십시오.
3. Esc 키를 누르고 wq 를 입력한 후 Enter 키를 눌러 저장하고 종료합니다.

사용자 정의 이미지 생성

1. 환경 변수 SecretId와 SecretKey를 구성합니다.
export TENCENTCLOUD_SECRET_ID=xxxx
export TENCENTCLOUD_SECRET_KEY=xxxx
2. 다음 명령어를 실행하여 사용자 정의 이미지 생성을 시작합니다.
HCL 포맷
JSON 포맷
packer build tencentcloud.pkr.hcl
packer build tencentcloud.json
주의사항:
본 작업은 과금 리소스를 생성하므로, 릴리스 및 정리 작업을 수행하시기 바랍니다. CVM 인스턴스, 공용 IP, 이미지 등(이미지를 제외한 다른 리소스는 정상적으로 자동 정리됩니다.)
실행 결과는 다음과 같습니다.
tencentcloud-cvm.basic: output will be in this color.
==> tencentcloud-cvm.basic: Trying to check image name: packer-basic...
tencentcloud-cvm.basic: Image name: useable
==> tencentcloud-cvm.basic: Trying to check source image: img-9xqekomx...
tencentcloud-cvm.basic: Image found: CentOS Stream 9 64bit
==> tencentcloud-cvm.basic: Trying to create a new keypair: packer_656c7***...
tencentcloud-cvm.basic: Keypair created: skey-2ekzd***
==> tencentcloud-cvm.basic: Trying to create a new vpc...
tencentcloud-cvm.basic: Vpc created: vpc-bm797***
==> tencentcloud-cvm.basic: Trying to create a new subnet...
tencentcloud-cvm.basic: Subnet created: subnet-74c4j***
==> tencentcloud-cvm.basic: Trying to create a new securitygroup...
tencentcloud-cvm.basic: Securitygroup created: sg-7kf8z***
==> tencentcloud-cvm.basic: Trying to create securitygroup polices...
tencentcloud-cvm.basic: Securitygroup polices created
==> tencentcloud-cvm.basic: Trying to create a new instance...
tencentcloud-cvm.basic: Waiting for instance ready
tencentcloud-cvm.basic: Instance created: ins-n6dp2***
==> tencentcloud-cvm.basic: Using SSH communicator to connect: 1.14.***.***
==> tencentcloud-cvm.basic: Waiting for SSH to become available...
==> tencentcloud-cvm.basic: Connected to SSH!
==> tencentcloud-cvm.basic: Provisioning with shell script: /var/folders/0_/xl3kk_6n79vbnpgj97******0000gn/T/packer-shell1288510462
tencentcloud-cvm.basic: CentOS Stream 9 - AppStream 42 MB/s | 18 MB 00:00
tencentcloud-cvm.basic: CentOS Stream 9 - BaseOS 31 MB/s | 7.9 MB 00:00
tencentcloud-cvm.basic: Last metadata expiration check: 0:00:01 ago on Sun 03 Dec 2023 09:18:14 PM CST.
tencentcloud-cvm.basic: Dependencies resolved.
tencentcloud-cvm.basic: ================================================================================
tencentcloud-cvm.basic: Package Architecture Version Repository Size
tencentcloud-cvm.basic: ================================================================================
tencentcloud-cvm.basic: Installing:
tencentcloud-cvm.basic: redis x86_64 6.2.7-1.el9 appstream 1.3 M
tencentcloud-cvm.basic:
tencentcloud-cvm.basic: Transaction Summary
tencentcloud-cvm.basic: ================================================================================
tencentcloud-cvm.basic: Install 1 Package
tencentcloud-cvm.basic:
tencentcloud-cvm.basic: Total download size: 1.3 M
tencentcloud-cvm.basic: Installed size: 4.7 M
tencentcloud-cvm.basic: Downloading Packages:
tencentcloud-cvm.basic: redis-6.2.7-1.el9.x86_64.rpm 6.5 MB/s | 1.3 MB 00:00
tencentcloud-cvm.basic: --------------------------------------------------------------------------------
tencentcloud-cvm.basic: Total 6.5 MB/s | 1.3 MB 00:00
tencentcloud-cvm.basic: Running transaction check
tencentcloud-cvm.basic: Transaction check succeeded.
tencentcloud-cvm.basic: Running transaction test
tencentcloud-cvm.basic: Transaction test succeeded.
tencentcloud-cvm.basic: Running transaction
tencentcloud-cvm.basic: Preparing : 1/1
tencentcloud-cvm.basic: Running scriptlet: redis-6.2.7-1.el9.x86_64 1/1
tencentcloud-cvm.basic: Installing : redis-6.2.7-1.el9.x86_64 1/1
tencentcloud-cvm.basic: Running scriptlet: redis-6.2.7-1.el9.x86_64 1/1
tencentcloud-cvm.basic: Verifying : redis-6.2.7-1.el9.x86_64 1/1
tencentcloud-cvm.basic:
tencentcloud-cvm.basic: Installed:
tencentcloud-cvm.basic: redis-6.2.7-1.el9.x86_64
tencentcloud-cvm.basic:
tencentcloud-cvm.basic: Complete!
==> tencentcloud-cvm.basic: Trying to detach keypair: skey-2ekzdz0x...
tencentcloud-cvm.basic: Waiting for keypair detached
tencentcloud-cvm.basic: Keypair detached
==> tencentcloud-cvm.basic: Trying to create a new image: packer-basic...
tencentcloud-cvm.basic: Waiting for image ready
tencentcloud-cvm.basic: Image created: img-pubkd***
==> tencentcloud-cvm.basic: Cleaning up instance...
==> tencentcloud-cvm.basic: Cleaning up securitygroup...
==> tencentcloud-cvm.basic: Cleaning up subnet...
==> tencentcloud-cvm.basic: Cleaning up vpc...
==> tencentcloud-cvm.basic: Cleaning up keypair...
Build 'tencentcloud-cvm.basic' finished after 3 minutes 38 seconds.

==> Wait completed after 3 minutes 38 seconds

==> Builds finished. The artifacts of successful builds are:
--> tencentcloud-cvm.basic: Tencentcloud images(ap-guangzhou: img-pubkd***) were created.
3. 생성된 사용자 정의 이미지를 확인합니다.
3.1 CVM 콘솔에 로그인합니다.
3.2 왼쪽 네비게이션 바에서 이미지를 클릭하여 이미지 관리 페이지로 이동합니다.
3.3 왼쪽 상단의 리전을 클릭하면 드롭다운 상자에서 해당 리전의 사용자 정의 이미지를 확인할 수 있습니다.


작업 시나리오

본 문서에서는 Windows 클라이언트에서 Packer 툴을 사용하여 WinRM 연결 방식으로 사용자 정의 이미지를 생성하는 방법을 설명합니다. Packer는 HashiCorp에서 제공하는 자동화 이미지 빌드 툴로, CVM 사용자 정의 이미지를 빠르고 일관되게 생성하는 데 도움을 줍니다.
주의사항:
Windows는 WinRM에 의존하여 네트워크 연결을 구축하고 WinRM을 통해 명령어를 전달합니다. Windows 공용 이미지는 기본적으로 WinRM을 완전히 활성화하지 않기 때문에, UserData를 통해 WinRM을 활성화해야 합니다. 따라서 RunInstances 인터페이스를 호출할 때 UserData에 배치했던 업무 코드는 provisioners 부분에서 실행됩니다.
Packer가 머신을 생성하여 이미지를 패키징할 때, UserData 코드 실행이 완료되기를 기다리지 않고 provisioners 모듈을 실행합니다. 또한 Packer는 Windows 시스템에서 WinRM에 강하게 의존하지만, sysprep 공용 이미지에서는 WinRM이 완전히 활성화되어 있지 않습니다.
Packer 1.9.0 버전부터는 Plugin이 Packer 메인 프로그램과 분리되어 별도로 설치해야 하며, 그렇지 않으면 builder unknown 오류가 발생합니다. 반면, 1.9.0 이전 버전(예: 1.8.7 버전)의 Packer는 Plugin을 기본 제공합니다.

전제 조건

서브 계정이 생성되었으며, CVM 및 Cloud API에 대한 모든 권한을 보유합니다.
서브 계정을 생성하려면 서브 계정 생성을 참고하십시오.
서브 계정에 권한을 부여하는 방법은 서브 계정 권한 설정을 참고하십시오. 본 문서에서는 서브 계정에 QcloudCVMFullAccess, QcloudCVMFinanceAccessQcloudAPIFullAccess 사전 정의된 정책을 부여합니다.
서브 계정에 대한 SecretId와 SecretKey가 생성되었습니다. 작업 단계는 서브 계정 액세스 키 관리를 참고하십시오. 생성된 키를 기록하고 안전하게 보관하십시오.
주의사항:
루트 계정의 SecretId와 SecretKey를 사용할 수 있지만, 루트 계정은 소유한 모든 리소스에 대한 완전한 제어 권한을 보유하고 있어 액세스 키 유출로 인한 보안 위험을 방지하기 위해 루트 계정 사용을 권장하지 않습니다. 서브 계정을 생성하십시오.
클라이언트(packer.exe 명령어를 실행하는 호스트)와 Packer 빌더 간 네트워크 통신을 보장해야 합니다. 내부망 통신을 보장하기 위해 config.json에서 퍼블릭 네트워크 할당("associate_public_ip_address": true)을 구성하거나, 클라이언트를 config.json에 지정된 동일 VPC 내 다른 CVM으로 설정하는 것이 좋습니다.

작업 단계

단계 1: Packer 설치

1. Packer를 다운로드하십시오.
2. Packer 설치 패키지를 압축 해제합니다. 여기서는 1.14.1 버전을 예로 들며, 압축 해제된 파일에는 packer.exe가 포함되어 있습니다. CMD 명령줄을 사용하여 압축 해제된 디렉터리로 이동한 후, 아래 명령어를 실행하여 Packer 환경 초기화를 완료합니다.
packer.exe plugins install github.com/hashicorp/tencentcloud
설명:
Packer 환경 초기화를 위해 GitHub에서 Packer Plugin을 획득해야 합니다. 중국 본토의 인스턴스는 GitHub 접속 속도가 느릴 수 있으니, 인내심을 가지고 기다려 주십시오. 오류가 발생할 경우 다시 시도하거나 다른 국가 및 지역의 호스트를 사용하십시오.

단계 2: Packer 템플릿 정의

Packer를 사용하여 사용자 정의 이미지를 생성하려면, 먼저 JSON 포맷 또는 HCL 포맷의 템플릿 파일을 정의해야 합니다. 템플릿 파일에서 사용자 정의 이미지 생성을 위한 Builders(생성기)와 Provisioners(구성기), 그리고 생성 과정에서 사용되는 임시 인스턴스 정보를 지정해야 합니다.
Tencent Cloud Windows Packer 전체 구성 파일 config.json의 내용은 다음과 같습니다.
{
"builders": [
{
"type": "tencentcloud-cvm",
"secret_id": "귀하의 secret_id",
"secret_key": "귀하의 secret_key",
"region": "ap-shanghai",
"zone": "ap-shanghai-5",
"instance_type": "S5.MEDIUM4",
"source_image_id": "img-m07ny34j",
"disk_size": 40,
"disk_type": "CLOUD_PREMIUM",
"vpc_id": "vpc-9yabaw4m",
"subnet_id": "subnet-ih08bvf9",
"communicator": "winrm",
"winrm_port": 5985,
"winrm_username": "Administrator",
"winrm_password": "대문자, 소문자, 숫자로 구성된 복잡한 비밀번호",
"image_name": "test_Packer1",
"security_group_id": "sg-c65mz0li",
"packer_debug": true,
"associate_public_ip_address": true,
"run_tags": {
"good": "luck"
},
"user_data_file": "winrm_enable_userdata.ps1"
}
],
"provisioners": [
{
"type": "powershell",
"inline": [
"mkdir C:\\\\test -force;wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/installChrome.ps1 -Outfile c:\\\\test\\\\packer.ps1;Start-Process powershell.exe -ArgumentList '-NoProfile -File c:\\\\test\\\\packer.ps1' -Wait;"
]
}
]
}
실제 상황에 따라 사용자 정의 이미지 생성기 구성기와 인스턴스 정보를 수정해야 하며, 각 매개변수에 대한 설명은 다음과 같습니다.
매개변수
필수 여부
설명
secret_id
TENCENTCLOUD_SECRET_ID 환경 변수를 설정하는 것을 권장합니다.
secret_key
TENCENTCLOUD_SECRET_KEY 환경 변수를 설정하는 것을 권장합니다.
region
지역. 임시 CVM을 생성하는 지역 및 미러 이미지를 생성하는 지역입니다.
예시 값: ap-guangzhou
zone
가용 영역. 임시 CVM을 생성하는 가용 영역입니다.
예시 값: ap-guangzhou-4
instance_type
인스턴스 모델입니다. 서로 다른 인스턴스 모델은 각기 다른 리소스 사양을 지정합니다.
예시 값: S5.MEDIUM4
source_image_id
기본 미러 이미지 ID로, 임시 CVM 미러 이미지 생성에 사용되며, 공개 미러 이미지 리스트에서 획득하거나 DescribeImages 인터페이스를 통해 쿼리하여 얻을 수 있습니다.
예시 값: img-m07ny34j
image_name
사용자 정의 이미지의 이름입니다. 영문자, 숫자 및 -로 구성되며, 60자를 초과할 수 없습니다.
예시 값: test_Packer1.
communicator
Packer가 타겟 머신에 연결하는 방식을 지정하며, winrm으로 고정되어 WinRM 연결을 통해 머신과 통신을 설정합니다.
winrm_port
WinRM 연결의 포트 번호로, 5985로 고정됩니다.
winrm_username
WinRM 연결에 사용되는 사용자 이름으로, winrm_enable_userdata.ps1 파일 내의 사용자 이름과 일치해야 합니다.
winrm_password
WinRM 연결에 사용되는 비밀번호로, winrm_enable_userdata.ps1 파일 내의 비밀번호와 일치해야 합니다.
associate_public_ip_address
아니오
임시 CVM에 공용 IP를 활성화할지 여부입니다. 기본값은 false입니다. 공용 IP를 통해 연결하는 경우, true로 설정하시기 바랍니다.
disk_type
아니오
시스템 디스크 유형입니다. 기본값은 CLOUD_PREMIUM입니다. 자세한 정보는 SystemDisk를 참조하십시오.
disk_size
아니오
시스템 디스크 크기입니다. GB 단위로 표시되며, 예를 들어 40GB인 경우 40을 입력합니다.
vpc_id
아니오
임시 CVM 생성에 필요한 VPC ID입니다.
subnet_id
아니오
임시 CVM 생성에 필요한 서브넷 ID입니다.
security_group_id
아니오
임시 CVM 생성에 필요한 보안 그룹 ID입니다.
user_data_file
아니오
사용자 데이터 파일 경로입니다.
inline
아니오
이미지 생성 전 필요한 비즈니스 로직입니다. 예를 들어, 공용 네트워크에 연결 가능한 경우 Chrome 브라우저를 자동 설치합니다.
더 많은 매개변수는 Packer 공식 홈페이지 매개변수를 참고하십시오.

단계 3: 사용자 정의 이미지 생성

1. config.jsonwinrm_enable_userdata.ps1 파일을 Packer 메인 프로그램 packer.exe와 동일한 디렉터리에 위치시킵니다.
2. 해당 디렉터리로 전환한 후, 아래 명령어를 실행합니다.
packer.exe build config.json
설명:
packer.exe 실행 과정에서 CVM 콘솔을 통해 생성된 빌더를 확인할 수 있으나, 해당 서버를 작업하지 마십시오. 미러 이미지 생성 성공 여부와 관계없이, 최종적으로 해당 서버는 자동으로 회수됩니다. 회수 과정에서 이상이 발생할 경우 온라인 고객센터에 문의하여 처리하십시오.
3. 명령어 실행이 완료된 후, 출력 결과에 아래와 유사한 정보가 포함되어 있으면 미러 이미지 생성이 성공했음을 의미합니다.
==> tencentcloud-cvm: Waiting for image creating...
==> tencentcloud-cvm: Image ID: img-xxxxxx
Build 'tencentcloud-cvm' finished after ...
CVM 콘솔사용자 정의 이미지 페이지로 이동하여 생성된 이미지를 확인할 수도 있습니다.

자주 묻는 질문

미러 이미지 생성 시 일부 빌드가 성공적으로 완료되지 않았으며 오류가 발생했습니다: tencentcloud-cvm: 이미지 이름 xxxx가 이미 존재합니다

config.json을 사용하여 미러 이미지를 한 번 성공적으로 생성한 후, 재사용 시에는 image_name 값을 업데이트해야 합니다.

미러 이미지 생성 시 WinRM 사용 가능 대기 중...이 계속 표시됩니다

config.json 파일의 winrm_passwordwinrm_enable_userdata.ps1 파일의 비밀번호가 일치하는지 확인하십시오. winrm_enable_userdata.ps1의 비밀번호 구성 위치는 다음과 같습니다.


미러 이미지 생성 시 스크립트가 0이 아닌 종료 상태로 종료되었습니다: 16001.

보안 소프트웨어의 네트워크 보안 조치로 인해 Packer의 네트워크 접속이 영향을 받아 패키징이 시간 초과될 수 있습니다. 클라이언트는 가능한 한 독립 네트워크 환경의 CVM을 사용하시기 바랍니다.

관련 작업

지역별 사용자 정의 이미지 개수 확인

이미지 리소스가 많거나 크로스 리전 배포 등의 시나리오에서는, 원클릭으로 각 리전의 이미지 개수를 쿼리하여 이미지 리소스를 보다 효율적으로 관리할 수 있습니다.
1. CVM 콘솔에 로그인합니다.
2. 왼쪽 네비게이션 바에서 이미지를 클릭하여 이미지 관리 페이지로 이동합니다.
3. 왼쪽 상단의 리전을 클릭하면 드롭다운 상자에서 각 리전의 사용자 정의 이미지 개수를 확인할 수 있습니다.

4. 공유 이미지 관리 페이지로 전환한 후, 왼쪽 상단의 리전을 클릭하면 드롭다운 상자에서 각 리전의 공유 이미지 개수를 확인할 수 있습니다.

데이터 디스크의 데이터 마이그레이션

새 인스턴스를 시작하면서 기존 인스턴스 데이터 디스크의 데이터를 유지해야 하는 경우, 먼저 데이터 디스크의 스냅샷을 생성한 후, 새 인스턴스를 시작할 때 해당 데이터 디스크 스냅샷을 사용하여 새로운 CBS 데이터 디스크를 생성할 수 있습니다.
자세한 정보는 스냅샷으로 CBS 생성을 참고하십시오.


도움말 및 지원

문제 해결에 도움이 되었나요?

피드백