Невозможно зарегистрировать цели в целевой группе AWS - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь настроить автоматическое развертывание DNS с помощью powershell. Я написал сценарий powershell, который создает TargetGroup, регистрирует экземпляры в TG, создает ALB и добавляет к нему прослушиватель. Как только это будет сделано, он создает R53 RecordSet и создает запись A в ALB DNS. У меня проблемы с регистрацией экземпляров в TargetGroup. Это мой фрагмент кода к этому разделу:

$searchFor1 =@( @{name = 'tag:Name'; values = $target1})
$searchFor2 =@( @{name = 'tag:Name'; values = $target2})

$id1 = (Get-EC2Instance -Filter $searchFor1).Instances | select InstanceId
$id2 = (Get-EC2Instance -Filter $searchFor2).Instances | select InstanceId

# Create Target Group

$tg = New-ELB2TargetGroup -TargetType "instance" -HealthyThresholdCount 4 -Name $custname -Port $siteport -Protocol "HTTP" -UnhealthyThresholdCount 4 -VpcId $vpcid
Start-Sleep -s 120
$addid1 = New-Object Amazon.ElasticLoadBalancingV2.Model.TargetDescription
$addid2 = New-Object Amazon.ElasticLoadBalancingV2.Model.TargetDescription
$addid1.Id = $id1.InstanceId
$addid2.Id = $id2.InstanceId
$addid1.Port = $siteport
$addid2.Port = $siteport
$tgarn = (Get-ELB2TargetGroup -Name $custname).TargetGroupArn
Register-ELB2Target -TargetGroupArn $tgarn -Target @($addid1)
Register-ELB2Target -TargetGroupArn $tgarn -Target @($addid2)

Выдает ниже ошибки:

Register-ELB2Target : An instance ID must be specified
At C:\scripts\Distinct-DNS-Deployment.ps1:107 char:1
+ Register-ELB2Target -TargetGroupArn $tgarn -Target @($addid1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...LB2TargetCmdlet:RegisterELB2TargetCmdlet) [Register
   -ELB2Target], InvalidOperationException
    + FullyQualifiedErrorId : Amazon.ElasticLoadBalancingV2.AmazonElasticLoadBalancingV2Exception,Amazon.PowerShell.Cm
   dlets.ELB2.RegisterELB2TargetCmdlet

Я проверил аналогичный пост здесь . И соответствующие посты, пока ничего не помогли. Мне интересно, если кто-нибудь может мне помочь, что я делаю не так?

Я попытался запустить каждую строку одну за другой, и это происходит, чтобы зарегистрировать экземпляр в TargetGroup, только сценарий завершается ошибкой. Экземплярами являются t2.micro, и они находятся в рабочем состоянии.

1 Ответ

0 голосов
/ 10 марта 2019

Согласно https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/ElasticLoadBalancingV2/TTargetDescription.html - Amazon.ElasticLoadBalancingV2.Model.TargetDescription - это «Информация о цели» - Это означает, что вы должны назначить один идентификатор экземпляра. Также, если вы внимательно посмотрите на свойства:

НаличиеЗона System.String

Id System.String

Порт System.Int32

Результатом поиска в вашем экземпляре может быть или не быть один выход - вы должны держать их в цикле, чтобы создать каждую цель с помощью TargetDescription

$Instances = (Get-EC2Instance -Filter @{Name="tag:auto-delete";Value="no"}).instances |select instanceid

$theVpc = get-ec2vpc -VpcId vpc-4565e5c4
$name = "new-tg"
$port = "80"
$protocol = "HTTP"

$tg = New-ELB2TargetGroup -TargetType "instance" -HealthyThresholdCount 4 -Name $name -Port $port -Protocol "HTTP" -UnhealthyThresholdCount 4 -VpcId $theVpc.VpcId
$tgarn = (Get-ELB2TargetGroup -Name $name).TargetGroupArn

If($instances -ne $null){
    foreach ($instance in $instances ){
        $addid1 = New-Object Amazon.ElasticLoadBalancingV2.Model.TargetDescription
        $addid1.Id = $Instance.instanceid
        $addid1.Port = $port
        Register-ELB2Target -TargetGroupArn $tgarn -Target @($addid1)
        Remove-Variable addid1
    }
}
else {
    echo "There were no instances with the matching filter"
}
...