From 1fcee69f84b43c44e7db5ff412de849fc88a12c2 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Wed, 22 Mar 2017 20:34:39 -0400 Subject: Performance fixes for running ec2tag in non-aws environments Signed-off-by: Dave Henderson --- aws/ec2info.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/aws/ec2info.go b/aws/ec2info.go index 8b9ab2ad..fbbff53a 100644 --- a/aws/ec2info.go +++ b/aws/ec2info.go @@ -1,11 +1,16 @@ package aws import ( + "net/http" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" ) +var describerClient InstanceDescriber + // Ec2Info - type Ec2Info struct { describer func() InstanceDescriber @@ -23,8 +28,11 @@ func NewEc2Info() *Ec2Info { metaClient := NewEc2Meta() return &Ec2Info{ describer: func() InstanceDescriber { - region := metaClient.Region() - return ec2Client(region) + if describerClient == nil { + region := metaClient.Region() + describerClient = ec2Client(region) + } + return describerClient }, metaClient: metaClient, cache: make(map[string]interface{}), @@ -34,6 +42,7 @@ func NewEc2Info() *Ec2Info { func ec2Client(region string) (client InstanceDescriber) { config := aws.NewConfig() config = config.WithRegion(region) + config = config.WithHTTPClient(&http.Client{Timeout: 500 * time.Millisecond}) client = ec2.New(session.New(config)) return client } @@ -59,6 +68,8 @@ func (e *Ec2Info) Tag(tag string, def ...string) string { } func (e *Ec2Info) describeInstance() (output *ec2.DescribeInstancesOutput) { + // cache the InstanceDescriber here + e.describer() if e.metaClient.nonAWS { return nil } -- cgit v1.2.3