AWS Powershell-按名称获取SNS主题

AWS Powershell-按名称获取SNS主题,powershell,amazon-web-services,amazon-sns,aws-powershell,Powershell,Amazon Web Services,Amazon Sns,Aws Powershell,除了对已创建的主题执行以下操作外,我找不到按名称检索SNS主题的方法: $topicarn = New-SNSTopic -Name "$deployedAppVersion-$environment-Events" 上面的问题是,如果我把$deployedAppVersion搞错了,它会创建一个不应该出现的SNS主题 我一直在寻找一个“Get SNSTopic”,但我认为它不存在。我能看到的唯一替代方法是列出所有主题的一个大脏列表,并在其中搜索包含我想要的名称的arn 有更好的方法吗?确实存

除了对已创建的主题执行以下操作外,我找不到按名称检索SNS主题的方法:

$topicarn = New-SNSTopic -Name "$deployedAppVersion-$environment-Events"
上面的问题是,如果我把$deployedAppVersion搞错了,它会创建一个不应该出现的SNS主题

我一直在寻找一个“Get SNSTopic”,但我认为它不存在。我能看到的唯一替代方法是列出所有主题的一个大脏列表,并在其中搜索包含我想要的名称的arn

有更好的方法吗?

确实存在,但它似乎映射到API并简单地返回一个ARN列表,即您描述的行为。API和CLI似乎有类似的限制

通过包装将arn拆分为多个部分,您可以从功能上获得所需:

Function Get-SNSTopicByName
{
    param
    (
        [string]$Region = 'us-east-1',
        [string]$AWSAccountNumber = '123456781234',
        [string]$TopicName
    )

    $topicArn = "arn:aws:sns:$($Region):$($AWSAccountNumber):$($TopicName)"

    Get-SNSTopicAttribute -TopicArn $topicArn
}

Get-SNSTopicByName -TopicName "my-topic"
Get-SNSTopicAttribute返回有关主题的有用信息的
字典,如果该主题不存在,也会出错。这似乎更接近于你所说的

您可以通过以下键访问单个零件:

PS C:/> $result = Get-SNSTopicByName -TopicName "my-topic"
PS C:/> $result["TopicArn"]
arn:aws:sns:us-east-1:123456781234:my-topic
PS C:/> $result["DisplayName"]
My Test Topic (Dev)

这听起来很完美。谢谢你的帮助。