2014-09-10 6 views
2

이것이 올바른 방향인지 확신 할 수 없지만 포장기로 이미지 빌드 시간을 단축하는 방법을 모색 중입니다. 필요한 단계 중 하나는 약 10GB의 데이터를 복사하여 이미지의 일부로 만드는 것입니다. 현재 쉘 프로비저를 사용하여이 이미지를 sftp로 가져 왔습니다. 이것은 오랜 시간이 걸립니다. 대신이 데이터를 빌드 할 때 첨부 할 수있는 EBS 볼륨에 이미 갖고 싶습니다. 아마존 자체 네트워크에서 블록 장치로 마운트되기 때문에 전송은 sftp보다 훨씬 빠릅니다.빌드 시간 동안 packer로 볼륨을 첨부하십시오.

필자는 이러한 방법을 포장 업체에서 검색하려고했지만 많은 정보가 없습니다. amazon-ebs 빌더에서 ami_block_device_mappings 선택적 매개 변수를 사용하여 ebs 볼륨을 첨부 할 수 있는지 알아볼 것입니다.

더 나은 방법이 있다면 알려 주시기 바랍니다. 감사.

답변

2

그래서 셸 프로비저러가가는 길인 것처럼 보입니다. 셸 프로비저는 다음과 같은 것들을 모두 포착하는 것처럼 보입니다. :) 어떤 시점에서 amazon-ebs 빌더에서 매개 변수를 갖는 것이 좋을 것입니다. 예를 들어 "attach_ebs_volume"과 같은 것입니다. 어쨌든, 내가 한 방법은 다음과 같습니다.

  1. 템플릿의 변수 secion에 AWS 정보 (ebs_volume, instance_id 등)를 추가하십시오. 나는 ENV에서 액세스 및 비밀 키를 가져 와서 템플리트에서 철자하지는 않지만 나머지는 지금은 템플리트에서 정의합니다.
  2. 템플릿의 공급자 블록에서 "environment_vars"매개 변수를 사용하여 변수를 빌드 시스템에 전달합니다.
  3. "execute_command"매개 변수에 {{.Vars}}를 추가하면 스크립트 실행 전에 변수가 정의됩니다.
  4. aws cli (스크립트의 일부가 전달됨)를 설치하십시오.
  5. wget을 통해 meta_data에서 빌드 시스템의 instance_id를 가져 와서 env var에 할당하십시오.
  6. aws cli 명령을 실행하여 볼륨을 연결하고 템플릿에서 전달 된 env vars를 사용하여 명령 옵션과 wget 명령의 instance_id를 입력하십시오.
  7. 은 정상이 (가 장착하기 전에 몇 초 동안 잠을 가지고, 그것은 그렇지 않으면 표시되지 않습니다. 부착 할 약간의 시간이 걸리고 마운트가 실패합니다.)

완료를 탑재합니다.

누구든지 좀 더 우아한 방법을 가지고 있다면 ... 공유하십시오.

감사합니다.

+0

안녕 :

I'v도 도움이 예제를 발견? – asdoylejr

2

나는 ami_block_device_mappings이 필요하다고 생각합니다. 당신이이 솔루션의 전체 예제를 게시 할 수있는 기회를

http://grahamc.com/blog/packer-ami-device-volume-types/

+0

감사합니다. 그것은 저를위한 것을 조금 명확하게합니다. 나는 아직도 마운트 할 ebs 볼륨을 어떻게 지정할 수 있는지 알지 못한다. 이 방법으로 볼륨을 만들고 연결할 수 있지만 기존 볼륨을 연결하는 방법은 무엇입니까? 볼륨 ID를 지정하는 옵션이 표시되지 않습니다.이런 식으로 뭔가 : '{' ' 'DEVICE_NAME ":"는/dev/SDG ",' '"volume_id ":"권-XXXXX "' '}' –

+0

나는 그런 옵션이 표시되지 않습니다하지만 당신은 할 수 해당 볼륨의 스냅 샷이있는 경우 첨부 된 EBS 볼륨이있는 AMI를 만듭니다. 이 경우 "snapshot_id"옵션을 사용하십시오. – user1783757