Site icon Mr. 沙先生

AWS 用 packer 來 build AMI

這篇拖了好久才寫 … 算是補上使用記錄

 

packerHashiCorp 的產品,是一個專門拿來 build machine images 的工具,packer 支援許多目前主流的虛擬環境,如 AWS EC2、Azure、Docker、Openstack .. 等等,詳細可以看 Builders

 

其實 packer 的運作原理是透過各種 virtual machine 的 API or CLI 來建立 machine images,用簡單的 json 設定把這些動作自動化。

 

packer 主要就是一個 json 檔案,這個 json 包括:

 

柿子挑軟的吃,先用最簡單的 AWS EC2 來 build AMI,在開始 build 之前可以先看 shazi7804/packer-aws-ami 這邊的範本。

 

packer build AWS AMI

首先產生一個 packer_build.json:

{
  "builders": [
    {
      "type": "amazon-ebs",
      "access_key": "請用自己的key",
      "secret_key": "請用自己的key",
      "region": "us-west-2",
      "source_ami": "拿來做基底的AMI-ID",
      "instance_type": "t2.micro",
      "ssh_username": "ec2-user",
      "ami_name": "packer {{timestamp}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "script": "packer_ami.sh"
    }
  ]
}

最基本的 json 會像這樣,然後填上建立的 IAM User access/secret key,還有你要拿來當底的 source ami id,例如 Amazon Linux。

 

然後我在 json 中使用的 provisioners 是 shell,所以會在產生一個 packer_ami.sh 的 script

#!/bin/bash
sudo yum update
sudo yum install httpd php
sudo service httpd start
sudo chkconfig httpd on

用來安裝 apache

 

第三個步驟就直接來用 packer build,先確認檔案在同一個目錄

$ find 
/packer_ami.sh
/packer_build.json

 

開始 build

$ ./packer build packer_build.json

 

如果設定沒有錯誤的話,你就可以看到 packer 開始在 build,實際上他就是幫你

  1. launch instance
  2. assign security group / key pair
  3. execute packer_ami.sh
  4. instance stop
  5. create AMI images
  6. terminate instances
  7. delete security group / key pair

 

build 成功以後你會在 instances 那邊看到有 “Packer build” 標籤而且被 terminate 的 instances,所以 packer 其實並不是幫你直接建立 AMI,build 一次 packer 基本的收費就是 1 hour 的 ec2 費用加上 AMI 的保存費用。

 

除此之外 packer 還可以指定 vpc, subnet, security groups,如果都沒有設定,他會使用 default VPC (如果你不小心砍掉 VPC 就悲劇了,必須指定vpc, subnet, security groups)

 

HashiCorp 出了蠻多好用的工具,之後會陸陸續續在記錄 HashiCorp 的其他工具,有助於 DevOps 和自動化的推進。

 

 

 

Exit mobile version