summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2017-03-22 20:34:39 -0400
committerDave Henderson <dhenderson@gmail.com>2017-03-22 20:44:21 -0400
commit1fcee69f84b43c44e7db5ff412de849fc88a12c2 (patch)
treec30c15d7838cc8773d8decb2f40e7e1a46366dee
parent5143caaac3af39d62dfe790f122b0f79c202ea84 (diff)
Performance fixes for running ec2tag in non-aws environments
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
-rw-r--r--aws/ec2info.go15
1 files 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
}