如何通过aws-sdk-go根据名称获取EFS文件系统访问点ARN?
解决方案:使用DescribeAccessPoints API按名称查询访问点ARN
你不需要通过文件系统ID查询访问点,直接调用EFS的DescribeAccessPoints API即可按访问点名称过滤,获取对应的ARN。具体实现如下:
- 构造
DescribeAccessPointsInput,通过Filters指定按访问点名称过滤,过滤器名称为access-point-name,值为你的目标访问点名称。 - 调用
DescribeAccessPoints方法获取结果,遍历返回的访问点列表提取ARN。
示例代码
package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/efs" "github.com/aws/aws-sdk-go/aws/awserr" ) func main() { // 创建EFS客户端,替换为你的AWS区域 svc := efs.New(session.New(&aws.Config{Region: aws.String("us-west-2")})) targetAccessPointName := "your-access-point-name" // 替换为你的访问点名称 // 构造查询输入,按访问点名称过滤 input := &efs.DescribeAccessPointsInput{ Filters: []*efs.Filter{ { Name: aws.String("access-point-name"), Values: []*string{ aws.String(targetAccessPointName), }, }, }, } result, err := svc.DescribeAccessPoints(input) if err != nil { if aerr, ok := err.(awserr.Error); ok { switch aerr.Code() { case efs.ErrCodeBadRequest: fmt.Println(efs.ErrCodeBadRequest, aerr.Error()) case efs.ErrCodeInternalServerError: fmt.Println(efs.ErrCodeInternalServerError, aerr.Error()) case efs.ErrCodeAccessPointNotFound: fmt.Println(efs.ErrCodeAccessPointNotFound, aerr.Error()) default: fmt.Println(aerr.Error()) } } else { fmt.Println(err.Error()) } return } // 处理查询结果 if len(result.AccessPoints) == 0 { fmt.Println("未找到指定名称的访问点") return } for _, ap := range result.AccessPoints { fmt.Printf("访问点ARN: %s\n", aws.StringValue(ap.AccessPointArn)) } }
补充说明
- 如果你的访问点是通过
Name标签而非原生名称设置的,可改为按标签过滤:Filters: []*efs.Filter{ { Name: aws.String("tag-key"), Values: []*string{aws.String("Name")}, }, { Name: aws.String("tag-value"), Values: []*string{aws.String(targetAccessPointName)}, }, }, - 同一区域内可能存在多个同名访问点(比如归属不同文件系统),可根据业务场景添加额外过滤条件(如关联的文件系统ID)缩小范围。
内容的提问来源于stack exchange,提问作者Rad4
相关产品推荐
相关产品推荐

