Last active
December 27, 2020 15:07
-
-
Save krymtkts/7774bb65f2f0351697a47383aefe9ec9 to your computer and use it in GitHub Desktop.
Create or update sub domain hosted zone with Amazon Route 53.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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