4

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

$topicarn = New-SNSTopic -Name "$deployedAppVersion-$environment-Events"

上面的问题是如果我弄错了 $deployedAppVersion 它会在不应该的地方创建一个 SNS 主题。

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

有没有更好的办法?

4

1 回答 1

3

Get-SNSTopic确实存在,但它看起来像映射到列表主题API 并简单地返回 ARN 列表——您所描述的行为。API 和 CLI 似乎有类似的限制。

您可以通过包装Get-SNSTopicAttribute将 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 返回Dictionary<string, string>有关该主题的有用信息,如果该主题不存在,也会出错。这似乎更接近你什么。

您可以通过密钥访问获取各个部分:

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)
于 2015-08-21T13:31:59.837 回答