如何通过AWS SDK for Go获取资源ARN及account-id、region信息
完全可以通过AWS SDK for Go获取资源ARN,对于DynamoDB表来说不需要手动拼接字段,SDK接口会直接返回完整ARN,单独获取region、account-id字段也有标准方法,具体操作如下:
获取DynamoDB表完整ARN
直接调用DynamoDB服务的DescribeTable接口,返回的Table结构体里自带TableArn字段,就是标准格式的完整表ARN,代码示例(基于AWS SDK for Go v2,目前官方推荐的主流版本):
package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/dynamodb" ) func main() { // 提前通过默认配置链加载AWS配置,自动读取凭证、区域等信息 cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic(err) } client := dynamodb.NewFromConfig(cfg) tableName := "你的目标表名" resp, err := client.DescribeTable(context.TODO(), &dynamodb.DescribeTableInput{ TableName: aws.String(tableName), }) if err != nil { panic(err) } // 直接拿到标准格式的表ARN tableArn := *resp.Table.TableArn fmt.Println("DynamoDB表ARN:", tableArn) }
如果需要获取当前账号下所有DynamoDB表的ARN,先调用ListTables接口拉取全量表名,循环对每个表名调用DescribeTable即可批量获取。
单独获取region与account-id字段
如果有手动拼接其他资源ARN的需求,可以通过以下方式拿到两个字段,不需要硬编码:
- 获取region:加载SDK配置得到的
aws.Config结构体中直接暴露了Region字段,即cfg.Region。SDK会自动按优先级从环境变量、本地AWS配置文件、云服务器实例元数据等位置加载正确的区域值,和你实际调用服务时使用的区域完全一致。 - 获取account-id:调用STS服务的
GetCallerIdentity接口即可,该接口无额外权限要求,只要当前使用的访问凭证有效就能调用,返回结果中的Account字段就是当前凭证对应的AWS账号ID,封装方法示例:
import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/sts" ) func getCurrentAccountId(cfg aws.Config) (string, error) { stsClient := sts.NewFromConfig(cfg) resp, err := stsClient.GetCallerIdentity(context.TODO(), &sts.GetCallerIdentityInput{}) if err != nil { return "", err } return *resp.Account, nil }
实操建议:优先使用各服务对应SDK接口直接返回的ARN字段,不要手动拼接。AWS不同服务的ARN格式存在细微差异,部分资源没有resource-type段、部分资源包含多级子路径,手动拼接很容易出现格式错误,直接取接口返回值是最稳妥的方式。
内容的提问来源于stack exchange,提问作者hmdevno
相关产品推荐
相关产品推荐

