无法在AWS目标组上注册目标



我正在尝试使用PowerShell设置自动DNS部署。我写了一个PowerShell脚本来创建目标组,将实例注册到TG,创建ALB并添加了听众。一旦完成,它就会创建R53 RecordSet并为Alb DNS创建A记录。我在将实例注册到目标组方面有问题。这是我的代码段:

$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:scriptsDistinct-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

我在此处检查了类似的帖子。以及相应的帖子,到目前为止,没有任何帮助。我想知道是否有人可以指导我做错了什么?

我试图一一运行每行,这恰好将实例注册到目标群,只是脚本失败。实例是T2.Micro,它们处于运行状态。

根据https://docs.aws.aws.amazon.com/sdkfornet/v3/apidocs/items/elasticloadbalancingv2/ttargetDescriptionv2/ttargetDescription.html-Amazon.elasticloadbalancingv2.model.targetDescription是关于"有关目标的信息" - 这意味着,如果您仔细查看属性,则应该分配一个实例ID:

avaibalieyzone system.string

ID System.String

端口系统.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"
}

最新更新