Customize AWS CentOS AMI

一開始接觸 AWS EC2 的時候,使用 Amazon 客製過的 AMI,後來也使用過其客製過的Ubuntu AMI,不過因為公司內部系統是採用 CentOS,再加上想要搭配 AWS CloudFormation 一起來使用,因此從 AMI Marketplace 挑選了 CentOS 官方出版的 AMI,使用 AWS 官方提供的 CloudFormation + Chef 的 template 後,按下 Create 按鈕後死傷慘重,不管是 CloudFormation template 或者是 AMI 本身都改了一堆東西才能跑,而這篇文章先著重於:假如你想要客製化一個 CentOS 的 AMI 在 AWS 上面開開心心的使用 Chef,到底需要安裝哪些咚咚?!

  • 首先把這幾個常用的東西用 yum 安裝好
$ yum install vim
$ yum install wget
$ yum install telnet
$ yum install unzip
  • 接下來將所有的 yum package 更新,以避免遇到甚麼 vulnerability
$ yum update
  • 把 selinux 關掉,不然 Apache 架起來可能會鬼擋牆
$ vim /etc/selinux/config
# update the SELINUX from enforcing to disabled
# e.g. SELINUX=disabled
  • 清空 iptable,因為怕 AMI 有預設的 iptable,會導致連線不如預期
$ iptables --flush
$ service iptables save
$ service iptables stop
$ service iptables start

# 看看是不是真的清空了
$ iptables --list
  • 安裝 Cloud-init 這樣才能夠執行 User Data 和一些小型的 provision task
$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ rpm -Uvh epel-release-6-8.noarch.rpm
$ yum install cloud-init
  • 更改預設 ssh 的登入帳號,而其實這也是 Cloud-init 的功能之一
  • 首先新增好自己喜愛的帳號
$ useradd #{帳號}
  • 接下來打開 Cloud-init 的 Configuration,找到 default_user 的 section,並且修改如下:
$ vim /etc/cloud/cloud.cfg
default_user:
name: #{帳號}
lock_passwd: true
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
  • 安裝 cfn-init,CloudFormation 常此來做簡單的 provision
$ wget https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz
$ tar -zxv -f aws-cfn-bootstrap-latest.tar.gz
$ cd aws-cfn* && python setup.py install
  • 安裝 s3cmd,用來抓取存放於 AWS S3 檔案的 Command line tool
wget http://s3tools.org/repo/RHEL_6/s3tools.repo
mv s3tools.repo /etc/yum.repos.d/
yum install s3cmd
  • 安裝 Chef Client,至於要做什麼大家應該都知道啦
  • 首先安裝 Chef-Client package
curl -L https://www.opscode.com/chef/install.sh | bash
  • 產生放置 Configuration 的 folder
mkdir /etc/chef
  • 把 Chen-Client init script 複製一份到正確的位置
cp /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-#{版本號}/distro/redhat/etc/init.d/chef-client /etc/init.d/
chmod 755 /etc/init.d/chef-client
  • 把 script 打開稍作修改,不然 Chef-Client 的 interval 會被寫死在這份 script 裡
vim /etc/init.d/chef-client
# 把啟動 chef-client 的那行 command 改成像下面這樣:
daemon chef-client -d -c "$config" -P "$pidfile" -s "$splay" "$options"
  • 產生 Chef-client log 的歸屬之處
mkdir -p /var/log/chef/
touch /var/log/chef/client.log
  • 然後把不必要的檔案刪除
rm -rf ~/*
  • 最後再到 EC2 的 Console 按右鍵選擇 Create Image 就大功告成了!!

不過這些只是我個人覺得需要的東西,假如您有其他常用的tool或是設定都可以自己再做更改 ^^

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s