From a218c07ef6fadb96d1563efa04cbd0bc2cc2b8af Mon Sep 17 00:00:00 2001 From: Victor Tsang Date: Thu, 2 Jan 2025 16:51:02 -0800 Subject: [PATCH 1/4] go cluster management --- go/.gitignore | 3 + go/cluster_management/README.md | 35 ++++++++ go/cluster_management/client_util.go | 51 ++++++++++++ go/cluster_management/create_multi_region.go | 44 ++++++++++ go/cluster_management/create_single_region.go | 18 ++++ go/cluster_management/delete_multi_region.go | 17 ++++ go/cluster_management/delete_single_region.go | 17 ++++ go/cluster_management/example.go | 83 +++++++++++++++++++ go/cluster_management/example_test.go | 64 ++++++++++++++ go/cluster_management/get_cluster.go | 24 ++++++ go/cluster_management/go.mod | 25 ++++++ go/cluster_management/go.sum | 36 ++++++++ go/cluster_management/update_cluster.go | 18 ++++ 13 files changed, 435 insertions(+) create mode 100644 go/cluster_management/README.md create mode 100644 go/cluster_management/client_util.go create mode 100644 go/cluster_management/create_multi_region.go create mode 100644 go/cluster_management/create_single_region.go create mode 100644 go/cluster_management/delete_multi_region.go create mode 100644 go/cluster_management/delete_single_region.go create mode 100644 go/cluster_management/example.go create mode 100644 go/cluster_management/example_test.go create mode 100644 go/cluster_management/get_cluster.go create mode 100644 go/cluster_management/go.mod create mode 100644 go/cluster_management/go.sum create mode 100644 go/cluster_management/update_cluster.go diff --git a/go/.gitignore b/go/.gitignore index cbe681b..f50be2e 100644 --- a/go/.gitignore +++ b/go/.gitignore @@ -23,3 +23,6 @@ go.work.sum # env file .env + +# Mac Folder Metadata +**/.DS_Store \ No newline at end of file diff --git a/go/cluster_management/README.md b/go/cluster_management/README.md new file mode 100644 index 0000000..6a273f1 --- /dev/null +++ b/go/cluster_management/README.md @@ -0,0 +1,35 @@ +# Aurora DSQL Go SDK code examples + +## Overview + +The code examples in this topic show you how to use the AWS Go SDK with DSQL to create, read, update, and delete clusters. + +## Run the examples + +### Prerequisites + +* Go version >= 1.21 +* AWS credentials file is configured + + +### Setup test running environment + +Ensure you are authenticated with AWS credentials. No other setup is needed besides having Go installed. + +### Run the example tests + +In a terminal run the following commands: + +```sh +# Use the account credentials dedicated for golang +export CLUSTER_ENDPOINT="" +export REGION="" +go env -w GOPROXY=direct +go test +``` + +--- + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +SPDX-License-Identifier: MIT-0 diff --git a/go/cluster_management/client_util.go b/go/cluster_management/client_util.go new file mode 100644 index 0000000..b73925e --- /dev/null +++ b/go/cluster_management/client_util.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "errors" + + "github.com/aws/aws-sdk-go-v2/config" + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +type ClientUtil struct { + ctx *context.Context + clients map[string]*dsql.Client +} + +func (clientUtil *ClientUtil) setRegion(region string) func(*dsql.Options) { + return func(options *dsql.Options) { + options.Region = region + } +} + +func (clientUtil *ClientUtil) GetInstance(region string) (client *dsql.Client, err error) { + + if clientUtil.clients == nil { + clientUtil.clients = map[string]*dsql.Client{} + } + + _, isExists := clientUtil.clients[region] + + if !isExists { + if clientUtil.ctx == nil { + ctx := context.Background() + clientUtil.ctx = &ctx + } + + cfg, err := config.LoadDefaultConfig(*clientUtil.ctx) + if err != nil { + return nil, err + } + + newClient := dsql.NewFromConfig(cfg, clientUtil.setRegion(region)) + if newClient == nil { + return nil, errors.New("failed to get a new client") + } + clientUtil.clients[region] = newClient + } + + client = clientUtil.clients[region] + + return +} diff --git a/go/cluster_management/create_multi_region.go b/go/cluster_management/create_multi_region.go new file mode 100644 index 0000000..4e561b9 --- /dev/null +++ b/go/cluster_management/create_multi_region.go @@ -0,0 +1,44 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" + "github.com/aws/aws-sdk-go-v2/service/dsql/types" +) + +func CreateMultiRegionCluster(client *dsql.Client) (clustersStatus *dsql.CreateMultiRegionClustersOutput, err error) { + + deleteProtection := false + witnessRegion := "us-west-2" + + usEast1Props := types.LinkedClusterProperties{ + DeletionProtectionEnabled: &deleteProtection, + Tags: map[string]string{ + "Name": "us-east-1-go-example-cluster", + "Usercase": "testing-mr-use1", + }, + } + + usEast2Props := types.LinkedClusterProperties{ + DeletionProtectionEnabled: &deleteProtection, + Tags: map[string]string{ + "Name": "us-east-2-go-example-cluster", + "Usercase": "testing-mr-use2", + }, + } + + clusterProperties := map[string]types.LinkedClusterProperties{ + "us-east-1": usEast1Props, + "us-east-2": usEast2Props, + } + + input := dsql.CreateMultiRegionClustersInput{ + LinkedRegionList: []string{"us-east-1", "us-east-2"}, + WitnessRegion: &witnessRegion, + ClusterProperties: clusterProperties, + } + + clustersStatus, err = client.CreateMultiRegionClusters(context.Background(), &input) + return +} diff --git a/go/cluster_management/create_single_region.go b/go/cluster_management/create_single_region.go new file mode 100644 index 0000000..602c660 --- /dev/null +++ b/go/cluster_management/create_single_region.go @@ -0,0 +1,18 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +func CreateCluster(client *dsql.Client, deleteProtection bool, tags map[string]string) (clusterStatus *dsql.CreateClusterOutput, err error) { + + input := dsql.CreateClusterInput{ + DeletionProtectionEnabled: &deleteProtection, + Tags: tags, + } + + clusterStatus, err = client.CreateCluster(context.Background(), &input) + return +} diff --git a/go/cluster_management/delete_multi_region.go b/go/cluster_management/delete_multi_region.go new file mode 100644 index 0000000..6688cde --- /dev/null +++ b/go/cluster_management/delete_multi_region.go @@ -0,0 +1,17 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +func DeleteMultiRegionCluster(arnList []string, client *dsql.Client) (clusterStatus *dsql.DeleteMultiRegionClustersOutput, err error) { + + input := dsql.DeleteMultiRegionClustersInput{ + LinkedClusterArns: arnList, + } + + clusterStatus, err = client.DeleteMultiRegionClusters(context.Background(), &input) + return +} diff --git a/go/cluster_management/delete_single_region.go b/go/cluster_management/delete_single_region.go new file mode 100644 index 0000000..4439487 --- /dev/null +++ b/go/cluster_management/delete_single_region.go @@ -0,0 +1,17 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +func DeleteCluster(id string, client *dsql.Client) (clusterStatus *dsql.DeleteClusterOutput, err error) { + + input := dsql.DeleteClusterInput{ + Identifier: &id, + } + + clusterStatus, err = client.DeleteCluster(context.Background(), &input) + return +} diff --git a/go/cluster_management/example.go b/go/cluster_management/example.go new file mode 100644 index 0000000..eb19dd3 --- /dev/null +++ b/go/cluster_management/example.go @@ -0,0 +1,83 @@ +package main + +import ( + "errors" + "fmt" + "time" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" + "github.com/aws/aws-sdk-go-v2/service/dsql/types" +) + +func SingleRegionTest(client *dsql.Client) (err error) { + + deleteProtectionEnabled := true + + createdClusterStatus, err := CreateCluster(client, deleteProtectionEnabled, map[string]string{"Name": "ExampleClusterGo"}) + if err != nil { + return err + } + + clusterId := createdClusterStatus.Identifier + + if clusterId == nil || (clusterId != nil && len(*clusterId) == 0) { + return errors.New("the cluster identifier is missing after creating a single cluster") + } + + time.Sleep(60 * time.Second) // Just an approximate arbitrarily chosen time + + getClusterStatus, err := GetCluster(*clusterId, client) + if err != nil { + return err + } + + if getClusterStatus.Status == types.ClusterStatusFailed { + return errors.New("the cluster failed") + } + + deleteProtectionEnabled = false + updateClusteStatus, err := UpdateCluster(*clusterId, deleteProtectionEnabled, client) + if err != nil { + return err + } + + if updateClusteStatus.Status != types.ClusterStatusUpdating { + return errors.New("updateCluster failed") + } + + time.Sleep(5 * time.Second) // Just an approximate arbitrarily chosen time + + fmt.Println("Deleting Cluster") + deleteClusterStatus, err := DeleteCluster(*clusterId, client) + if err != nil { + return err + } + + if deleteClusterStatus.Status != types.ClusterStatusDeleting { + return errors.New("deleteCluster failed") + } + + return err +} + +func MultiRegionTest(client *dsql.Client) (err error) { + + multiRegionClusterStatus, err := CreateMultiRegionCluster(client) + if err != nil { + return err + } + + time.Sleep(60 * time.Second) // Just an approximate arbitrarily chosen time + + _, err = DeleteMultiRegionCluster(multiRegionClusterStatus.LinkedClusterArns, client) + if err != nil { + return err + } + + fmt.Println("Deleted Cluster ARNs: ") + for _, arn := range multiRegionClusterStatus.LinkedClusterArns { + fmt.Println(arn) + } + + return err +} diff --git a/go/cluster_management/example_test.go b/go/cluster_management/example_test.go new file mode 100644 index 0000000..60d7f76 --- /dev/null +++ b/go/cluster_management/example_test.go @@ -0,0 +1,64 @@ +package main + +import ( + "fmt" + "os" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +var client *dsql.Client +var region = "us-east-1" + +func TestMain(m *testing.M) { + + awsDefaultRegion := os.Getenv("AWS_DEFAULT_REGION") // AWS CLI v1 environment region variable + if awsDefaultRegion != "" { + region = awsDefaultRegion + } + + awsRegion := os.Getenv("AWS_REGION") // AWS CLI v2 environment region variable + if awsRegion != "" { + region = awsRegion + } + fmt.Println("Initializing the AWS client in region:" + region) + clientUtil := ClientUtil{} + + awsClient, err := clientUtil.GetInstance(region) + if err != nil { + fmt.Println("failed to get the aws client:" + err.Error()) + os.Exit(1) + } + + client = awsClient + + if client == nil { + fmt.Println("aws client is not initialized") + os.Exit(1) + } + + m.Run() + + fmt.Println("All tests completed") + +} + +func TestSingleRegion(t *testing.T) { + fmt.Println("Single Region Cluster Test: Starting") + + err := SingleRegionTest(client) + if err != nil { + t.Error("single region test failed:" + err.Error()) + } + fmt.Println("Single Region Cluster Test: Completed") +} + +func TestMultiRegion(t *testing.T) { + fmt.Println("Multi Region Cluster Test: Starting") + err := MultiRegionTest(client) + if err != nil { + t.Error("multi region test failed:" + err.Error()) + } + fmt.Println("Multi Region Cluster Test: Completed") +} diff --git a/go/cluster_management/get_cluster.go b/go/cluster_management/get_cluster.go new file mode 100644 index 0000000..36a7f8e --- /dev/null +++ b/go/cluster_management/get_cluster.go @@ -0,0 +1,24 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +func GetCluster(id string, client *dsql.Client) (clusterStatus *dsql.GetClusterOutput, err error) { + + input := dsql.GetClusterInput{ + Identifier: &id, + } + clusterStatus, err = client.GetCluster(context.Background(), &input) + return +} + +func ListClusterTags(arn string, client *dsql.Client) (tags *dsql.ListTagsForResourceOutput, err error) { + input := dsql.ListTagsForResourceInput{ + ResourceArn: &arn, + } + tags, err = client.ListTagsForResource(context.Background(), &input) + return +} diff --git a/go/cluster_management/go.mod b/go/cluster_management/go.mod new file mode 100644 index 0000000..3d27022 --- /dev/null +++ b/go/cluster_management/go.mod @@ -0,0 +1,25 @@ +module example + +go 1.23.4 + +require github.com/aws/aws-sdk-go-v2 v1.32.7 + +require ( + github.com/aws/aws-sdk-go-v2/credentials v1.17.48 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 // indirect + github.com/aws/smithy-go v1.22.1 // indirect +) + +require ( + github.com/aws/aws-sdk-go-v2/config v1.28.7 + github.com/aws/aws-sdk-go-v2/service/dsql v1.0.1 + github.com/jmespath/go-jmespath v0.4.0 // indirect +) diff --git a/go/cluster_management/go.sum b/go/cluster_management/go.sum new file mode 100644 index 0000000..95fafaa --- /dev/null +++ b/go/cluster_management/go.sum @@ -0,0 +1,36 @@ +github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw= +github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE= +github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/dsql v1.0.1 h1:baNq4tTLCuWE4W+HiI/JI4VNCwuj7Zi3QdaewmrKGYA= +github.com/aws/aws-sdk-go-v2/service/dsql v1.0.1/go.mod h1:vTml+xvx2UwiLJmAbMR4CToHdrjX3hhXQPcom/loQpM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc= +github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= +github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/go/cluster_management/update_cluster.go b/go/cluster_management/update_cluster.go new file mode 100644 index 0000000..6069e75 --- /dev/null +++ b/go/cluster_management/update_cluster.go @@ -0,0 +1,18 @@ +package main + +import ( + "context" + + dsql "github.com/aws/aws-sdk-go-v2/service/dsql" +) + +func UpdateCluster(id string, deleteProtection bool, client *dsql.Client) (clusterStatus *dsql.UpdateClusterOutput, err error) { + + input := dsql.UpdateClusterInput{ + Identifier: &id, + DeletionProtectionEnabled: &deleteProtection, + } + + clusterStatus, err = client.UpdateCluster(context.Background(), &input) + return +} From 0c36b923446ffe83f34f1cd69389753058f07632 Mon Sep 17 00:00:00 2001 From: Victor Tsang Date: Thu, 2 Jan 2025 16:59:58 -0800 Subject: [PATCH 2/4] removed unused env variables --- go/cluster_management/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/go/cluster_management/README.md b/go/cluster_management/README.md index 6a273f1..6b8cdea 100644 --- a/go/cluster_management/README.md +++ b/go/cluster_management/README.md @@ -22,8 +22,6 @@ In a terminal run the following commands: ```sh # Use the account credentials dedicated for golang -export CLUSTER_ENDPOINT="" -export REGION="" go env -w GOPROXY=direct go test ``` From 8b907094a8e9ef50b8ac003f7a32f7469ae998f4 Mon Sep 17 00:00:00 2001 From: Victor Tsang Date: Fri, 3 Jan 2025 08:46:21 -0800 Subject: [PATCH 3/4] clean up --- go/cluster_management/client_util.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/go/cluster_management/client_util.go b/go/cluster_management/client_util.go index b73925e..7ae3b49 100644 --- a/go/cluster_management/client_util.go +++ b/go/cluster_management/client_util.go @@ -9,7 +9,6 @@ import ( ) type ClientUtil struct { - ctx *context.Context clients map[string]*dsql.Client } @@ -28,12 +27,7 @@ func (clientUtil *ClientUtil) GetInstance(region string) (client *dsql.Client, e _, isExists := clientUtil.clients[region] if !isExists { - if clientUtil.ctx == nil { - ctx := context.Background() - clientUtil.ctx = &ctx - } - - cfg, err := config.LoadDefaultConfig(*clientUtil.ctx) + cfg, err := config.LoadDefaultConfig(context.Background()) if err != nil { return nil, err } From 8aeef337e37649d39b847c18ee39f60ef0cf97dc Mon Sep 17 00:00:00 2001 From: Victor Tsang Date: Mon, 6 Jan 2025 17:31:34 -0800 Subject: [PATCH 4/4] updated README and added github actions --- .github/workflows/go-cm-integ-tests.yml | 52 +++++++++++++++++++++++++ README.md | 1 + 2 files changed, 53 insertions(+) create mode 100644 .github/workflows/go-cm-integ-tests.yml diff --git a/.github/workflows/go-cm-integ-tests.yml b/.github/workflows/go-cm-integ-tests.yml new file mode 100644 index 0000000..81e5a38 --- /dev/null +++ b/.github/workflows/go-cm-integ-tests.yml @@ -0,0 +1,52 @@ +name: pgx(go) Integration tests + +on: + push: + branches: [ "main" ] + paths: + - 'go/cluster_management/**' + - '.github/workflows/go-cm-integ-tests.yml' + pull_request: + branches: [ "main" ] + paths: + - 'go/cluster_management/**' + - '.github/workflows/go-cm-integ-tests.yml' + # Give us a button to allow running the workflow on demand for testing. + workflow_dispatch: + inputs: + tags: + description: 'Manual Workflow Run' + required: false + type: string + +jobs: + + build: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + # Explicitly set permissions, following the principle of least privilege + actions: read + checks: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.23.2' + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.GO_IAM_ROLE }} + aws-region: us-east-1 + + - name: Build & Run + working-directory: ./go/pgx + run: | + go env -w GOPROXY=direct + go test diff --git a/README.md b/README.md index 1eb6589..7e0797b 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ The subdirectories contain code examples for connecting and using Aurora DSQL in | C++ | [cluster_management](cpp/cluster_management) | | C# (dotnet) | [cluster_management](dotnet/cluster_management) | | Java | [cluster_management](java/cluster_management) | +| Go | [cluster_management](go/cluster_management) | | Javascript | [cluster_management](javascript/cluster_management) | | Python | [cluster_management](python/cluster_management) | | Ruby | [cluster_management](ruby/cluster_management) |