Skip to content

Commit 0f7079c

Browse files
authored
Merge pull request #1154 from jescarri/enable_cache
Add back aws api cache
2 parents 70df39b + dd2fe8c commit 0f7079c

File tree

7 files changed

+36
-7
lines changed

7 files changed

+36
-7
lines changed

cmd/main.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,14 @@ import (
2626
"syscall"
2727
"time"
2828

29+
"github.com/aws/aws-sdk-go/service/ec2"
30+
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
31+
"github.com/ticketmaster/aws-sdk-go-cache/cache"
32+
2933
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/aws"
3034
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/controller"
3135
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/metric"
36+
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/metric/collectors"
3237
"github.com/prometheus/client_golang/prometheus"
3338
"github.com/prometheus/client_golang/prometheus/promhttp"
3439
"k8s.io/apiserver/pkg/server/healthz"
@@ -83,13 +88,18 @@ func main() {
8388
reg.MustRegister(prometheus.NewGoCollector())
8489
reg.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}))
8590

91+
cc := cache.NewConfig(options.SdkCacheDuration)
92+
cc.SetCacheTTL(resourcegroupstaggingapi.ServiceName, "GetResources", time.Hour)
93+
cc.SetCacheTTL(ec2.ServiceName, "DescribeInstanceStatus", time.Minute)
94+
reg.MustRegister(cc.NewCacheCollector(collectors.PrometheusNamespace))
95+
8696
mc, err := metric.NewCollector(reg, options.ingressCTLConfig.IngressClass)
8797
if err != nil {
8898
glog.Fatal(err)
8999
}
90100
mc.Start()
91101

92-
cloud, err := aws.New(options.cloudConfig, options.ingressCTLConfig.ClusterName, mc)
102+
cloud, err := aws.New(options.cloudConfig, options.ingressCTLConfig.ClusterName, mc, options.EnableSdkCache, cc)
93103
if err != nil {
94104
glog.Fatal(err)
95105
}

cmd/options.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ const (
4242
defaultHealthCheckPeriod = 1 * time.Minute
4343
defaultHealthzPort = 10254
4444
defaultProfilingEnabled = true
45+
defaultEnableSdkCache = false
46+
defaultSdkCacheDuration = 5 * time.Minute
4547
)
4648

4749
// Options defines the commandline interface of this binary
@@ -66,6 +68,10 @@ type Options struct {
6668

6769
// ingress controller specific configuration
6870
ingressCTLConfig config.Configuration
71+
72+
// aws sdk cache options
73+
EnableSdkCache bool
74+
SdkCacheDuration time.Duration
6975
}
7076

