簡體   English   中英

從 ARN 中提取資源 ID

[英]Extract resource-id from ARN

我在 AWS 文檔中看到 ARN 格式是:

arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id

我正在嘗試從 ARN 中獲取resource-id

以下代碼有效,但丑陋......

我正在尋找如何改進它:

func GetResourceNameFromARN(roleARN string) string {
    if parsedARN, err := arn.Parse(roleARN); err == nil {
        return parsedARN.Resource
    }

    return ""
}

func extractResourceId(arn string) string {
    resource := GetResourceNameFromARN(arn)
    switch len(strings.Split(resource, "/")) {
    case 1:
        switch len(strings.Split(resource, ":")) {
        case 2:
            return strings.Split(resource, ":")[1]
        }

    case 2:
        return strings.Split(resource, "/")[1]

    }
    return resource
}

我會建議一個簡單的正則表達式:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    // Compile the expression once, usually at init time.
    // Use raw strings to avoid having to quote the backslashes.
    var validID = regexp.MustCompile(`[^:/]*$`)

    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-id"))
    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-type/resource-id"))
    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-type:resource-id"))
}

此處查看演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM