複数のドメイン名を持つ DHCP オプションセットを CloudFormation で作成してみた

複数のドメイン名を持つ DHCP オプションセットを CloudFormation で作成した際にハマりどころがありました
2023.03.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

たぬき( @tanuki_tzp )です。

複数のドメイン名を持つ、DHCP オプションセットを CloudFormation で作成したくなったので、テンプレートを作成しました。

DHCP オプションセットについて

DHCP オプションセットでは、複数のドメインをスペース区切りで設定することができます。
ただし、OS のタイプによっては、複数ドメインとして判定されず、単一のドメインとして判定されてしまう場合があるため注意してください。

一部の Linux オペレーティングシステムでは、複数のドメイン名をスペースで区切って指定できます。ただし、他の Linux オペレーティングシステムや Windows では、この値は単一のドメインとして処理されるため、予期しない動作の原因となります。DHCP オプションセットが、すべて同じオペレーティングシステムを実行しているわけではないインスタンスを含む VPC に関連付けられている場合は、ドメイン名を 1 つだけ指定します。

CloudFormation テンプレート

早速、テンプレートです。

AWSTemplateFormatVersion: '2010-09-09'
Description: Create Dhcp

Parameters:
  Hostzone:
    Type: String

Resources:
  DhcpOptions:
    Type: AWS::EC2::DHCPOptions
    Properties:
      DomainName: !Join ["", ["ap-northeast-1.compute.internal ", !Ref Hostzone]]
      DomainNameServers: 
        - AmazonProvidedDNS

このテンプレートでは、デフォルトの"ap-northeast-1.compute.internal"と、追加のホストゾーンの 2 つのドメインを設定しています。
DomainName で Sub 関数を使用してしまうと配列として判定されてしまいエラーになってしまうので、Join 関数を使用するのがコツです。

実際の実行結果は以下です。
(※検証として、"test.test"をドメイン名として設定しています)

終わりに

私はよく Sub 関数を使用しているので、Sub 関数が配列として判定されてしまうのがハマりどころでした。
DHCPオプションセットを特殊パターンで作成したいタイミングはなかなかないかと思いますが、いつか誰かのお役に立てれば幸いです。