Skip to content

Commit dd2fe8c

Browse files
committed
Add back aws api cache
This commits reverts changes made on commit b5e3324 but gives the users the ability to enable the cache and set the cache TTL, by default is turned off. Related to: #1100
1 parent 2560c81 commit dd2fe8c

File tree

7 files changed

+36
-7
lines changed

7 files changed

+36
-7
lines changed

cmd/main.go

+11-1
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

+8
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

+1-1
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

+3
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

+3-2
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

+6-2
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

+4-1
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)