以前紹介した記事「cloud-initでUser Dataを使ってEC2を最初に起動した時のみ任意のスクリプトを実行する」にて
初回起動時に任意のスクリプトを実行できるようにしました。

そこで今回は、こちらの記事「VPCのNATインスタンスを作ってみる(iptables編)」で紹介している
EC2上のNATインスタンスの構築(iptables関連)を、初回起動時に自動で行ってみました。

構築スクリプトは以下を利用しています。

suz-lab-centos-ami:suz-lab_nat

#!/bin/sh
set -e
trap 'echo "NG: $?"' ERR
FROM="net.ipv4.ip_forward = 0"
TO="net.ipv4.ip_forward = 1"
cp /etc/sysctl.conf /etc/sysctl.conf.org
sed -e "s/$FROM/$TO/" /etc/sysctl.conf.org > /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE
service iptables save
service iptables start
chkconfig iptables on
exit 0

上記のスクリプトを、EC2起動時に次のように指定します。

#include-once
https://raw.github.com/suz-lab/suz-lab-centos-ami/master/share/cloud-init/suz-lab_nat

起動後ログインすると、下記のように確認できるはずです。

# service iptables status
テーブル: nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

上記作業はこちらのAMI「SUZ-LAB謹製 CentOS AMI (6.3.8 ap-northeast-1)」から
起動したEC2で行っているため、他の環境だと挙動が異なる可能性があります。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら