






QcloudCVMFullAccess, QcloudCVMFinanceAccess 및 QcloudAPIFullAccess 사전 정의된 정책을 부여합니다.wget https://releases.hashicorp.com/packer/1.9.4/packer_1.9.4_linux_amd64.zip
unzip packer_1.9.4_linux_amd64.zip
/usr/local/bin에 설치합니다.sudo mv packer /usr/local/bin
packer -v
vim tencentcloud.pkr.hcl
vim tencentcloud.json
i를 눌러 파일 편집 모드로 진입한 후, 실제 상황에 따라 사용자 정의 이미지 생성기 구성기와 인스턴스 정보를 편집합니다.variable "secret_id" {type = stringdefault = env("TENCENTCLOUD_SECRET_ID")}variable "secret_key" {type = stringdefault = env("TENCENTCLOUD_SECRET_KEY")}source "tencentcloud-cvm" "basic" {secret_id = var.secret_idsecret_key = var.secret_keyregion = "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 = truerun_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 | 아니오 | |
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_PREMIUM 및 CLOUD_SSD입니다. |
disk_size | 예 | 데이터 디스크의 크기입니다. |
disk_snapshot_id | 예 | 데이터 디스크 스냅샷의 ID입니다. |
export TENCENTCLOUD_SECRET_ID=xxxxexport TENCENTCLOUD_SECRET_KEY=xxxx
packer build tencentcloud.pkr.hcl
packer build tencentcloud.json
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 readytencentcloud-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-shell1288510462tencentcloud-cvm.basic: CentOS Stream 9 - AppStream 42 MB/s | 18 MB 00:00tencentcloud-cvm.basic: CentOS Stream 9 - BaseOS 31 MB/s | 7.9 MB 00:00tencentcloud-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 Sizetencentcloud-cvm.basic: ================================================================================tencentcloud-cvm.basic: Installing:tencentcloud-cvm.basic: redis x86_64 6.2.7-1.el9 appstream 1.3 Mtencentcloud-cvm.basic:tencentcloud-cvm.basic: Transaction Summarytencentcloud-cvm.basic: ================================================================================tencentcloud-cvm.basic: Install 1 Packagetencentcloud-cvm.basic:tencentcloud-cvm.basic: Total download size: 1.3 Mtencentcloud-cvm.basic: Installed size: 4.7 Mtencentcloud-cvm.basic: Downloading Packages:tencentcloud-cvm.basic: redis-6.2.7-1.el9.x86_64.rpm 6.5 MB/s | 1.3 MB 00:00tencentcloud-cvm.basic: --------------------------------------------------------------------------------tencentcloud-cvm.basic: Total 6.5 MB/s | 1.3 MB 00:00tencentcloud-cvm.basic: Running transaction checktencentcloud-cvm.basic: Transaction check succeeded.tencentcloud-cvm.basic: Running transaction testtencentcloud-cvm.basic: Transaction test succeeded.tencentcloud-cvm.basic: Running transactiontencentcloud-cvm.basic: Preparing : 1/1tencentcloud-cvm.basic: Running scriptlet: redis-6.2.7-1.el9.x86_64 1/1tencentcloud-cvm.basic: Installing : redis-6.2.7-1.el9.x86_64 1/1tencentcloud-cvm.basic: Running scriptlet: redis-6.2.7-1.el9.x86_64 1/1tencentcloud-cvm.basic: Verifying : redis-6.2.7-1.el9.x86_64 1/1tencentcloud-cvm.basic:tencentcloud-cvm.basic: Installed:tencentcloud-cvm.basic: redis-6.2.7-1.el9.x86_64tencentcloud-cvm.basic:tencentcloud-cvm.basic: Complete!==> tencentcloud-cvm.basic: Trying to detach keypair: skey-2ekzdz0x...tencentcloud-cvm.basic: Waiting for keypair detachedtencentcloud-cvm.basic: Keypair detached==> tencentcloud-cvm.basic: Trying to create a new image: packer-basic...tencentcloud-cvm.basic: Waiting for image readytencentcloud-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.

builder unknown 오류가 발생합니다. 반면, 1.9.0 이전 버전(예: 1.8.7 버전)의 Packer는 Plugin을 기본 제공합니다.QcloudCVMFullAccess, QcloudCVMFinanceAccess 및 QcloudAPIFullAccess 사전 정의된 정책을 부여합니다.packer.exe 명령어를 실행하는 호스트)와 Packer 빌더 간 네트워크 통신을 보장해야 합니다. 내부망 통신을 보장하기 위해 config.json에서 퍼블릭 네트워크 할당("associate_public_ip_address": true)을 구성하거나, 클라이언트를 config.json에 지정된 동일 VPC 내 다른 CVM으로 설정하는 것이 좋습니다.packer.exe가 포함되어 있습니다. CMD 명령줄을 사용하여 압축 해제된 디렉터리로 이동한 후, 아래 명령어를 실행하여 Packer 환경 초기화를 완료합니다.packer.exe plugins install github.com/hashicorp/tencentcloud
{"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_password | 예 | |
associate_public_ip_address | 아니오 | 임시 CVM에 공용 IP를 활성화할지 여부입니다. 기본값은 false입니다. 공용 IP를 통해 연결하는 경우, true로 설정하시기 바랍니다. |
disk_type | 아니오 | |
disk_size | 아니오 | 시스템 디스크 크기입니다. GB 단위로 표시되며, 예를 들어 40GB인 경우 40을 입력합니다. |
vpc_id | 아니오 | 임시 CVM 생성에 필요한 VPC ID입니다. |
subnet_id | 아니오 | 임시 CVM 생성에 필요한 서브넷 ID입니다. |
security_group_id | 아니오 | 임시 CVM 생성에 필요한 보안 그룹 ID입니다. |
user_data_file | 아니오 | 사용자 데이터 파일 경로입니다. |
inline | 아니오 | 이미지 생성 전 필요한 비즈니스 로직입니다. 예를 들어, 공용 네트워크에 연결 가능한 경우 Chrome 브라우저를 자동 설치합니다. |
config.json 및 winrm_enable_userdata.ps1 파일을 Packer 메인 프로그램 packer.exe와 동일한 디렉터리에 위치시킵니다.packer.exe build config.json
packer.exe 실행 과정에서 CVM 콘솔을 통해 생성된 빌더를 확인할 수 있으나, 해당 서버를 작업하지 마십시오. 미러 이미지 생성 성공 여부와 관계없이, 최종적으로 해당 서버는 자동으로 회수됩니다. 회수 과정에서 이상이 발생할 경우 온라인 고객센터에 문의하여 처리하십시오.==> tencentcloud-cvm: Waiting for image creating...==> tencentcloud-cvm: Image ID: img-xxxxxxBuild 'tencentcloud-cvm' finished after ...
일부 빌드가 성공적으로 완료되지 않았으며 오류가 발생했습니다: tencentcloud-cvm: 이미지 이름 xxxx가 이미 존재합니다config.json을 사용하여 미러 이미지를 한 번 성공적으로 생성한 후, 재사용 시에는 image_name 값을 업데이트해야 합니다.WinRM 사용 가능 대기 중...이 계속 표시됩니다config.json 파일의 winrm_password와 winrm_enable_userdata.ps1 파일의 비밀번호가 일치하는지 확인하십시오. winrm_enable_userdata.ps1의 비밀번호 구성 위치는 다음과 같습니다.
스크립트가 0이 아닌 종료 상태로 종료되었습니다: 16001.
피드백