CrossplaneでAWS Route53のZoneリソースを作成すると、どのような情報が取得できるのか気になったので検証してみました。
本稿では、実際にZoneリソースを作成して得られる様々な情報(external-name、ネームサーバー、ARN、ゾーンID)について、具体的な値とその格納場所を紹介します。
結論
Zoneリソースを作成すると、以下の情報が取得できます:
- external-name: Route53のホストゾーンID(例:
Z00601612X8VLNNVAI1QZ
) - ネームサーバー: AWSが割り当てた4つのネームサーバー
- ARN: Amazon Resource Name
- ゾーンID: Route53のゾーン識別子
これらの情報は、Kubernetes上でのDNS管理や他のAWSリソースとの連携に活用できます。
検証環境
本稿では、以下の環境で検証を行いました:
- kind v0.26.0
- Crossplane v1.19.0
- AWS Provider for Route53 v1.20.1
- AWS CLIとRoute53の権限を持つIAMユーザー
検証環境の構築手順
1. 必要なツールのインストール
まず、以下のツールを準備します:
- Docker
- devbox(kind, kubectlを自動的に導入)
- AWS CLI
- Route53の権限を持つIAMユーザーのアクセスキー
2. kindクラスタの作成
kindを使って新しいKubernetesクラスタを作成します:
kind create cluster
3. Crossplaneのインストール
Helmを使ってCrossplaneをインストールします:
# Helmリポジトリの追加
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
# Crossplaneのインストール
helm install crossplane \
crossplane-stable/crossplane \
--namespace crossplane-system \
--create-namespace \
--version 1.19.0
# インストールの完了を待機
kubectl wait deployment -n crossplane-system crossplane \
--for=condition=Available \
--timeout=5m
4. AWS Route53 Providerのインストール
以下の内容でprovider.yaml
を作成します:
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-route53
spec:
package: xpkg.upbound.io/upbound/provider-aws-route53:v1.20.1
作成したProviderをインストールします:
kubectl apply -f provider.yaml
# インストールの完了を待機
kubectl wait provider.pkg.crossplane.io/provider-aws-route53 \
--for=condition=Healthy \
--timeout=5m
5. AWS認証情報の設定
AWS認証情報をSecretとして作成します:
kubectl create secret generic aws-secret \
--namespace crossplane-system \
--from-literal=credentials="[default]
aws_access_key_id = <YOUR_ACCESS_KEY>
aws_secret_access_key = <YOUR_SECRET_KEY>"
6. ProviderConfigの作成
以下の内容でprovider-config.yaml
を作成します:
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-secret
key: credentials
作成したProviderConfigを適用します:
kubectl apply -f provider-config.yaml
実際の検証手順
1. Route53 Zoneリソースの作成
以下の内容でzone.yaml
を作成します:
apiVersion: route53.aws.upbound.io/v1beta1
kind: Zone
metadata:
name: example-zone
spec:
forProvider:
name: example.test
region: ap-northeast-1
注意: .test
はRFC 6761で定義された特別用途ドメインで、検証環境に最適です。実際の運用では、自分が所有する正規のドメインを使用してください。
Zoneリソースを作成します:
# Zoneリソースの作成
kubectl apply -f zone.yaml
# Readyの状態になるまで待機
kubectl wait zone example-zone --for=condition=Ready --timeout=5m
2. 作成されたリソースの確認
Zoneリソースの状態を確認します:
kubectl get zone example-zone -o yaml
検証結果の詳細
1. external-nameの値
metadata.annotations
のcrossplane.io/external-name
には、Route53のホストゾーンIDが格納されます:
metadata:
annotations:
crossplane.io/external-name: Z00601612X8VLNNVAI1QZ
このIDは、AWS Route53で作成されたホストゾーンを一意に識別する文字列です。
2. ネームサーバー情報
ネームサーバー情報はstatus.atProvider
に2つの形式で格納されます:
status:
atProvider:
nameServers:
- ns-1004.awsdns-61.net
- ns-1221.awsdns-24.org
- ns-1879.awsdns-42.co.uk
- ns-207.awsdns-25.com
primaryNameServer: ns-207.awsdns-25.com
-
nameServers
: AWSが割り当てた4つのネームサーバーの配列 -
primaryNameServer
: プライマリとして指定されたネームサーバー
3. ARN(Amazon Resource Name)
ARNはstatus.atProvider.arn
に以下の形式で格納されます:
status:
atProvider:
arn: arn:aws:route53:::hostedzone/Z00601612X8VLNNVAI1QZ
4. ゾーンID
ゾーンIDはstatus.atProvider
内の2箇所に同じ値が格納されます:
status:
atProvider:
id: Z00601612X8VLNNVAI1QZ
zoneId: Z00601612X8VLNNVAI1QZ
クリーンアップ
検証が終わったら、以下の手順でリソースを削除します:
# Route53 Zoneの削除
kubectl delete zone example-zone
# kindクラスタの削除
kind delete cluster
まとめ
CrossplaneでRoute53のZoneリソースを作成すると、様々な有用な情報が自動的に取得できることがわかりました。これらの情報は、Kubernetes上でのDNS管理や他のAWSリソースとの連携に活用できます。
特に、ネームサーバー情報が自動的に取得できる点は、DNSの設定を自動化する際に非常に便利です。また、ゾーンIDやARNも他のリソースから参照できるため、Kubernetes上でのDNS管理をより柔軟に行えます。
本稿の内容が、CrossplaneでのAWS Route53管理の参考になれば幸いです。最後までお読みいただき、ありがとうございました。