297 contract watchertx trackeranalyticfly change access to use iam role (#306)

* Use aws role to access sqs

Co-authored-by: walker-16 <agpazos85@gmail.com>

* Add ServiceAccount in deployment

Co-authored-by: walker-16 <agpazos85@gmail.com>

---------

Co-authored-by: walker-16 <agpazos85@gmail.com>
This commit is contained in:
ftocal 2023-05-10 15:49:40 -03:00 committed by GitHub
parent 4ecf5983e6
commit 7fb3857a97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 273 additions and 297 deletions

View File

@ -119,25 +119,29 @@ func newSQSConsumer(appCtx context.Context, config *config.Configuration) (*sqs_
func newAwsConfig(appCtx context.Context, cfg *config.Configuration) (aws.Config, error) {
region := cfg.AwsRegion
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
if cfg.AwsAccessKeyID != "" && cfg.AwsSecretAccessKey != "" {
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
awsCfg, err := awsconfig.LoadDefaultConfig(appCtx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
awsCfg, err := awsconfig.LoadDefaultConfig(appCtx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
}
return awsconfig.LoadDefaultConfig(appCtx, awsconfig.WithRegion(region))
}
func newFilterFunc(cfg *config.Configuration) queue.FilterConsumeFunc {

View File

@ -6,12 +6,13 @@ require (
github.com/aws/aws-sdk-go-v2 v1.17.4
github.com/aws/aws-sdk-go-v2/config v1.1.1
github.com/aws/aws-sdk-go-v2/credentials v1.1.1
github.com/go-redis/redis/v8 v8.11.5
github.com/gofiber/fiber/v2 v2.42.0
github.com/influxdata/influxdb-client-go/v2 v2.12.2
github.com/joho/godotenv v1.5.1
github.com/sethvargo/go-envconfig v0.9.0
github.com/wormhole-foundation/wormhole-explorer/common v0.0.0-00010101000000-000000000000
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230216153609-bd7406afbfb2
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8
go.uber.org/zap v1.24.0
)
@ -28,8 +29,10 @@ require (
github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 // indirect
github.com/aws/smithy-go v1.13.5 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/deepmap/oapi-codegen v1.8.2 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/ethereum/go-ethereum v1.10.21 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/uuid v1.3.0 // indirect

View File

@ -32,6 +32,8 @@ github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLj
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@ -43,13 +45,18 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC
github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU=
github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/ethereum/go-ethereum v1.10.21 h1:5lqsEx92ZaZzRyOqBEXux4/UR06m296RGzN3ol3teJY=
github.com/ethereum/go-ethereum v1.10.21/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/gofiber/fiber/v2 v2.42.0 h1:Fnp7ybWvS+sjNQsFvkhf4G8OhXswvB6Vee8hM/LyS+8=
github.com/gofiber/fiber/v2 v2.42.0/go.mod h1:3+SGNjqMh5VQH5Vz2Wdi43zTIV16ktlFd3x3R6O1Zlc=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@ -102,6 +109,9 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ=
github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -135,8 +145,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230216153609-bd7406afbfb2 h1:yTXJ30BamZT4vPTL55TqNn+s64Fk0WdcrXviEjELY8Q=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230216153609-bd7406afbfb2/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8 h1:rrOyHd+H9a6Op1iUyZNCaI5v9D1syq8jDAYyX/2Q4L8=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
@ -214,9 +224,11 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -1,4 +1,3 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
@ -16,6 +15,7 @@ spec:
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 40
serviceAccountName: analytic
containers:
- name: {{ .NAME }}
image: {{ .IMAGE_NAME }}
@ -47,16 +47,6 @@ spec:
value: {{ .SQS_URL }}
- name: AWS_REGION
value: {{ .SQS_AWS_REGION }}
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: analytic-sqs
key: aws-access-key-id
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: analytic-sqs
key: aws-secret-access-key
- name: PPROF_ENABLED
value: "{{ .PPROF_ENABLED }}"
- name: P2P_NETWORK

View File

@ -9,7 +9,6 @@ RESOURCES_REQUESTS_MEMORY=128Mi
RESOURCES_REQUESTS_CPU=250m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=mainnet
PPROF_ENABLED=false
AWS_IAM_ROLE=

View File

@ -9,7 +9,6 @@ RESOURCES_REQUESTS_MEMORY=15Mi
RESOURCES_REQUESTS_CPU=10m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=mainnet
PPROF_ENABLED=true
AWS_IAM_ROLE=

View File

@ -9,7 +9,6 @@ RESOURCES_REQUESTS_MEMORY=64Mi
RESOURCES_REQUESTS_CPU=100m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=testnet
PPROF_ENABLED=false
AWS_IAM_ROLE=

7
deploy/analytic/sa.yaml Normal file
View File

@ -0,0 +1,7 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: analytic
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}

View File

@ -1,11 +0,0 @@
---
kind: Secret
apiVersion: v1
metadata:
name: analytic-sqs
namespace: {{ .NAMESPACE }}
data:
aws-access-key-id: {{ .SQS_ACCESS_KEY_ID }}
aws-secret-access-key: {{ .SQS_SECRET_ACCESS_KEY }}
type: Opaque

View File

@ -9,8 +9,7 @@ RESOURCES_REQUESTS_MEMORY=384Mi
RESOURCES_REQUESTS_CPU=250m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=mainnet
PPROF_ENABLED=false
MAX_HEALTH_TIME_SECONDS=90
MAX_HEALTH_TIME_SECONDS=90
AWS_IAM_ROLE=

View File

@ -9,8 +9,7 @@ RESOURCES_REQUESTS_MEMORY=384Mi
RESOURCES_REQUESTS_CPU=500m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=mainnet
PPROF_ENABLED=true
MAX_HEALTH_TIME_SECONDS=90
MAX_HEALTH_TIME_SECONDS=90
AWS_IAM_ROLE=

View File

@ -9,8 +9,7 @@ RESOURCES_REQUESTS_MEMORY=128Mi
RESOURCES_REQUESTS_CPU=250m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
P2P_NETWORK=testnet
PPROF_ENABLED=false
MAX_HEALTH_TIME_SECONDS=300
MAX_HEALTH_TIME_SECONDS=300
AWS_IAM_ROLE=

View File

@ -1,4 +1,3 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
@ -16,6 +15,7 @@ spec:
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 40
serviceAccountName: fly
containers:
- name: {{ .NAME }}
image: {{ .IMAGE_NAME }}
@ -57,16 +57,6 @@ spec:
value: {{ .SQS_URL }}
- name: AWS_REGION
value: {{ .SQS_AWS_REGION }}
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: fly-sqs
key: aws-access-key-id
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: fly-sqs
key: aws-secret-access-key
- name: REDIS_URI
valueFrom:
configMapKeyRef:

7
deploy/fly/sa.yaml Normal file
View File

@ -0,0 +1,7 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: fly
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}

View File

@ -1,11 +0,0 @@
---
kind: Secret
apiVersion: v1
metadata:
name: fly-sqs
namespace: {{ .NAMESPACE }}
data:
aws-access-key-id: {{ .SQS_ACCESS_KEY_ID }}
aws-secret-access-key: {{ .SQS_SECRET_ACCESS_KEY }}
type: Opaque

View File

@ -9,9 +9,8 @@ RESOURCES_REQUESTS_MEMORY=128Mi
RESOURCES_REQUESTS_CPU=250m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan
VAA_PAYLOAD_PARSER_TIMEOUT=10
P2P_NETWORK=mainnet
PPROF_ENABLED=false
PPROF_ENABLED=false
AWS_IAM_ROLE=

View File

@ -9,9 +9,8 @@ RESOURCES_REQUESTS_MEMORY=15Mi
RESOURCES_REQUESTS_CPU=10m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan
VAA_PAYLOAD_PARSER_TIMEOUT=10
P2P_NETWORK=mainnet
PPROF_ENABLED=true
PPROF_ENABLED=true
AWS_IAM_ROLE=

View File

@ -9,9 +9,8 @@ RESOURCES_REQUESTS_MEMORY=15Mi
RESOURCES_REQUESTS_CPU=10m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan-testnet
VAA_PAYLOAD_PARSER_TIMEOUT=10
P2P_NETWORK=testnet
PPROF_ENABLED=false
AWS_IAM_ROLE=

View File

@ -1,4 +1,3 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
@ -16,6 +15,7 @@ spec:
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 40
serviceAccountName: parser
containers:
- name: {{ .NAME }}
image: {{ .IMAGE_NAME }}
@ -57,16 +57,6 @@ spec:
value: {{ .SQS_URL }}
- name: AWS_REGION
value: {{ .SQS_AWS_REGION }}
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: parser-sqs
key: aws-access-key-id
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: parser-sqs
key: aws-secret-access-key
- name: VAA_PAYLOAD_PARSER_URL
value: {{ .VAA_PAYLOAD_PARSER_URL }}
- name: VAA_PAYLOAD_PARSER_TIMEOUT
@ -75,26 +65,6 @@ spec:
value: "{{ .PPROF_ENABLED }}"
- name: P2P_NETWORK
value: {{ .P2P_NETWORK }}
- name: INFLUX_URL
valueFrom:
configMapKeyRef:
name: config
key: influxdb-url
- name: INFLUX_TOKEN
valueFrom:
secretKeyRef:
name: influxdb
key: token
- name: INFLUX_ORGANIZATION
valueFrom:
configMapKeyRef:
name: config
key: influxdb-organization
- name: INFLUX_BUCKET
valueFrom:
configMapKeyRef:
name: config
key: influxdb-bucket
resources:
limits:
memory: {{ .RESOURCES_LIMITS_MEMORY }}

7
deploy/parser/sa.yaml Normal file
View File

@ -0,0 +1,7 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: parser
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}

View File

@ -1,11 +0,0 @@
---
kind: Secret
apiVersion: v1
metadata:
name: parser-sqs
namespace: {{ .NAMESPACE }}
data:
aws-access-key-id: {{ .SQS_ACCESS_KEY_ID }}
aws-secret-access-key: {{ .SQS_SECRET_ACCESS_KEY }}
type: Opaque

View File

@ -1,11 +1,3 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: pipeline
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}
---
apiVersion: apps/v1
kind: Deployment
metadata:

7
deploy/pipeline/sa.yaml Normal file
View File

@ -0,0 +1,7 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: pipeline
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}

View File

@ -9,9 +9,8 @@ RESOURCES_REQUESTS_MEMORY=128Mi
RESOURCES_REQUESTS_CPU=250m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan
VAA_PAYLOAD_PARSER_TIMEOUT=10
SOLANA_BASE_URL=https://api.mainnet-beta.solana.com
SOLANA_REQUESTS_PER_MINUTE=6
AWS_IAM_ROLE=

View File

@ -9,11 +9,10 @@ RESOURCES_REQUESTS_MEMORY=15Mi
RESOURCES_REQUESTS_CPU=40m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan
VAA_PAYLOAD_PARSER_TIMEOUT=10
SOLANA_BASE_URL=https://api.mainnet-beta.solana.com
SOLANA_REQUESTS_PER_MINUTE=6
SOLANA_REQUESTS_PER_MINUTE=6
AWS_IAM_ROLE=

View File

@ -9,9 +9,8 @@ RESOURCES_REQUESTS_MEMORY=15Mi
RESOURCES_REQUESTS_CPU=10m
SQS_URL=
SQS_AWS_REGION=
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
VAA_PAYLOAD_PARSER_URL=http://wormscan-vaa-payload-parser.wormscan-testnet
VAA_PAYLOAD_PARSER_TIMEOUT=10
SOLANA_BASE_URL=https://api.devnet.solana.com
SOLANA_REQUESTS_PER_MINUTE=6
SOLANA_REQUESTS_PER_MINUTE=6
AWS_IAM_ROLE=

View File

@ -0,0 +1,7 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: tx-tracker
namespace: {{ .NAMESPACE }}
annotations:
eks.amazonaws.com/role-arn: {{ .AWS_IAM_ROLE }}

View File

@ -1,11 +0,0 @@
---
kind: Secret
apiVersion: v1
metadata:
name: tx-tracker-sqs
namespace: {{ .NAMESPACE }}
data:
aws-access-key-id: {{ .SQS_ACCESS_KEY_ID }}
aws-secret-access-key: {{ .SQS_SECRET_ACCESS_KEY }}
type: Opaque

View File

@ -1,4 +1,3 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
@ -16,6 +15,7 @@ spec:
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 40
serviceAccountName: tx-tracker
containers:
- name: {{ .NAME }}
image: {{ .IMAGE_NAME }}
@ -57,16 +57,6 @@ spec:
value: {{ .SQS_URL }}
- name: AWS_REGION
value: {{ .SQS_AWS_REGION }}
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: tx-tracker-sqs
key: aws-access-key-id
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tx-tracker-sqs
key: aws-secret-access-key
- name: VAA_PAYLOAD_PARSER_URL
value: {{ .VAA_PAYLOAD_PARSER_URL }}
- name: VAA_PAYLOAD_PARSER_TIMEOUT

View File

@ -3,7 +3,10 @@ module github.com/wormhole-foundation/wormhole-explorer/fly
go 1.19
require (
github.com/aws/aws-sdk-go v1.44.133
github.com/aws/aws-sdk-go-v2 v1.18.0
github.com/aws/aws-sdk-go-v2/config v1.1.1
github.com/aws/aws-sdk-go-v2/credentials v1.1.1
github.com/aws/aws-sdk-go-v2/service/sqs v1.20.2
github.com/certusone/wormhole/node v0.0.0-20230315165931-62bef9ffb441
github.com/dgraph-io/ristretto v0.1.1
github.com/eko/gocache/v3 v3.1.2
@ -14,13 +17,21 @@ require (
github.com/libp2p/go-libp2p-core v0.20.0
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/stretchr/testify v1.8.1
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8
go.mongodb.org/mongo-driver v1.11.2
go.uber.org/zap v1.24.0
google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8
)
require (
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 // indirect
github.com/aws/smithy-go v1.13.5 // indirect
github.com/cosmos/cosmos-proto v1.0.0-alpha8 // indirect
github.com/cosmos/gogoproto v1.4.3 // indirect
github.com/cosmos/ibc-go/v4 v4.2.0 // indirect
@ -127,7 +138,6 @@ require (
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
github.com/klauspost/compress v1.15.11 // indirect
github.com/klauspost/cpuid/v2 v2.1.0 // indirect

View File

@ -647,21 +647,38 @@ github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN
github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
github.com/aws/aws-sdk-go v1.44.133 h1:+pWxt9nyKc0jf33rORBaQ93KPjYpmIIy3ozVXdJ82Oo=
github.com/aws/aws-sdk-go v1.44.133/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo=
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY=
github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo=
github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y=
github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY=
github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 h1:r+XwaCLpIvCKjBIYy/HVZujQS9tsz5ohHG3ZIe0wKoE=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28/go.mod h1:3lwChorpIM/BhImY/hy+Z6jekmN92cXGPI1QJasVPYY=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 h1:7AwGYXDdqRQYsluvKFmWoqpcOQJ4bH634SkYf3FNj/A=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22/go.mod h1:EqK7gVrIGAHyZItrD1D8B0ilgwMD1GiWAmbU4u/JHNk=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 h1:gGLG7yKaXG02/jBlg210R7VgQIotiQntNhsCFejawx8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc=
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8=
github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4=
github.com/aws/aws-sdk-go-v2/service/sqs v1.20.2 h1:CSNIo1jiw7KrkdgZjCOnotu6yuB3IybhKLuSQrTLNfo=
github.com/aws/aws-sdk-go-v2/service/sqs v1.20.2/go.mod h1:1ttxGjUHZliCQMpPss1sU5+Ph/5NvdMFRzr96bv8gm0=
github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU=
github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0=
github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY=
github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM=
github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw=
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8=
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@ -1845,9 +1862,7 @@ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
@ -3006,8 +3021,8 @@ github.com/wormhole-foundation/cosmos-sdk v0.45.9-wormhole/go.mod h1:Z5M4TX7PsHN
github.com/wormhole-foundation/wasmd v0.30.0-wormchain-1 h1:1+u753gKU44slOOLNdk7LiE5QtZU+3joVuQuU2xW1Bg=
github.com/wormhole-foundation/wasmd v0.30.0-wormchain-1/go.mod h1:BcwmiI8b2fR2MGioz3HeVvON5QjSDfrnUbGu0gKRk5U=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20220926172624-4b38dc650bb0/go.mod h1:Vg7Cbb370S+JihB+of1rWm9Aaxzf0GPPvKszPeSb7AE=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441 h1:ZSB93rvaWarOv/TTJp1wicIygQLNx6fZhgsmxDBAnO0=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8 h1:rrOyHd+H9a6Op1iUyZNCaI5v9D1syq8jDAYyX/2Q4L8=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees=
github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=

View File

@ -1,12 +1,12 @@
package sqs
import (
"context"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
aws_sqs "github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
"github.com/aws/aws-sdk-go-v2/aws"
aws_sqs "github.com/aws/aws-sdk-go-v2/service/sqs"
aws_sqs_types "github.com/aws/aws-sdk-go-v2/service/sqs/types"
)
// ConsumerOption represents a consumer option function.
@ -14,21 +14,21 @@ type ConsumerOption func(*Consumer)
// Consumer represents SQS consumer.
type Consumer struct {
api sqsiface.SQSAPI
api *aws_sqs.Client
url string
maxMessages *int64
visibilityTimeout *int64
waitTimeSeconds *int64
maxMessages int32
visibilityTimeout int32
waitTimeSeconds int32
}
// New instances of a Consumer to consume SQS messages.
func NewConsumer(sess *session.Session, url string, opts ...ConsumerOption) (*Consumer, error) {
func NewConsumer(cfg aws.Config, url string, opts ...ConsumerOption) (*Consumer, error) {
consumer := &Consumer{
api: aws_sqs.New(sess),
api: aws_sqs.NewFromConfig(cfg),
url: url,
maxMessages: aws.Int64(10),
visibilityTimeout: aws.Int64(60),
waitTimeSeconds: aws.Int64(20),
maxMessages: *aws.Int32(10),
visibilityTimeout: *aws.Int32(60),
waitTimeSeconds: *aws.Int32(20),
}
for _, opt := range opts {
@ -39,42 +39,42 @@ func NewConsumer(sess *session.Session, url string, opts ...ConsumerOption) (*Co
}
// WithMaxMessages allows to specify an maximum number of messages to return when setting a value.
func WithMaxMessages(v int64) ConsumerOption {
func WithMaxMessages(v int32) ConsumerOption {
return func(c *Consumer) {
c.maxMessages = aws.Int64(v)
c.maxMessages = *aws.Int32(v)
}
}
// WithVisibilityTimeout allows to specify a visibility timeout when setting a value.
func WithVisibilityTimeout(v int64) ConsumerOption {
func WithVisibilityTimeout(v int32) ConsumerOption {
return func(c *Consumer) {
c.visibilityTimeout = aws.Int64(v)
c.visibilityTimeout = *aws.Int32(v)
}
}
// WithWaitTimeSeconds allows to specify a wait time when setting a value.
func WithWaitTimeSeconds(v int64) ConsumerOption {
func WithWaitTimeSeconds(v int32) ConsumerOption {
return func(c *Consumer) {
c.waitTimeSeconds = aws.Int64(v)
c.waitTimeSeconds = *aws.Int32(v)
}
}
// GetMessages retrieves messages from SQS.
func (c *Consumer) GetMessages() ([]*aws_sqs.Message, error) {
func (c *Consumer) GetMessages(ctx context.Context) ([]aws_sqs_types.Message, error) {
params := &aws_sqs.ReceiveMessageInput{
QueueUrl: aws.String(c.url),
MaxNumberOfMessages: c.maxMessages,
AttributeNames: []*string{
aws.String("All"),
AttributeNames: []aws_sqs_types.QueueAttributeName{
aws_sqs_types.QueueAttributeNameAll,
},
MessageAttributeNames: []*string{
aws.String("All"),
MessageAttributeNames: []string{
string(aws_sqs_types.QueueAttributeNameAll),
},
WaitTimeSeconds: c.waitTimeSeconds,
VisibilityTimeout: c.visibilityTimeout,
}
res, err := c.api.ReceiveMessage(params)
res, err := c.api.ReceiveMessage(ctx, params)
if err != nil {
return nil, err
}
@ -83,28 +83,28 @@ func (c *Consumer) GetMessages() ([]*aws_sqs.Message, error) {
}
// DeleteMessage deletes messages from SQS.
func (c *Consumer) DeleteMessage(id *string) error {
func (c *Consumer) DeleteMessage(ctx context.Context, id *string) error {
params := &aws_sqs.DeleteMessageInput{
QueueUrl: aws.String(c.url),
ReceiptHandle: id,
}
_, err := c.api.DeleteMessage(params)
_, err := c.api.DeleteMessage(ctx, params)
return err
}
// GetVisibilityTimeout returns visibility timeout.
func (c *Consumer) GetVisibilityTimeout() time.Duration {
return time.Duration(*c.visibilityTimeout * int64(time.Second))
return time.Duration(int64(c.visibilityTimeout) * int64(time.Second))
}
// GetQueueAttributes get queue attributes.
func (c *Consumer) GetQueueAttributes() (*aws_sqs.GetQueueAttributesOutput, error) {
func (c *Consumer) GetQueueAttributes(ctx context.Context) (*aws_sqs.GetQueueAttributesOutput, error) {
params := &aws_sqs.GetQueueAttributesInput{
QueueUrl: aws.String(c.url),
AttributeNames: []*string{
aws.String("CreatedTimestamp"),
AttributeNames: []aws_sqs_types.QueueAttributeName{
aws_sqs_types.QueueAttributeNameCreatedTimestamp,
},
}
return c.api.GetQueueAttributes(params)
return c.api.GetQueueAttributes(ctx, params)
}

View File

@ -1,28 +1,29 @@
package sqs
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
aws_sqs "github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
"context"
"github.com/aws/aws-sdk-go-v2/aws"
aws_sqs "github.com/aws/aws-sdk-go-v2/service/sqs"
)
type Producer struct {
api sqsiface.SQSAPI
api *aws_sqs.Client
url string
}
// New instances of a client to connect SQS.
func NewProducer(sess *session.Session, url string) (*Producer, error) {
func NewProducer(cfg aws.Config, url string) (*Producer, error) {
return &Producer{
api: aws_sqs.New(sess),
api: aws_sqs.NewFromConfig(cfg),
url: url,
}, nil
}
// SendMessage sends messages to SQS.
func (p *Producer) SendMessage(groupID, deduplicationID, body string) error {
func (p *Producer) SendMessage(ctx context.Context, groupID, deduplicationID, body string) error {
_, err := p.api.SendMessage(
ctx,
&aws_sqs.SendMessageInput{
MessageGroupId: aws.String(groupID),
MessageDeduplicationId: aws.String(deduplicationID),

View File

@ -8,9 +8,9 @@ import (
"fmt"
"os"
"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-v2/aws"
awsconfig "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/go-redis/redis/v8"
"github.com/wormhole-foundation/wormhole-explorer/common/domain"
"github.com/wormhole-foundation/wormhole-explorer/common/logger"
@ -61,52 +61,67 @@ func getenv(key string) (string, error) {
}
// TODO refactor to another file/package
func newAwsSession() (*session.Session, error) {
func newAwsConfig(ctx context.Context) (aws.Config, error) {
region, err := getenv("AWS_REGION")
if err != nil {
return nil, err
return *aws.NewConfig(), err
}
config := aws.NewConfig().WithRegion(region)
awsSecretId, _ := getenv("AWS_ACCESS_KEY_ID")
awsSecretKey, _ := getenv("AWS_SECRET_ACCESS_KEY")
if awsSecretId != "" && awsSecretKey != "" {
config.WithCredentials(credentials.NewStaticCredentials(awsSecretId, awsSecretKey, ""))
}
if awsEndpoint, err := getenv("AWS_ENDPOINT"); err == nil {
config.WithEndpoint(awsEndpoint)
credentials := credentials.NewStaticCredentialsProvider(awsSecretId, awsSecretKey, "")
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
awsEndpoint, _ := getenv("AWS_ENDPOINT")
if awsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: awsEndpoint,
SigningRegion: region,
}, nil
}
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
awsCfg, err := awsconfig.LoadDefaultConfig(ctx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
}
return session.NewSession(config)
return awsconfig.LoadDefaultConfig(ctx, awsconfig.WithRegion(region))
}
// TODO refactor to another file/package
func newSQSProducer() (*sqs.Producer, error) {
func newSQSProducer(ctx context.Context) (*sqs.Producer, error) {
sqsURL, err := getenv("SQS_URL")
if err != nil {
return nil, err
}
session, err := newAwsSession()
awsConfig, err := newAwsConfig(ctx)
if err != nil {
return nil, err
}
return sqs.NewProducer(session, sqsURL)
return sqs.NewProducer(awsConfig, sqsURL)
}
// TODO refactor to another file/package
func newSQSConsumer() (*sqs.Consumer, error) {
func newSQSConsumer(ctx context.Context) (*sqs.Consumer, error) {
sqsURL, err := getenv("SQS_URL")
if err != nil {
return nil, err
}
session, err := newAwsSession()
awsConfig, err := newAwsConfig(ctx)
if err != nil {
return nil, err
}
return sqs.NewConsumer(session, sqsURL,
return sqs.NewConsumer(awsConfig, sqsURL,
sqs.WithMaxMessages(10),
sqs.WithVisibilityTimeout(120))
}
@ -128,17 +143,17 @@ func newCache() (cache.CacheInterface[bool], error) {
// Creates two callbacks depending on whether the execution is local (memory queue) or not (SQS queue)
// callback to obtain queue messages from a queue
// callback to publish vaa non pyth messages to a sink
func newVAAConsumePublish(isLocal bool, logger *zap.Logger) (*sqs.Consumer, processor.VAAQueueConsumeFunc, processor.VAAPushFunc) {
func newVAAConsumePublish(ctx context.Context, isLocal bool, logger *zap.Logger) (*sqs.Consumer, processor.VAAQueueConsumeFunc, processor.VAAPushFunc) {
if isLocal {
vaaQueue := queue.NewVAAInMemory()
return nil, vaaQueue.Consume, vaaQueue.Publish
}
sqsProducer, err := newSQSProducer()
sqsProducer, err := newSQSProducer(ctx)
if err != nil {
logger.Fatal("could not create sqs producer", zap.Error(err))
}
sqsConsumer, err := newSQSConsumer()
sqsConsumer, err := newSQSConsumer(ctx)
if err != nil {
logger.Fatal("could not create sqs consumer", zap.Error(err))
}
@ -291,7 +306,7 @@ func main() {
// Creates a deduplicator to discard VAA messages that were processed previously
deduplicator := deduplicator.New(cache, logger)
// Creates two callbacks
sqsConsumer, vaaQueueConsume, nonPythVaaPublish := newVAAConsumePublish(isLocalFlag, logger)
sqsConsumer, vaaQueueConsume, nonPythVaaPublish := newVAAConsumePublish(rootCtx, isLocalFlag, logger)
// Create a vaa notifier
notifierFunc := newVAANotifierFunc(isLocalFlag, logger)
// Creates a instance to consume VAA messages from Gossip network and handle the messages

View File

@ -70,7 +70,7 @@ func (c *VAAQueueConsumer) Start(ctx context.Context) {
continue
}
msg.Done()
msg.Done(ctx)
c.logger.Info("Vaa save in repository", zap.String("id", v.MessageID()))
}
}()

View File

@ -1,9 +1,11 @@
package queue
import "context"
// Message represents a message from a queue.
type Message interface {
Data() []byte
Done()
Done(context.Context)
Failed()
IsExpired() bool
}

View File

@ -53,7 +53,7 @@ func (m *memoryConsumerMessage) Data() []byte {
return m.data
}
func (m *memoryConsumerMessage) Done() {}
func (m *memoryConsumerMessage) Done(_ context.Context) {}
func (m *memoryConsumerMessage) Failed() {}

View File

@ -48,17 +48,17 @@ func WithChannelSize(size int) SQSOption {
}
// Publish sends the message to a SQS queue.
func (q *SQS) Publish(_ context.Context, v *vaa.VAA, data []byte) error {
func (q *SQS) Publish(ctx context.Context, v *vaa.VAA, data []byte) error {
body := base64.StdEncoding.EncodeToString(data)
groupID := fmt.Sprintf("%d/%s", v.EmitterChain, v.EmitterAddress)
return q.producer.SendMessage(groupID, v.MessageID(), body)
return q.producer.SendMessage(ctx, groupID, v.MessageID(), body)
}
// Consume returns the channel with the received messages from SQS queue.
func (q *SQS) Consume(ctx context.Context) <-chan Message {
go func() {
for {
messages, err := q.consumer.GetMessages()
messages, err := q.consumer.GetMessages(ctx)
if err != nil {
q.logger.Error("Error getting messages from SQS", zap.Error(err))
continue
@ -108,8 +108,8 @@ func (m *sqsConsumerMessage) Data() []byte {
return m.data
}
func (m *sqsConsumerMessage) Done() {
if err := m.consumer.DeleteMessage(m.id); err != nil {
func (m *sqsConsumerMessage) Done(ctx context.Context) {
if err := m.consumer.DeleteMessage(ctx, m.id); err != nil {
m.logger.Error("Error deleting message from SQS", zap.Error(err))
}
m.wg.Done()

View File

@ -92,7 +92,7 @@ func (c *Controller) checkQueueStatus(ctx context.Context) error {
return nil
}
// get queue attributes
queueAttributes, err := c.consumer.GetQueueAttributes()
queueAttributes, err := c.consumer.GetQueueAttributes(ctx)
if err != nil {
return err
}
@ -102,7 +102,7 @@ func (c *Controller) checkQueueStatus(ctx context.Context) error {
// check queue created
createdTimestamp := queueAttributes.Attributes["CreatedTimestamp"]
if createdTimestamp == nil || *createdTimestamp == "" {
if createdTimestamp == "" {
return errors.New("sqs queue hasn't been created")
}
return nil

View File

@ -98,25 +98,28 @@ func main() {
func newAwsConfig(appCtx context.Context, cfg *config.Configuration) (aws.Config, error) {
region := cfg.AwsRegion
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
if cfg.AwsAccessKeyID != "" && cfg.AwsSecretAccessKey != "" {
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
awsCfg, err := awsconfig.LoadDefaultConfig(appCtx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
awsCfg, err := awsconfig.LoadDefaultConfig(appCtx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
}
return awsconfig.LoadDefaultConfig(appCtx, awsconfig.WithRegion(region))
}
// Creates a callbacks depending on whether the execution is local (memory queue) or not (SQS queue)

View File

@ -31,10 +31,6 @@ type Configuration struct {
VaaPayloadParserTimeout int64 `env:"VAA_PAYLOAD_PARSER_TIMEOUT, required"`
PprofEnabled bool `env:"PPROF_ENABLED,default=false"`
P2pNetwork string `env:"P2P_NETWORK,required"`
InfluxUrl string `env:"INFLUX_URL,required"`
InfluxToken string `env:"INFLUX_TOKEN,required"`
InfluxOrg string `env:"INFLUX_ORGANIZATION,required"`
InfluxBucket string `env:"INFLUX_BUCKET,required"`
}
// New creates a configuration with the values from .env file and environment variables.

View File

@ -8,7 +8,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/sethvargo/go-envconfig v0.6.0 // Configuration environment
github.com/stretchr/testify v1.8.1 // indirect; Testing
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230123141139-45b3d18d80b2
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8
go.mongodb.org/mongo-driver v1.11.2
go.uber.org/zap v1.24.0
)
@ -19,7 +19,6 @@ require (
github.com/aws/aws-sdk-go-v2/credentials v1.1.1
github.com/aws/aws-sdk-go-v2/service/sqs v1.20.2
github.com/influxdata/influxdb-client-go/v2 v2.12.2
github.com/mitchellh/mapstructure v1.5.0
github.com/wormhole-foundation/wormhole-explorer/common v0.0.0-00010101000000-000000000000
)
@ -40,6 +39,7 @@ require (
github.com/ethereum/go-ethereum v1.10.21 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/holiman/uint256 v1.2.1 // indirect
github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect
github.com/klauspost/compress v1.15.11 // indirect
github.com/kr/pretty v0.3.0 // indirect

View File

@ -63,6 +63,8 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/holiman/uint256 v1.2.1 h1:XRtyuda/zw2l+Bq/38n5XUoEF72aSOu/77Thd9pPp2o=
github.com/holiman/uint256 v1.2.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw=
github.com/influxdata/influxdb-client-go/v2 v2.12.2 h1:uYABKdrEKlYm+++qfKdbgaHKBPmoWR5wpbmj6MBB/2g=
github.com/influxdata/influxdb-client-go/v2 v2.12.2/go.mod h1:YteV91FiQxRdccyJ2cHvj2f/5sq4y4Njqu1fQzsQCOU=
github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM=
@ -99,8 +101,6 @@ github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peK
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -137,8 +137,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230123141139-45b3d18d80b2 h1:we8iat9DdKt8V6aopxFe+2PkKol9cDPYwH8xZue0R60=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230123141139-45b3d18d80b2/go.mod h1:9KomdyKDfd0O0A64dfapTbTp6I9LGkudkK8Q7s72RyI=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8 h1:rrOyHd+H9a6Op1iUyZNCaI5v9D1syq8jDAYyX/2Q4L8=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=

View File

@ -126,27 +126,31 @@ func newAwsConfig(ctx context.Context, cfg *config.ServiceSettings) (aws.Config,
region := cfg.AwsRegion
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
if cfg.AwsAccessKeyID != "" && cfg.AwsSecretAccessKey != "" {
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
credentials := credentials.NewStaticCredentialsProvider(cfg.AwsAccessKeyID, cfg.AwsSecretAccessKey, "")
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if cfg.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: cfg.AwsEndpoint,
SigningRegion: region,
}, nil
}
awsCfg, err := awsconfig.LoadDefaultConfig(
ctx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
awsCfg, err := awsconfig.LoadDefaultConfig(
ctx,
awsconfig.WithRegion(region),
awsconfig.WithEndpointResolver(customResolver),
awsconfig.WithCredentialsProvider(credentials),
)
return awsCfg, err
}
return awsconfig.LoadDefaultConfig(ctx, awsconfig.WithRegion(region))
}
func makeHealthChecks(

View File

@ -54,8 +54,8 @@ type VaaPayloadParserSettings struct {
type AwsSettings struct {
AwsEndpoint string `split_words:"true" required:"false"`
AwsAccessKeyID string `split_words:"true" required:"true"`
AwsSecretAccessKey string `split_words:"true" required:"true"`
AwsAccessKeyID string `split_words:"true" required:"false"`
AwsSecretAccessKey string `split_words:"true" required:"false"`
AwsRegion string `split_words:"true" required:"true"`
SqsUrl string `split_words:"true" required:"true"`
}

View File

@ -90,7 +90,7 @@ require (
github.com/tklauser/numcpus v0.2.2 // indirect
github.com/wormhole-foundation/wormhole-explorer/common v0.0.0-20230301134427-b3ec0bcc9eda
github.com/wormhole-foundation/wormhole-explorer/parser v0.0.0-20230307192542-867f1c29626a
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8
go.uber.org/zap v1.24.0
golang.org/x/crypto v0.2.0 // indirect
golang.org/x/sys v0.5.0 // indirect

View File

@ -325,8 +325,8 @@ github.com/wormhole-foundation/wormhole-explorer/api v0.0.0-20230316184234-db3a5
github.com/wormhole-foundation/wormhole-explorer/api v0.0.0-20230316184234-db3a54270a77/go.mod h1:SX//TXHIIc+QMHco3wxphC5Jk6wO/lk3r9J+SZnYip8=
github.com/wormhole-foundation/wormhole-explorer/parser v0.0.0-20230307192542-867f1c29626a h1:v/QDra5nOCyqSrwYIxJpNEjZqVJlCpqdN5mykcR1WOg=
github.com/wormhole-foundation/wormhole-explorer/parser v0.0.0-20230307192542-867f1c29626a/go.mod h1:rFM/Krfaz8gP63CrAwQxZ9Lzk+nSsD76fW1w/e1y6L4=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441 h1:ZSB93rvaWarOv/TTJp1wicIygQLNx6fZhgsmxDBAnO0=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230315165931-62bef9ffb441/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8 h1:rrOyHd+H9a6Op1iUyZNCaI5v9D1syq8jDAYyX/2Q4L8=
github.com/wormhole-foundation/wormhole/sdk v0.0.0-20230426150516-e695fad0bed8/go.mod h1:dE12DOucCq23gjGGGhtbyx41FBxuHxjpPvG+ArO+8t0=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=