2014-09-10 52 views
2

我不確定這是否是正確的方法,但是我期望做的是縮短包裝工製作圖像的時間。其中一個步驟是複製一些10GB的數據並將其作爲圖像的一部分。目前我正在使用一個shell供應商將這個映射到映像中。這需要很長時間。相反,我想讓這些數據已經存儲在EBS卷中,並可以在構建時附加。由於它將作爲一個塊設備安裝在亞馬遜自己的網絡中,因此傳輸速度將比sftp快得多。在編譯期間用包裝器附加ebs的體積

我試過在封隔器中搜索這樣一種方法,但沒有太多。我將嘗試查看是否可以在amazon-ebs構建器中使用ami_block_device_mappings可選參數來附加ebs卷。

如果有更好的方法,我不知道請讓我知道。謝謝。

回答

2

所以它看起來像外殼提供者是現在走的路。外殼提供者似乎像這樣的東西趕上:)。儘管如此,在amazon-ebs構建器中有一個參數會很好。例如像「attach_ebs_volume」。無論如何,這是我是如何做到的:

  1. 將AWS信息(ebs_volume,instance_id等..)添加到模板的變量部分。我確實從ENV中取出了訪問和祕密密鑰,因此它不會在模板中拼寫出來,但其餘的我現在只是在模板中進行定義。
  2. 在模板的置備程序塊中使用「environment_vars」參數將變量傳遞給構建機器。
  3. 將{{.Vars}}添加到「execute_command」參數中,以便在腳本運行之前定義變量。
  4. 安裝aws cli(被傳遞的腳本的一部分)
  5. 從meta_data通過wget獲取構建機器的instance_id並將其分配給env var。
  6. 發出aws cli命令來附加捲,並使用從模板傳遞的env vars填充命令選項以及wget命令中的instance_id。
  7. 安裝正常(必須安裝它睡覺前幾秒鐘,它需要一點時間來連接,否則將無法看到它,並安裝會失敗。)

完成。

如果有人有更優雅的方式...請分享。

謝謝。

+0

嗨,你可以發佈這個解決方案的一個完整的例子任何機會呢? – asdoylejr 2018-02-04 21:15:53

2

我認爲ami_block_device_mappings是你需要的。

心中已經也發現了這個例子幫助:

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

+0

謝謝。這確實爲我澄清了一點。我仍然沒有得到我如何指定要安裝的ebs卷。我認爲這允許您創建和附加音量,但您如何附加現有音量?我沒有看到指定卷ID的選項。事情是這樣的: ''{' 「DEVICE_NAME」: 「的/ dev/SDG」,'' 「volume_id」: 「第一卷-XXXXX」'' }' – 2015-02-12 00:31:00

+0

我沒有看到這樣的選擇,但你可以如果您有該卷的快照,請創建帶有附加EBS卷的AMI。在這種情況下,使用選項「snapshot_id」。 – user1783757 2015-02-12 09:06:15