使用Packer自动构建AMI,并设置图像调整大小服务器

首先

本次介紹我們將通過Packer自動化來構建nginx伺服器並引入SmallLight模組。

Packer是指一个软件工具。

Packer是一款用于自动创建和管理机器映像的命令行工具,这次我们将使用它来自动生成AMI,并在EC2实例上构建一个安装了SmallLight模块的nginx服务器。

Packer的安装。

有关Packer的安装,请参考下述内容。

Packer的配置方式。

模板:这是一个Packer的配置文件,采用Json格式。

构建者:描述要创建的镜像类型和详细配置。本次任务是从EC2实例创建AMI。

供应者:在生成镜像时,对镜像内的配置进行操作。可以使用Shell脚本、Chef或Puppet等进行配置。本次任务使用Shell脚本进行配置。

为了使用Packer,首先需要创建一个模板。

{
  "builders": [{
    "type": "amazon-ebs",
    "region": "us-west-2",
    "vpc_id": "×××",
    "subnet_id" : "subnet-×××",
    "source_ami": "ami-×××",
    "security_group_ids": ["×××"],
    "instance_type": "t2.micro",
    "ssh_username": "ec2-user",
    "ssh_timeout": "5m",
    "ami_name": "×××"
  }],
"provisioners": [{
    "type": "shell",
    "inline": [
        "yum -y update"
        ] },
    {
    "type": "shell",
    "scripts": [
        "install_package.sh",
        "install_nginx.sh",
        "install_nginx_SmallLight.sh",
        "set_nginx_SmallLight.sh",
        "set_nginx_configure.sh",
        "nginx_chkconfig.sh"
        ]
  }]
}

我将创建一个使用SmallLight模块进行nginx服务器构建的shell脚本。

SmallLight是一个可以动态生成缩略图的nginx模块(也可用于Apache)。
它可以将图片调整为指定的尺寸。
在构建nginx + SmallLight时需要安装必要的模块。

#!/bin/bash 
yum install -y pcre-devel zlib-devel openssl-devel gd-devel
yum install -y ImageMagick ImageMagick-devel
yum install http://pkgs.repoforge.org/imlib2/imlib2-1.4.4-1.el6.rf.x86_64.rpm http://pkgs.repoforge.org/imlib2/imlib2-devel-1.4.4-1.el6.rf.x86_64.rpm
yum install -y libunwind perl-ExtUtils-Embed gperftools gperftools-libs gperftools-devel libxslt libxslt-devel GeoIP GeoIP-devel

nginx 下载

#!/bin/bash 
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxfv nginx-1.6.2.tar.gz

小光下载

#!/bin/bash 
git clone https://github.com/cubicdaiya/ngx_small_light.git /home/ec2-user/nginx-1.6.2./ngx_small_light
cd /home/ec2-user/nginx-1.6.2./ngx_small_light

小輕的設置

#!/bin/bash
./set up

编译 Nginx

#!/bin/bash 
cd /home/ec2-user/nginx-1.6.2./
./configure --with-pcre --add-module=./ngx_small_light --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module
make
make install

因此,完成了一個可以建立使用SmallLight模塊的nginx的腳本。

供应商的描述

将编写的 Shell 脚本放置在模板的 “Provisioners” 中(请参考 packer.json)。
在 Packer 构建时,将执行脚本。

打包器命令

执行Packer构建。
packer build packer.json
将创建镜像。

AMI确认

在执行`packer build`后,最后会显示生成的AMI的ID。
如果你能在AWS的管理控制台上确认,那么你的定制AMI就完成了。

广告
将在 10 秒后关闭
bannerAds