2 回答

TA貢獻1801條經驗 獲得超8個贊
我不熟悉 Golang AWS SDK,但如果是我,我在 SDK 文檔中找不到它,我會查找 AWS CLI 文檔并在那里找到命令,因為它們可能會轉換為 SDK 或最壞情況下的運行系統Golang 中的命令來執行 CLI 并獲得相同的結果。
GetResources
https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html
返回與位于 AWS 賬戶的指定區域中的指定標簽(鍵和值)關聯的所有標記資源。
因此,您可以使用它來獲取具有特定標簽的所有資源,然后在 Golang 中迭代結果以僅選擇 ELB
看起來您可以在一個命令中按標簽和資源進行過濾:
看起來 golang sdk 確實存在該命令
我認為我上面強調的選項可供您使用。
在 Golang 中執行
您將使用諸如 exec 之類的東西。 https://golang.org/pkg/os/exec/
本教程可能包含如何從 exec https://nathanleclaire.com/blog/2014/12/29/shelled-out-commands-in-golang/獲取結果
示例代碼
package main
import (
"fmt"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/elb"
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
)
const (
// ProviderName is the cloud provider providing loadbalancing functionality
ProviderName = "aws"
)
// ELB is the struct implementing the lbprovider interface
type ELB struct {
client *elb.ELB
elbResourceName string
resourceapiClient *resourcegroupstaggingapi.ResourceGroupsTaggingAPI
}
// NewELB is the factory method for ELB
func NewELB(id string, secret string, region string) (*ELB, error) {
awsConfig := &aws.Config{
Region: aws.String(region),
Credentials: credentials.NewStaticCredentials(id, secret, ""),
}
awsConfig = awsConfig.WithCredentialsChainVerboseErrors(true)
sess, err := session.NewSession(awsConfig)
if err != nil {
return nil, fmt.Errorf("Unable to initialize AWS session: %v", err)
}
return &ELB{
client: elb.New(sess),
resourceapiClient: resourcegroupstaggingapi.New(sess),
elbResourceName: "elasticloadbalancing",
}, nil
}
// GetLoadbalancersByTag gets the loadbalancers by tag
func (e *ELB) GetLoadbalancersByTag(tagKey string, tagValue string) ([]string, error) {
tagFilters := &resourcegroupstaggingapi.TagFilter{}
tagFilters.Key = aws.String(tagKey)
tagFilters.Values = append(tagFilters.Values, aws.String(tagValue))
getResourcesInput := &resourcegroupstaggingapi.GetResourcesInput{}
getResourcesInput.TagFilters = append(getResourcesInput.TagFilters, tagFilters)
getResourcesInput.ResourceTypeFilters = append(
getResourcesInput.ResourceTypeFilters,
aws.String(e.elbResourceName),
)
resources, err := e.resourceapiClient.GetResources(getResourcesInput)
if err != nil {
return nil, err
}
elbs := []string{}
for _, resource := range resources.ResourceTagMappingList {
elbs = append(elbs, strings.Split(*resource.ResourceARN, "/")[1])
}
return elbs, nil
}

TA貢獻1811條經驗 獲得超4個贊
您可以簡單地遍歷 ELB 列表并按標簽過濾。
svc := elbv2.New(...)
input := &elbv2.DescribeLoadBalancersInput{
LoadBalancerArns: []*string{},
}
result, _ := svc.DescribeLoadBalancers(input)
var list_of_arns []*string
for _, lb := range result.LoadBalancers{
list_of_arns = append(list_of_arns, lb.LoadBalancerArn)
}
input2 := &elbv2.DescribeTagsInput{
ResourceArns: list_of_arns,
}
result2, _ := svc.DescribeTags(input2)
fmt.Println(result2.TagDescriptions)
- 2 回答
- 0 關注
- 143 瀏覽
添加回答
舉報