7177
func (options *Options) BindFlags(fs *pflag.FlagSet) {
@@ -95,6 +101,8 @@ func (options *Options) BindFlags(fs *pflag.FlagSet) {
95101
`Port to use for the healthz endpoint.`)
96102
fs.BoolVar(&options.ProfilingEnabled, "profiling", defaultProfilingEnabled,
97103
`Enable profiling via web interface host:port/debug/pprof/`)
104+
fs.BoolVar(&options.EnableSdkCache, "aws-cache-enable", defaultEnableSdkCache, "Enables AWS SDK Caching")
105+
fs.DurationVar(&options.SdkCacheDuration, "aws-cache-duration", defaultSdkCacheDuration, "Duration of AWS SDK Cache entries, default 5m")
98106
options.cloudConfig.BindFlags(fs)
99107
options.ingressCTLConfig.BindFlags(fs)
100108

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ require (
3131
github.com/prometheus/common v0.4.0
3232
github.com/spf13/pflag v1.0.5
3333
github.com/stretchr/testify v1.4.0
34-
github.com/ticketmaster/aws-sdk-go-cache v0.0.0-20180926195306-58922816129c // indirect
34+
github.com/ticketmaster/aws-sdk-go-cache v0.0.0-20200114210642-9a510f7c39db
3535
golang.org/x/oauth2 v0.0.0-20190212230446-3e8b2be13635 // indirect
3636
gopkg.in/inf.v0 v0.9.1 // indirect
3737
k8s.io/api v0.0.0-20181213150558-05914d821849

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22
175175
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
176176
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
177177
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
178+
github.com/karlseguin/ccache v2.0.2+incompatible h1:MpSlLlHgG3vPWTAIJsSYlyAQsHwfQ2HzgUlbJFh9Ufk=
178179
github.com/karlseguin/ccache v2.0.2+incompatible/go.mod h1:CM9tNPzT6EdRh14+jiW8mEF9mkNZuuE51qmgGYUB93w=
179180
github.com/karlseguin/expect v1.0.1/go.mod h1:zNBxMY8P21owkeogJELCLeHIt+voOSduHYTFUbwRAV8=
180181
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
@@ -295,6 +296,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
295296
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
296297
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
297298
github.com/ticketmaster/aws-sdk-go-cache v0.0.0-20180926195306-58922816129c/go.mod h1:H9sbOivuFYIUAS9No3MxP7K6WXz8i8Xg4qRJ/nu3zM4=
299+
github.com/ticketmaster/aws-sdk-go-cache v0.0.0-20200114210642-9a510f7c39db h1:6Powh9OH1h71lc0723hF3TXX3GWoZpSg+DwPWarZDEI=
300+
github.com/ticketmaster/aws-sdk-go-cache v0.0.0-20200114210642-9a510f7c39db/go.mod h1:DrzEMzgFXDUd2FVZals3Pv9cvdE007ggKR1qnvWzTk8=
298301
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q=
299302
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
300303
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=

internal/aws/cloud.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/aws/aws-sdk-go/service/wafregional"
1919
"github.com/aws/aws-sdk-go/service/wafregional/wafregionaliface"
2020
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/metric"
21+
"github.com/ticketmaster/aws-sdk-go-cache/cache"
2122
)
2223

2324
type CloudAPI interface {
@@ -49,8 +50,8 @@ type Cloud struct {
4950
// But due to huge number of aws clients, it's best to have one container AWS client that embed these aws clients.
5051
// TODO: remove clusterName dependency
5152
// TODO: remove mc dependency like https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws_metrics.go
52-
func New(cfg CloudConfig, clusterName string, mc metric.Collector) (CloudAPI, error) {
53-
awsSession := NewSession(&aws.Config{MaxRetries: aws.Int(cfg.APIMaxRetries)}, cfg.APIDebug, mc)
53+
func New(cfg CloudConfig, clusterName string, mc metric.Collector, ce bool, cc *cache.Config) (CloudAPI, error) {
54+
awsSession := NewSession(&aws.Config{MaxRetries: aws.Int(cfg.APIMaxRetries)}, cfg.APIDebug, mc, ce, cc)
5455
metadata := ec2metadata.New(awsSession)
5556

5657
if len(cfg.VpcID) == 0 {

internal/aws/session.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@ import (
1010
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/metric"
1111
"github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/util/log"
1212
"github.com/prometheus/client_golang/prometheus"
13+
"github.com/ticketmaster/aws-sdk-go-cache/cache"
1314
)
1415

1516
// NewSession returns an AWS session based off of the provided AWS config
16-
func NewSession(awsconfig *aws.Config, AWSDebug bool, mc metric.Collector) *session.Session {
17+
func NewSession(awsconfig *aws.Config, AWSDebug bool, mc metric.Collector, ce bool, cc *cache.Config) *session.Session {
1718
session, err := session.NewSession(awsconfig)
1819
if err != nil {
1920
mc.IncAPIErrorCount(prometheus.Labels{"service": "AWS", "request": "NewSession"})
2021
glog.ErrorDepth(4, fmt.Sprintf("Failed to create AWS session: %s", err.Error()))
2122
return nil
2223
}
23-
24+
if ce {
25+
// Adds caching to session if cache is enabled
26+
cache.AddCaching(session, cc)
27+
}
2428
session.Handlers.Retry.PushFront(func(r *request.Request) {
2529
mc.IncAPIRetryCount(prometheus.Labels{"service": r.ClientInfo.ServiceName, "operation": r.Operation.Name})
2630
})

test/e2e/framework/framework.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package framework
22

33
import (
44
"context"
5+
"time"
56

67
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/aws"
78
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/ingress/metric"
@@ -10,6 +11,7 @@ import (
1011
"github.com/onsi/ginkgo"
1112
"github.com/onsi/gomega"
1213
"github.com/prometheus/client_golang/prometheus"
14+
"github.com/ticketmaster/aws-sdk-go-cache/cache"
1315
clientset "k8s.io/client-go/kubernetes"
1416
"k8s.io/client-go/rest"
1517
"k8s.io/client-go/tools/clientcmd"
@@ -54,10 +56,11 @@ func (f *Framework) BeforeEach() {
5456
gomega.Expect(err).NotTo(gomega.HaveOccurred())
5557
}
5658
if f.Cloud == nil {
59+
cc := cache.NewConfig(0 * time.Millisecond)
5760
reg := prometheus.NewRegistry()
5861
mc, _ := metric.NewCollector(reg, "alb")
5962
var err error
60-
f.Cloud, err = aws.New(aws.CloudConfig{Region: f.Options.AWSRegion, VpcID: f.Options.AWSVPCID}, f.Options.ClusterName, mc)
63+
f.Cloud, err = aws.New(aws.CloudConfig{Region: f.Options.AWSRegion, VpcID: f.Options.AWSVPCID}, f.Options.ClusterName, mc, false, cc)
6164
gomega.Expect(err).NotTo(gomega.HaveOccurred())
6265
}
6366

0 commit comments

Comments
 (0)