Skip to content

Instantly share code, notes, and snippets.

@krymtkts
Last active December 27, 2020 15:07
Show Gist options
  • Save krymtkts/7774bb65f2f0351697a47383aefe9ec9 to your computer and use it in GitHub Desktop.
Save krymtkts/7774bb65f2f0351697a47383aefe9ec9 to your computer and use it in GitHub Desktop.
Create or update sub domain hosted zone with Amazon Route 53.
param (
[Parameter(Mandatory = $True)]
[string]
$SubDomainName
)
if (!$SubDomainName) {
exit -1
}
Import-Module AWSPowerShell.NetCore
# Split domain. ex) 'abc.def.com' -> 'abc' 'def.com'
$Child, $Parent = $SubDomainName.Split('.', 2)
if (($Child -eq '') -or ($Parent -eq '')) {
Write-Error "invalid domain name. $Child, $Parent"
exit -1
}
# Get or Create subdomain hosted zone.
$res = Get-R53HostedZones | Where-Object Name -like "$SubDomainName*" | Get-R53HostedZone
if (!$res) {
$res = New-R53HostedZone -Name $SubDomainName -CallerReference (Get-Date).ToString('yyyyMMddHHmmssfff')
}
# Register NS record to parent hosted zone.
$ParentHostedZone = Get-R53HostedZones | Where-Object Name -like "$Parent*"
# Beware! NS record only allows Simple routing.
# https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html
$Resource = New-Object Amazon.Route53.Model.ResourceRecordSet
$Resource.Name = $SubDomainName
$Resource.Type = "NS"
$Resource.ResourceRecords = @(
(New-Object Amazon.Route53.Model.ResourceRecord($res.DelegationSet.NameServers[0])),
(New-Object Amazon.Route53.Model.ResourceRecord($res.DelegationSet.NameServers[1])),
(New-Object Amazon.Route53.Model.ResourceRecord($res.DelegationSet.NameServers[2])),
(New-Object Amazon.Route53.Model.ResourceRecord($res.DelegationSet.NameServers[3]))
)
$Resource.TTL = 300
if (((Get-R53ResourceRecordSet -HostedZoneId $ParentHostedZone.Id).ResourceRecordSets `
| Where-Object Name -like "$SubDomainName*").Count -eq 0) {
$Action = [Amazon.Route53.ChangeAction]::CREATE
}
else {
$Action = [Amazon.Route53.ChangeAction]::UPSERT
}
$Change = New-Object Amazon.Route53.Model.Change ($Action, $Resource)
# Execute
Edit-R53ResourceRecordSet -HostedZoneId $ParentHostedZone.Id -ChangeBatch_Change $Change
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment