awscliでVPCのDHCP Options Setの設定をする
VPCにはDHCP Options Setという機能があり、DHCPで設定される設定をカスタマイズ出来ます。
今回はawscliでの設定方法と、カスタマイズされた設定の確認をしたいと思います。
環境構築
VPCの作成
$ aws ec2 create-vpc --cidr-block 10.0.0.0/16 --instance-tenancy default --region ap-northeast-1
{
"Vpc": {
"InstanceTenancy": "default",
"State": "pending",
"VpcId": "vpc-aa4958c8",
"CidrBlock": "10.0.0.0/16",
"DhcpOptionsId": "dopt-03c5a56a"
}
}VPCのDNS SupportとDNS Hostnamesを有効にします。
$ aws ec2 modify-vpc-attribute --vpc-id vpc-aa4958c8 --enable-dns-support "{\"Value\":true}" --region ap-northeast-1
{
"return": "true"
}
$ aws ec2 modify-vpc-attribute --vpc-id vpc-aa4958c8 --enable-dns-hostnames "{\"Value\":true}" --region ap-northeast-1
{
"return": "true"
}VPC Subnetを作成します。
$ aws ec2 create-subnet --cidr-block 10.0.0.0/24 --vpc-id vpc-aa4958c8 --availability-zone ap-northeast-1a --region ap-northeast-1
{
"Subnet": {
"VpcId": "vpc-aa4958c8",
"CidrBlock": "10.0.0.0/24",
"State": "pending",
"AvailabilityZone": "ap-northeast-1a",
"SubnetId": "subnet-e71f1685",
"AvailableIpAddressCount": 251
}
}カスタマイズしたDHCP Options Setを作成し、VPCに割り当てます
$ aws ec2 create-dhcp-options --dhcp-configuration \
"Key=domain-name,Values=okochang.com" \
"Key=domain-name-servers,Values=8.8.8.8,8.8.4.4" \
"Key=ntp-servers,Values=210.173.160.27" \
--region ap-northeast-1
{
"DhcpOptions": {
"DhcpConfigurations": [
{
"Values": [
"210.173.160.27"
],
"Key": "ntp-servers"
},
{
"Values": [
"okochang.com"
],
"Key": "domain-name"
},
{
"Values": [
"8.8.4.4",
"8.8.8.8"
],
"Key": "domain-name-servers"
}
],
"DhcpOptionsId": "dopt-8bf1f9e9"
}
}
$ aws ec2 associate-dhcp-options --vpc-id vpc-aa4958c8 --dhcp-options-id dopt-8bf1f9e9 --region ap-northeast-1
{
"return": "true"
}Internet Gatewayを作成し、VPCに割り当てます
$ aws ec2 create-internet-gateway --region ap-northeast-1
{
"InternetGateway": {
"Tags": [],
"InternetGatewayId": "igw-d6796cb4",
"Attachments": []
}
}
$ aws ec2 attach-internet-gateway --vpc-id vpc-aa4958c8 --internet-gateway-id igw-d6796cb4 --region ap-northeast-1
{
"return": "true"
}Route Tableを作成し、VPCに割り当て、Internet Gatewayにルーティングをします。
$ aws ec2 create-route-table --vpc-id vpc-aa4958c8 --region ap-northeast-1
{
"RouteTable": {
"Associations": [],
"RouteTableId": "rtb-545b4b36",
"VpcId": "vpc-aa4958c8",
"PropagatingVgws": [],
"Tags": [],
"Routes": [
{
"GatewayId": "local",
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active"
}
]
}
}
$ aws ec2 associate-route-table --subnet-id subnet-e71f1685 --route-table-id rtb-545b4b36 --region ap-northeast-1
{
"AssociationId": "rtbassoc-950010f7"
}
$ aws ec2 create-route --route-table-id rtb-545b4b36 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-d6796cb4 --region ap-northeast-1
{
"return": "true"
}Security Groupに作成し、ルールを追加します
$ aws ec2 create-security-group --group-name okochang-group --description "test security group" --vpc-id vpc-aa4958c8 --region ap-northeast-1
{
"return": "true",
"GroupId": "sg-654c5007"
}
$ aws ec2 authorize-security-group-ingress --group-id sg-654c5007 --cidr 0.0.0.0/0 --protocol tcp --port 22 --region ap-northeast-1
{
"return": "true"
}接続用のSSHキーを作成します
$ aws ec2 create-key-pair --key-name okochang-key --region ap-northeast-1
{
"KeyMaterial": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIqr00==中略==JRGHg2o6kls0w==\n-----END RSA PRIVATE KEY-----",
"KeyName": "okochang-key",
"KeyFingerprint": "11:aa:22:bb:33:cc:44:dd:55:ee:66:ff:77:gg:88:hh:99:ii:10:jj"
}動作確認用のインスタンスを起動します
$ aws ec2 run-instances \
--image-id ami-0d13700c \
--key-name okochang-key \
--security-group-ids sg-654c5007 \
--instance-type t1.micro \
--subnet-id subnet-e71f1685 \
--disable-api-termination \
--instance-initiated-shutdown-behavior stop \
--private-ip-address 10.0.0.10 \
--associate-public-ip-address --region ap-northeast-1
{
"OwnerId": "12345678910",
"ReservationId": "r-f48d4cf1",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"KernelId": "aki-176bf516",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2014-01-25T12:58:08.000Z",
"PrivateIpAddress": "10.0.0.10",
"ProductCodes": [],
"VpcId": "vpc-aa4958c8",
"StateTransitionReason": null,
"InstanceId": "i-eaae01ef",
"ImageId": "ami-0d13700c",
"PrivateDnsName": "ip-10-0-0-10.ap-northeast-1.compute.internal",
"KeyName": "okochang-key",
"SecurityGroups": [
{
"GroupName": "okochang-group",
"GroupId": "sg-654c5007"
}
],
"ClientToken": null,
"SubnetId": "subnet-e71f1685",
"InstanceType": "t1.micro",
"NetworkInterfaces": [
{
"Status": "in-use",
"SourceDestCheck": true,
"VpcId": "vpc-aa4958c8",
"Description": null,
"NetworkInterfaceId": "eni-e9beaa8b",
"PrivateIpAddresses": [
{
"PrivateDnsName": "ip-10-0-0-10.ap-northeast-1.compute.internal",
"Primary": true,
"PrivateIpAddress": "10.0.0.10"
}
],
"PrivateDnsName": "ip-10-0-0-10.ap-northeast-1.compute.internal",
"Attachment": {
"Status": "attaching",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-41085c44",
"AttachTime": "2014-01-25T12:58:08.000Z"
},
"Groups": [
{
"GroupName": "okochang-group",
"GroupId": "sg-654c5007"
}
],
"SubnetId": "subnet-e71f1685",
"OwnerId": "12345678910",
"PrivateIpAddress": "10.0.0.10"
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1a"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "paravirtual",
"RootDeviceType": "ebs",
"AmiLaunchIndex": 0
}
]
}
動作確認
resolv.confやntp.confを見るとDHCP Option Setで指定した値が/sbin/dhclient-scriptスクリプトによって設定されたことが分かります。
$ cat /etc/resolv.conf ; generated by /sbin/dhclient-script search okochang.com nameserver 8.8.4.4 nameserver 8.8.8.8 $ tail -3 /etc/ntp.conf interface listen eth0 interface ignore ipv6 server 210.173.160.27 # added by /sbin/dhclient-script