From ceaf0b85ba22e0459b212e19d0bc4bb89102a193 Mon Sep 17 00:00:00 2001 From: Rak Siva Date: Mon, 14 Oct 2024 19:24:03 -0600 Subject: [PATCH 01/15] add guides. --- docs/guides/go/realtime-messaging.mdx | 309 ++++++++++++++++++++++++++ docs/guides/terraform/terratest.mdx | 243 ++++++++++++++++++++ 2 files changed, 552 insertions(+) create mode 100644 docs/guides/go/realtime-messaging.mdx create mode 100644 docs/guides/terraform/terratest.mdx diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx new file mode 100644 index 000000000..7e31eb25b --- /dev/null +++ b/docs/guides/go/realtime-messaging.mdx @@ -0,0 +1,309 @@ +export const description = + 'Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or GCP' + +export const title_meta = + 'Building your first WebSocket Application with Go and Nitric' + +# Building your first WebSocket Application with Nitric + +## What we'll be doing + +1. Use Nitric to create a WebSocket endpoint +2. Manage WebSocket connections using a Key-Value store +3. Handle WebSocket events: + - Register connections on connect + - Remove connections on disconnect + - Broadcast messages to all connected clients +4. Run locally for testing +5. Deploy to a cloud of your choice + +## Prerequisites + +- [Go](https://go.dev/dl/) +- The [Nitric CLI](https://nitric.io/docs/installation) +- An [AWS](https://aws.amazon.com), [GCP](https://cloud.google.com), or [Azure](https://azure.microsoft.com) account (_your choice_) + +## Getting started + +We'll start by creating a new project for our WebSocket application. + +```bash +nitric new my-websocket-app go-starter +``` + +Next, open the project in your editor of choice. + +```bash +cd my-websocket-app +``` + +Make sure all dependencies are resolved: + +```bash +go mod tidy +``` + +The scaffolded project should have the following structure: + +```text ++--services/ +| +-- hello/ +| +-- main.go +| ... ++--nitric.yaml ++--go.mod ++--go.sum ++--golang.dockerfile ++--.gitignore ++--README.md +``` + +You can test the project to verify everything is working as expected: + +```bash +nitric start +``` + +If everything is working as expected, you can now delete all files/folders in the `services/` folder. We'll create new services in this guide. + +## Building the WebSocket Application + +Let's begin by setting up the WebSocket application. First, create a new folder called `websockets` within the services directory. Inside this folder, add a file named `main.go`, and include the following code: + +```go +package main + +import ( + "context" + "fmt" + + "github.com/nitrictech/go-sdk/nitric" + "github.com/nitrictech/go-sdk/nitric/keyvalue" + "github.com/nitrictech/go-sdk/nitric/websockets" +) + +func main() { + // Create a WebSocket endpoint named "public". + ws := nitric.NewWebsocket("public") + + // Initialize a KV store named "connections" with Get, Set, and Delete permissions. + connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) + + // Handle new WebSocket connections by storing the connection ID in the KV store. + ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + return + } + }) + + // Add event handlers here + + nitric.Run() +} +``` + +Here we're creating: + +- A WebSocket endpoint named `public` +- A Key-Value store named `connections` to track WebSocket connections + +From here, let's add some features to that function that allow us to manage connections and broadcast messages. + + + You could separate some or all of these event handlers into their own services + if you prefer. For simplicity, we'll group them together in this guide. + + +### Register connections on connect + +```go +ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + return + } +}) +``` + +### Remove connections on disconnect + +```go +ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { + err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) + if err != nil { + return + } +}) +``` + +### Broadcast messages to all connected clients + +```go +ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { + connectionStream, err := connections.Keys(context.TODO()) + if err != nil { + return + } + senderId := ctx.Request.ConnectionID() + + for { + connectionId, err := connectionStream.Recv() + if err != nil { + break + } + + if connectionId == senderId { + continue + } + + message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) + err = ws.Send(context.TODO(), connectionId, []byte(message)) + if err != nil { + return + } + } +}) +``` + +### Bringing it all together + +
+Your code should look like this: + +```go +package main + +import ( + "context" + "fmt" + + "github.com/nitrictech/go-sdk/nitric" + "github.com/nitrictech/go-sdk/nitric/keyvalue" + "github.com/nitrictech/go-sdk/nitric/websockets" +) + +func main() { + // Create a WebSocket endpoint named "public". + ws := nitric.NewWebsocket("public") + + // Initialize a KV store named "connections" with Get, Set, and Delete permissions. + connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) + + // Handle new WebSocket connections by storing the connection ID in the KV store. + ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + return + } + }) + + ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + return + } + }) + + ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { + err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) + if err != nil { + return + } + }) + + ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { + connectionStream, err := connections.Keys(context.TODO()) + if err != nil { + return + } + + senderId := ctx.Request.ConnectionID() + + for { + connectionId, err := connectionStream.Recv() + if err != nil { + break + } + + if connectionId == senderId { + continue + } + + message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) + err = ws.Send(context.TODO(), connectionId, []byte(message)) + if err != nil { + return + } + } + }) + + nitric.Run() +} +``` + +
+ +Do a quick `go mod tidy` to make sure all new dependencies are resolved. + +## Ok, let's run this thing! + +Now that you have your WebSocket application defined with handlers for each event, it's time to test it locally. + +```bash +nitric start +``` + +Once it starts, the application will be ready to accept WebSocket connections. You can use a WebSocket client like Postman or any other WebSocket tool to test the application. + +We will keep it running for our tests. If you want to update your services, just save them, and they'll be reloaded automatically. + +## Deploy to the cloud + +At this point, you can deploy what you've built to any of the supported cloud providers. To do this, start by setting up your credentials and any configuration for the cloud you prefer: + +- [AWS](/reference/providers/aws) +- [Azure](/reference/providers/azure) +- [GCP](/reference/providers/gcp) + +Next, we'll need to create a `stack`. A stack represents a deployed instance of an application, which is a key value store of resources defined in your project. You might want separate stacks for each environment, such as stacks for `dev`, `test`, and `prod`. For now, let's start by creating a `dev` stack. + +The `stack new` command below will create a stack named `dev` that uses the `aws` provider. + +```bash +nitric stack new dev aws +``` + +Continue by checking your stack file `nitric.dev.yaml` and adding in your preferred region. Let's use `us-east-1`. + +### AWS + +Note: You are responsible for staying within the limits of the free tier or any costs associated with deployment. + +We called our stack `dev`. Let's try deploying it with the `up` command: + +```bash +nitric up +``` + +When the deployment is complete, go to the relevant cloud console and you'll be able to see and interact with your WebSocket application. + +To tear down your application from the cloud, use the `down` command: + +```bash +nitric down +``` + +## Summary + +In this guide, we've created a serverless WebSocket application using Go and Nitric. We've demonstrated how to set up WebSocket connections, track clients using a Key-Value store, and broadcast messages to all connected clients. This application can be easily deployed to the cloud, allowing you to build scalable, real-time communication systems. + +For more information and advanced usage, refer to the [Nitric documentation](https://nitric.io/docs). diff --git a/docs/guides/terraform/terratest.mdx b/docs/guides/terraform/terratest.mdx new file mode 100644 index 000000000..192fb63fe --- /dev/null +++ b/docs/guides/terraform/terratest.mdx @@ -0,0 +1,243 @@ +export const description = + 'Use Terratest to validate the infrastructure of a Nitric GO project deployed with Terraform' + +# Testing AWS resources with Terratest + +This guide will walk you through adding [Terratest](https://terratest.gruntwork.io/) to a Nitric project. + +## How Terratest works + +Terratest is designed to automate the entire process of testing your Terraform code with the following steps: + +- **Initialize**: Terratest will automatically run terraform init to initialize the Terraform working directory. +- **Apply**: It will then run terraform apply to deploy the infrastructure as defined in your Terraform code. +- **Assert**: The test script will then run assertions to check that the infrastructure was created as expected. +- **Teardown**: Finally, it will run terraform destroy to tear down the infrastructure after the test completes. + +## What we'll be doing + +1. Create and set up your application. +2. Deploying to AWS with a Terraform provider. +3. Add and execute Terratest. + +## Create and set up your application. + +Our sample project creates a real-time communication service using [websockets](/websockets) and a [key-value store](/keyvalue) for connections. + +We intend to deploy to AWS and will use Terratest to ensure that the following: + +- **API Gateway WebSocket**: Confirm that the websocket endpoint is correctly configured for real-time communication. +- **DynamoDB Table**: Verify that the key-value store for connections is created and operational. +- **IAM Roles**: Ensure that permissions for interacting with AWS services are correctly set up. + +Let's start by creating a new project for our application. + +```bash +nitric new my-websocket-app go-starter +``` + +### Application code + +Replace the contents of `services\hello.go` with our websockets application. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/nitrictech/go-sdk/nitric" + "github.com/nitrictech/go-sdk/nitric/keyvalue" + "github.com/nitrictech/go-sdk/nitric/websockets" +) + +func main() { + // Create a WebSocket endpoint named "public". + ws := nitric.NewWebsocket("public") + + // Initialize a KV store named "connections" with Get, Set, and Delete permissions. + connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) + + // Handle new WebSocket connections by storing the connection ID in the KV store. + ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + return + } + }) + + // Handle WebSocket disconnections by removing the connection ID from the KV store. + ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { + err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) + if err != nil { + return + } + }) + + // Handle incoming messages by broadcasting them to all other connections. + ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { + connectionStream, err := connections.Keys(context.TODO()) + if err != nil { + return + } + senderId := ctx.Request.ConnectionID() + + for { + connectionId, err := connectionStream.Recv() + if err != nil { + break + } + + if connectionId == senderId { + continue + } + + message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) + err = ws.Send(context.TODO(), connectionId, []byte(message)) + if err != nil { + return + } + } + }) + + nitric.Run() +} +``` + +## Deploying to AWS with a Terraform provider + +To deploy your application with Terraform you'll need to use Nitric's Terraform providers. You can learn more about using Nitric with Terraform [here](/reference/providers/terraform). + +``` +nitric stack new dev aws-tf +``` + +Update this newly created stack file to include your target region: + +```yaml +# The nitric provider to use +provider: nitric/awstf@1.11.6 + +# The target aws region to deploy to +region: us-east-2 +``` + +The Nitric Terraform providers are currently in preview, to enable them you'll need to enable beta-providers in your Nitric project. You can do this by adding the following to your project's `nitric.yaml` file: + +``` +preview: + - beta-providers +``` + +Once you've created your Nitric stack, you can generate the Terraform code by running the following command: + +``` +nitric up +``` + +This will generate the Terraform code for your Nitric application into a folder named `cdktf.out` by default. + +## Add and execute Terratest + +Add the necessary dependencies for Terratest: + +```bash +go get github.com/gruntwork-io/terratest/modules/terraform +go get github.com/stretchr/testify/assert +go get github.com/aws/aws-sdk-go/aws +go get github.com/aws/aws-sdk-go/aws/session +go get github.com/aws/aws-sdk-go/service/apigatewayv2 +go get github.com/aws/aws-sdk-go/service/dynamodb +go get github.com/aws/aws-sdk-go/service/iam +``` + +### Create the Test File + +Create a new file named `terraform_resources_test.go` in your project’s test directory: + +```bash +mkdir -p test +touch test/terraform_resources_test.go +``` + +Add the following code to `terraform_resources_test.go`: + +```go +package test + +import ( + "testing" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/apigatewayv2" + "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/aws/aws-sdk-go/service/iam" + "github.com/gruntwork-io/terratest/modules/terraform" + "github.com/stretchr/testify/assert" +) + +func TestTerraformResources(t *testing.T) { + // Set Terraform options, specifying the directory with your Terraform configuration + terraformOptions := &terraform.Options{ + TerraformDir: "../cdktf.out/stacks/my-websocket-app-dev", + } + + // Ensure resources are destroyed after test completion + defer terraform.Destroy(t, terraformOptions) + + // Initialize and apply the Terraform configuration + terraform.InitAndApply(t, terraformOptions) + + // Initialize AWS session for interacting with AWS services + sess := session.Must(session.NewSession(&aws.Config{Region: aws.String("us-east-2")})) + + // Test DynamoDB table creation (key-value store) + dynamoClient := dynamodb.New(sess) + tableName := "connections" // Name of the DynamoDB table to check + _, err := dynamoClient.DescribeTable(&dynamodb.DescribeTableInput{ + TableName: aws.String(tableName), + }) + assert.NoError(t, err, "Expected DynamoDB table 'connections' to be created") + + // Test IAM role creation + iamClient := iam.New(sess) + roleName := "go-realtime_services-hello" // Name of the IAM role to check + _, err = iamClient.GetRole(&iam.GetRoleInput{ + RoleName: aws.String(roleName), + }) + assert.NoError(t, err, "Expected IAM role 'go-realtime_services-hello' to be created") + + // Test API gateway webSocket creation + apiClient := apigatewayv2.New(sess) + apiName := "public" // Name of the API Gateway WebSocket to check + result, err := apiClient.GetApis(&apigatewayv2.GetApisInput{}) + assert.NoError(t, err) + found := false + for _, api := range result.Items { + if *api.Name == apiName { + found = true + break + } + } + assert.True(t, found, "Expected API Gateway WebSocket 'public' to be created") +} +``` + +### Run the tests + +To run the tests, navigate to your project’s root directory and execute the Go test command: + +```bash +go test -v ./test +``` + +This will: + +1. Deploy the infrastructure using Terraform. +2. Validate the creation of the DynamoDB table, IAM role, and API Gateway WebSocket. +3. Clean up the infrastructure after testing. + +The output should confirm the successful creation and validation of each resource. From ad17e15e43356d91c8a4a183c45d7c3fbe0f5322 Mon Sep 17 00:00:00 2001 From: Rak Siva Date: Mon, 14 Oct 2024 19:30:39 -0600 Subject: [PATCH 02/15] update dictionary --- dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/dictionary.txt b/dictionary.txt index ab5cf9f2b..765163b14 100644 --- a/dictionary.txt +++ b/dictionary.txt @@ -216,6 +216,7 @@ reproducibility misconfigurations DSL UI +init ^.+[-:_]\w+$ [a-z]+([A-Z0-9]|[A-Z0-9]\w+) From 4a19ca79749977786321ca1d29f46e0f8eb4176b Mon Sep 17 00:00:00 2001 From: David Moore Date: Tue, 15 Oct 2024 13:33:30 +1100 Subject: [PATCH 03/15] add frontmatter --- docs/guides/go/realtime-messaging.mdx | 12 +++++++----- docs/guides/terraform/terratest.mdx | 8 ++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 7e31eb25b..54c75451c 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -1,8 +1,10 @@ -export const description = - 'Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or GCP' - -export const title_meta = - 'Building your first WebSocket Application with Go and Nitric' +--- +title_seo: Building your first WebSocket Application with Go and Nitric +description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or GCP. +tags: + - Realtime & Websockets + - Key Value Store +--- # Building your first WebSocket Application with Nitric diff --git a/docs/guides/terraform/terratest.mdx b/docs/guides/terraform/terratest.mdx index 192fb63fe..e32694601 100644 --- a/docs/guides/terraform/terratest.mdx +++ b/docs/guides/terraform/terratest.mdx @@ -1,5 +1,9 @@ -export const description = - 'Use Terratest to validate the infrastructure of a Nitric GO project deployed with Terraform' +--- +description: Use Terratest to validate the infrastructure of a Nitric GO project deployed with Terraform +tags: + - Terraform + - Testing +--- # Testing AWS resources with Terratest From 36a99f00263223a68bb88350d7525f79f4452394 Mon Sep 17 00:00:00 2001 From: David Moore Date: Tue, 15 Oct 2024 13:51:01 +1100 Subject: [PATCH 04/15] fix spellcheck --- docs/guides/go/realtime-messaging.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 54c75451c..d561c0437 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -1,6 +1,6 @@ --- title_seo: Building your first WebSocket Application with Go and Nitric -description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or GCP. +description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or Google Cloud. tags: - Realtime & Websockets - Key Value Store From 258e5c5bdafe56cf47dcc125af5a6c0c11f4b6fe Mon Sep 17 00:00:00 2001 From: David Moore Date: Tue, 15 Oct 2024 13:51:10 +1100 Subject: [PATCH 05/15] clean up --- docs/guides/python/graphql.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/guides/python/graphql.mdx b/docs/guides/python/graphql.mdx index 170378098..09d100489 100644 --- a/docs/guides/python/graphql.mdx +++ b/docs/guides/python/graphql.mdx @@ -5,8 +5,6 @@ tags: - API --- -export const title_meta = 'Building a GraphQL API with Python and Nitric' - # Building a GraphQL API with Nitric ## What we'll be doing From f1c6f1c92d6d5daf0859d857f5743c6426857aa4 Mon Sep 17 00:00:00 2001 From: David Moore <4121492+davemooreuws@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:53:16 +1100 Subject: [PATCH 06/15] Update docs/guides/go/realtime-messaging.mdx Co-authored-by: Ryan Cartwright <39504851+HomelessDinosaur@users.noreply.github.com> --- docs/guides/go/realtime-messaging.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index d561c0437..e53208346 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -23,7 +23,7 @@ tags: - [Go](https://go.dev/dl/) - The [Nitric CLI](https://nitric.io/docs/installation) -- An [AWS](https://aws.amazon.com), [GCP](https://cloud.google.com), or [Azure](https://azure.microsoft.com) account (_your choice_) +- An [AWS](https://aws.amazon.com) account ## Getting started From 6be0994e8fa2971a68894ab926a0bdf4a4a06c03 Mon Sep 17 00:00:00 2001 From: David Moore <4121492+davemooreuws@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:53:30 +1100 Subject: [PATCH 07/15] Update docs/guides/go/realtime-messaging.mdx Co-authored-by: Ryan Cartwright <39504851+HomelessDinosaur@users.noreply.github.com> --- docs/guides/go/realtime-messaging.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index e53208346..a8b9bee5f 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -17,7 +17,7 @@ tags: - Remove connections on disconnect - Broadcast messages to all connected clients 4. Run locally for testing -5. Deploy to a cloud of your choice +5. Deploy to AWS ## Prerequisites From fc192487ef851be5df69688f7f3687338983f352 Mon Sep 17 00:00:00 2001 From: David Moore <4121492+davemooreuws@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:53:36 +1100 Subject: [PATCH 08/15] Update docs/guides/go/realtime-messaging.mdx Co-authored-by: Ryan Cartwright <39504851+HomelessDinosaur@users.noreply.github.com> --- docs/guides/go/realtime-messaging.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index a8b9bee5f..0179605d4 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -51,7 +51,6 @@ The scaffolded project should have the following structure: +--services/ | +-- hello/ | +-- main.go -| ... +--nitric.yaml +--go.mod +--go.sum From d5bd34e13607686cc8924f547fa701fcac939279 Mon Sep 17 00:00:00 2001 From: David Moore <4121492+davemooreuws@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:34:05 +1100 Subject: [PATCH 09/15] Apply suggestions from code review Co-authored-by: Ryan Cartwright <39504851+HomelessDinosaur@users.noreply.github.com> --- docs/guides/go/realtime-messaging.mdx | 34 +++++---------------------- docs/guides/terraform/terratest.mdx | 18 +++++++------- 2 files changed, 15 insertions(+), 37 deletions(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 0179605d4..32c8ab7cf 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -90,16 +90,6 @@ func main() { // Initialize a KV store named "connections" with Get, Set, and Delete permissions. connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) - // Handle new WebSocket connections by storing the connection ID in the KV store. - ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { - err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ - "connectionId": ctx.Request.ConnectionID(), - }) - if err != nil { - return - } - }) - // Add event handlers here nitric.Run() @@ -108,8 +98,8 @@ func main() { Here we're creating: -- A WebSocket endpoint named `public` -- A Key-Value store named `connections` to track WebSocket connections +- A [WebSocket](/websockets) endpoint named `public` +- A [Key-Value store](/keyvalue) named `connections` to track WebSocket connections From here, let's add some features to that function that allow us to manage connections and broadcast messages. @@ -150,6 +140,7 @@ ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { if err != nil { return } + senderId := ctx.Request.ConnectionID() for { @@ -205,15 +196,6 @@ func main() { } }) - ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { - err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ - "connectionId": ctx.Request.ConnectionID(), - }) - if err != nil { - return - } - }) - ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) if err != nil { @@ -263,17 +245,13 @@ Now that you have your WebSocket application defined with handlers for each even nitric start ``` -Once it starts, the application will be ready to accept WebSocket connections. You can use a WebSocket client like Postman or any other WebSocket tool to test the application. +Once it starts, the application will be ready to accept WebSocket connections. You can use a WebSocket client like Postman or any other WebSocket tool to test the application. Alternatively, you can use the [Nitric Dashboard](/get-started/foundations/projects/local-development#local-dashboard). -We will keep it running for our tests. If you want to update your services, just save them, and they'll be reloaded automatically. +We will keep it running for our tests. ## Deploy to the cloud -At this point, you can deploy what you've built to any of the supported cloud providers. To do this, start by setting up your credentials and any configuration for the cloud you prefer: - -- [AWS](/reference/providers/aws) -- [Azure](/reference/providers/azure) -- [GCP](/reference/providers/gcp) +At this point, you can deploy what you've built to any of the supported cloud providers. To do this, start by setting up your credentials and configuration for [AWS](/providers/pulumi/aws). Next, we'll need to create a `stack`. A stack represents a deployed instance of an application, which is a key value store of resources defined in your project. You might want separate stacks for each environment, such as stacks for `dev`, `test`, and `prod`. For now, let's start by creating a `dev` stack. diff --git a/docs/guides/terraform/terratest.mdx b/docs/guides/terraform/terratest.mdx index e32694601..8ab5856f9 100644 --- a/docs/guides/terraform/terratest.mdx +++ b/docs/guides/terraform/terratest.mdx @@ -1,5 +1,5 @@ --- -description: Use Terratest to validate the infrastructure of a Nitric GO project deployed with Terraform +description: Use Terratest to validate the infrastructure of a Nitric Go project deployed with Terraform tags: - Terraform - Testing @@ -13,10 +13,10 @@ This guide will walk you through adding [Terratest](https://terratest.gruntwork. Terratest is designed to automate the entire process of testing your Terraform code with the following steps: -- **Initialize**: Terratest will automatically run terraform init to initialize the Terraform working directory. -- **Apply**: It will then run terraform apply to deploy the infrastructure as defined in your Terraform code. +- **Initialize**: Terratest will automatically run `terraform init` to initialize the Terraform working directory. +- **Apply**: It will then run `terraform apply` to deploy the infrastructure as defined in your Terraform code. - **Assert**: The test script will then run assertions to check that the infrastructure was created as expected. -- **Teardown**: Finally, it will run terraform destroy to tear down the infrastructure after the test completes. +- **Teardown**: Finally, it will run `terraform destroy` to tear down the infrastructure after the test completes. ## What we'll be doing @@ -26,7 +26,7 @@ Terratest is designed to automate the entire process of testing your Terraform c ## Create and set up your application. -Our sample project creates a real-time communication service using [websockets](/websockets) and a [key-value store](/keyvalue) for connections. +Our sample project creates a real-time communication service using [WebSockets](/websockets) and a [key-value store](/keyvalue) for connections. We intend to deploy to AWS and will use Terratest to ensure that the following: @@ -113,7 +113,7 @@ func main() { ## Deploying to AWS with a Terraform provider -To deploy your application with Terraform you'll need to use Nitric's Terraform providers. You can learn more about using Nitric with Terraform [here](/reference/providers/terraform). +To deploy your application with Terraform you'll need to use Nitric's Terraform providers. You can learn more about using Nitric with Terraform [here](/providers/terraform). ``` nitric stack new dev aws-tf @@ -156,7 +156,7 @@ go get github.com/aws/aws-sdk-go/aws/session go get github.com/aws/aws-sdk-go/service/apigatewayv2 go get github.com/aws/aws-sdk-go/service/dynamodb go get github.com/aws/aws-sdk-go/service/iam -``` +go get google.golang.org/genproto@latest ### Create the Test File @@ -208,11 +208,11 @@ func TestTerraformResources(t *testing.T) { // Test IAM role creation iamClient := iam.New(sess) - roleName := "go-realtime_services-hello" // Name of the IAM role to check + roleName := "my-websocket-app_websockets-main" // Name of the IAM role to check _, err = iamClient.GetRole(&iam.GetRoleInput{ RoleName: aws.String(roleName), }) - assert.NoError(t, err, "Expected IAM role 'go-realtime_services-hello' to be created") + assert.NoError(t, err, "Expected IAM role 'my-websocket-app_websockets-main' to be created") // Test API gateway webSocket creation apiClient := apigatewayv2.New(sess) From 04eaddd1bf23622750bf0697823725218c0f1a36 Mon Sep 17 00:00:00 2001 From: Ryan Cartwright Date: Tue, 15 Oct 2024 16:15:45 +1100 Subject: [PATCH 10/15] review suggestions --- docs/guides/go/realtime-messaging.mdx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 32c8ab7cf..3c7018951 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -1,6 +1,6 @@ --- title_seo: Building your first WebSocket Application with Go and Nitric -description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS, Azure or Google Cloud. +description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS. tags: - Realtime & Websockets - Key Value Store @@ -140,7 +140,7 @@ ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { if err != nil { return } - + senderId := ctx.Request.ConnectionID() for { @@ -239,7 +239,14 @@ Do a quick `go mod tidy` to make sure all new dependencies are resolved. ## Ok, let's run this thing! -Now that you have your WebSocket application defined with handlers for each event, it's time to test it locally. +Now that you have your WebSocket application defined with handlers for each event, it's time to test it locally. Update your `nitric.yaml` to point to the service at `websockets/main.go`: + +```yaml +services: + - match: websockets/* + runtime: go + start: go run ./$SERVICE_PATH +``` ```bash nitric start @@ -265,7 +272,10 @@ Continue by checking your stack file `nitric.dev.yaml` and adding in your prefer ### AWS -Note: You are responsible for staying within the limits of the free tier or any costs associated with deployment. + + You are responsible for staying within the limits of the free tier or any + costs associated with deployment. + We called our stack `dev`. Let's try deploying it with the `up` command: From 4a91917197ae9e7a9a080a8648851bee1e8fbd1b Mon Sep 17 00:00:00 2001 From: Ryan Cartwright Date: Tue, 15 Oct 2024 16:43:24 +1100 Subject: [PATCH 11/15] fix link for install --- docs/guides/go/realtime-messaging.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 3c7018951..690a7263d 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -22,7 +22,7 @@ tags: ## Prerequisites - [Go](https://go.dev/dl/) -- The [Nitric CLI](https://nitric.io/docs/installation) +- The [Nitric CLI](/get-started/installation) - An [AWS](https://aws.amazon.com) account ## Getting started From e0be643f2cbef852ba7e503c055e85014511c69e Mon Sep 17 00:00:00 2001 From: David Moore Date: Tue, 15 Oct 2024 17:25:34 +1100 Subject: [PATCH 12/15] missing backtick --- docs/guides/terraform/terratest.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/guides/terraform/terratest.mdx b/docs/guides/terraform/terratest.mdx index 8ab5856f9..bd710bbe1 100644 --- a/docs/guides/terraform/terratest.mdx +++ b/docs/guides/terraform/terratest.mdx @@ -157,6 +157,7 @@ go get github.com/aws/aws-sdk-go/service/apigatewayv2 go get github.com/aws/aws-sdk-go/service/dynamodb go get github.com/aws/aws-sdk-go/service/iam go get google.golang.org/genproto@latest +``` ### Create the Test File From 63addf1e4998e1a34f8f8e890329058fadace494 Mon Sep 17 00:00:00 2001 From: Rak Siva Date: Tue, 15 Oct 2024 08:57:52 -0600 Subject: [PATCH 13/15] Apply suggestions from code review Co-authored-by: Jye Cusch Simplify project so it doesn't need an update to the nitric.yaml config. Simplify project so it doesn't need an update to the nitric.yaml config. handle errors and add consistency between guides --- docs/guides/go/realtime-messaging.mdx | 70 ++++---- docs/guides/terraform/terratest.mdx | 150 +++++++++--------- .../guides/realtime-messaging/dashboard.png | Bin 0 -> 212673 bytes 3 files changed, 115 insertions(+), 105 deletions(-) create mode 100644 public/images/guides/realtime-messaging/dashboard.png diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 690a7263d..722681550 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -1,16 +1,15 @@ --- -title_seo: Building your first WebSocket Application with Go and Nitric description: Use the Nitric framework to easily build and deploy Go WebSocket applications for AWS. tags: - Realtime & Websockets - Key Value Store --- -# Building your first WebSocket Application with Nitric +# Building a chat app in Go with WebSockets and Nitric ## What we'll be doing -1. Use Nitric to create a WebSocket endpoint +1. Use Nitric to create a WebSocket API 2. Manage WebSocket connections using a Key-Value store 3. Handle WebSocket events: - Register connections on connect @@ -23,20 +22,20 @@ tags: - [Go](https://go.dev/dl/) - The [Nitric CLI](/get-started/installation) -- An [AWS](https://aws.amazon.com) account +- An [AWS](https://aws.amazon.com) account (optional) ## Getting started We'll start by creating a new project for our WebSocket application. ```bash -nitric new my-websocket-app go-starter +nitric new websocket-app go-starter ``` Next, open the project in your editor of choice. ```bash -cd my-websocket-app +cd websocket-app ``` Make sure all dependencies are resolved: @@ -69,9 +68,9 @@ If everything is working as expected, you can now delete all files/folders in th ## Building the WebSocket Application -Let's begin by setting up the WebSocket application. First, create a new folder called `websockets` within the services directory. Inside this folder, add a file named `main.go`, and include the following code: +Let's begin by setting up the WebSocket application. Add a file named `main.go` to your 'services/websockets' folder, and include the following code: -```go +```go title:services/websockets/main.go package main import ( @@ -84,7 +83,7 @@ import ( ) func main() { - // Create a WebSocket endpoint named "public". + // Create a WebSocket API named "public". ws := nitric.NewWebsocket("public") // Initialize a KV store named "connections" with Get, Set, and Delete permissions. @@ -98,8 +97,8 @@ func main() { Here we're creating: -- A [WebSocket](/websockets) endpoint named `public` -- A [Key-Value store](/keyvalue) named `connections` to track WebSocket connections +- A [WebSocket](/websockets) API named `public` +- A [Key-Value store](/keyvalue) named `connections` to track client connections From here, let's add some features to that function that allow us to manage connections and broadcast messages. @@ -112,10 +111,11 @@ From here, let's add some features to that function that allow us to manage conn ```go ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { - err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + err := connections.Set(context.Background(), ctx.Request.ConnectionID(), map[string]interface{}{ "connectionId": ctx.Request.ConnectionID(), }) if err != nil { + fmt.Println("Error storing connection ID in KV store:", err) return } }) @@ -125,8 +125,9 @@ ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { ```go ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { - err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) + err := connections.Delete(context.Background(), ctx.Request.ConnectionID()) if err != nil { + fmt.Println("Error deleting connection ID in KV store:", err) return } }) @@ -136,8 +137,9 @@ ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { ```go ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { - connectionStream, err := connections.Keys(context.TODO()) + connectionStream, err := connections.Keys(context.Background()) if err != nil { + fmt.Println("Error retrieving connection keys from KV store:", err) return } @@ -154,8 +156,9 @@ ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { } message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) - err = ws.Send(context.TODO(), connectionId, []byte(message)) + err = ws.Send(context.Background(), connectionId, []byte(message)) if err != nil { + fmt.Println("Error sending message to connection ID", connectionId, ":", err) return } } @@ -167,7 +170,7 @@ ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) {
Your code should look like this: -```go +```go title:services/websockets/main.go package main import ( @@ -188,24 +191,27 @@ func main() { // Handle new WebSocket connections by storing the connection ID in the KV store. ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { - err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ + err := connections.Set(context.Background(), ctx.Request.ConnectionID(), map[string]interface{}{ "connectionId": ctx.Request.ConnectionID(), }) if err != nil { + fmt.Println("Error storing connection ID in KV store:", err) return } }) ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { - err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) + err := connections.Delete(context.Background(), ctx.Request.ConnectionID()) if err != nil { + fmt.Println("Error deleting connection ID in KV store:", err) return } }) ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { - connectionStream, err := connections.Keys(context.TODO()) + connectionStream, err := connections.Keys(context.Background()) if err != nil { + fmt.Println("Error retrieving connection keys from KV store:", err) return } @@ -222,8 +228,9 @@ func main() { } message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) - err = ws.Send(context.TODO(), connectionId, []byte(message)) + err = ws.Send(context.Background(), connectionId, []byte(message)) if err != nil { + fmt.Println("Error sending message to connection ID", connectionId, ":", err) return } } @@ -239,28 +246,23 @@ Do a quick `go mod tidy` to make sure all new dependencies are resolved. ## Ok, let's run this thing! -Now that you have your WebSocket application defined with handlers for each event, it's time to test it locally. Update your `nitric.yaml` to point to the service at `websockets/main.go`: - -```yaml -services: - - match: websockets/* - runtime: go - start: go run ./$SERVICE_PATH -``` +Now that you have your WebSocket application defined with handlers for each event, it's time to test it locally. ```bash nitric start ``` -Once it starts, the application will be ready to accept WebSocket connections. You can use a WebSocket client like Postman or any other WebSocket tool to test the application. Alternatively, you can use the [Nitric Dashboard](/get-started/foundations/projects/local-development#local-dashboard). +Once it starts, the application will be ready to accept WebSocket connections that you can easily test with the [Nitric Dashboard](/get-started/foundations/projects/local-development#local-dashboard). You can find the URL to the dashboard in the terminal running the Nitric CLI, by default, it is set to - http://localhost:49152. + +![websocket dashboard](/docs/images/guides/realtime-messaging/dashboard.png) -We will keep it running for our tests. +The dashboard will show you the WebSocket URL and allow you to connect as a client to send, receive and monitor messages. ## Deploy to the cloud -At this point, you can deploy what you've built to any of the supported cloud providers. To do this, start by setting up your credentials and configuration for [AWS](/providers/pulumi/aws). +At this point, you can deploy what you've built to any of the supported cloud providers. In this example we'll deploy to AWS. Start by setting up your credentials and configuration for the [nitric/aws provider](/providers/pulumi/aws). -Next, we'll need to create a `stack`. A stack represents a deployed instance of an application, which is a key value store of resources defined in your project. You might want separate stacks for each environment, such as stacks for `dev`, `test`, and `prod`. For now, let's start by creating a `dev` stack. +Next, we'll need to create a `stack file` (deployment target). A stack is a deployed instance of an application. You might want separate stacks for each environment, such as stacks for `dev`, `test`, and `prod`. For now, let's start by creating a file for the `dev` stack. The `stack new` command below will create a stack named `dev` that uses the `aws` provider. @@ -268,7 +270,7 @@ The `stack new` command below will create a stack named `dev` that uses the `aws nitric stack new dev aws ``` -Continue by checking your stack file `nitric.dev.yaml` and adding in your preferred region. Let's use `us-east-1`. +Edit the stack file `nitric.dev.yaml` and set your preferred AWS region, for example `us-east-1`. ### AWS @@ -277,7 +279,7 @@ Continue by checking your stack file `nitric.dev.yaml` and adding in your prefer costs associated with deployment. -We called our stack `dev`. Let's try deploying it with the `up` command: +Let's try deploying the stack with the `up` command: ```bash nitric up diff --git a/docs/guides/terraform/terratest.mdx b/docs/guides/terraform/terratest.mdx index bd710bbe1..f92c0c1d0 100644 --- a/docs/guides/terraform/terratest.mdx +++ b/docs/guides/terraform/terratest.mdx @@ -30,84 +30,92 @@ Our sample project creates a real-time communication service using [WebSockets]( We intend to deploy to AWS and will use Terratest to ensure that the following: -- **API Gateway WebSocket**: Confirm that the websocket endpoint is correctly configured for real-time communication. +- **WebSocket API**: Confirm that the API Gateway WebSocket API is correctly configured for real-time communication. - **DynamoDB Table**: Verify that the key-value store for connections is created and operational. - **IAM Roles**: Ensure that permissions for interacting with AWS services are correctly set up. -Let's start by creating a new project for our application. +Let's begin by setting up the WebSocket application that we'll be testing. + + + You can find a more detailed set of instructions in this guide - [Building a + chat app in Go with WebSockets and Nitric ](/guides/go/realtime-messaging). + Once you've completed this guide, skip to [the next + step](#deploying-to-aws-with-a-terraform-provider) + ```bash -nitric new my-websocket-app go-starter +nitric new websocket-app go-starter ``` -### Application code - -Replace the contents of `services\hello.go` with our websockets application. +Then you can delete all files/folders in the `services/` folder and add a file named `main.go` to your 'services/websockets' folder with the following code: -```go +```go title:services/websockets/main.go package main import ( - "context" - "fmt" + "context" + "fmt" - "github.com/nitrictech/go-sdk/nitric" - "github.com/nitrictech/go-sdk/nitric/keyvalue" - "github.com/nitrictech/go-sdk/nitric/websockets" + "github.com/nitrictech/go-sdk/nitric" + "github.com/nitrictech/go-sdk/nitric/keyvalue" + "github.com/nitrictech/go-sdk/nitric/websockets" ) func main() { - // Create a WebSocket endpoint named "public". - ws := nitric.NewWebsocket("public") - - // Initialize a KV store named "connections" with Get, Set, and Delete permissions. - connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) - - // Handle new WebSocket connections by storing the connection ID in the KV store. - ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { - err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{ - "connectionId": ctx.Request.ConnectionID(), - }) - if err != nil { - return - } - }) - - // Handle WebSocket disconnections by removing the connection ID from the KV store. - ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { - err := connections.Delete(context.TODO(), ctx.Request.ConnectionID()) - if err != nil { - return - } - }) - - // Handle incoming messages by broadcasting them to all other connections. - ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { - connectionStream, err := connections.Keys(context.TODO()) - if err != nil { - return - } - senderId := ctx.Request.ConnectionID() - - for { - connectionId, err := connectionStream.Recv() - if err != nil { - break - } - - if connectionId == senderId { - continue - } - - message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) - err = ws.Send(context.TODO(), connectionId, []byte(message)) - if err != nil { - return - } - } - }) - - nitric.Run() + // Create a WebSocket endpoint named "public". + ws := nitric.NewWebsocket("public") + + // Initialize a KV store named "connections" with Get, Set, and Delete permissions. + connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete) + + // Handle new WebSocket connections by storing the connection ID in the KV store. + ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { + err := connections.Set(context.Background(), ctx.Request.ConnectionID(), map[string]interface{}{ + "connectionId": ctx.Request.ConnectionID(), + }) + if err != nil { + fmt.Println("Error storing connection ID in KV store:", err) + return + } + }) + + ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) { + err := connections.Delete(context.Background(), ctx.Request.ConnectionID()) + if err != nil { + fmt.Println("Error deleting connection ID in KV store:", err) + return + } + }) + + ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) { + connectionStream, err := connections.Keys(context.Background()) + if err != nil { + fmt.Println("Error retrieving connection keys from KV store:", err) + return + } + + senderId := ctx.Request.ConnectionID() + + for { + connectionId, err := connectionStream.Recv() + if err != nil { + break + } + + if connectionId == senderId { + continue + } + + message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message()) + err = ws.Send(context.Background(), connectionId, []byte(message)) + if err != nil { + fmt.Println("Error sending message to connection ID", connectionId, ":", err) + return + } + } + }) + + nitric.Run() } ``` @@ -121,7 +129,7 @@ nitric stack new dev aws-tf Update this newly created stack file to include your target region: -```yaml +```yaml title:nitric.dev.yaml # The nitric provider to use provider: nitric/awstf@1.11.6 @@ -131,18 +139,18 @@ region: us-east-2 The Nitric Terraform providers are currently in preview, to enable them you'll need to enable beta-providers in your Nitric project. You can do this by adding the following to your project's `nitric.yaml` file: -``` +```yaml title:nitric.yaml preview: - beta-providers ``` -Once you've created your Nitric stack, you can generate the Terraform code by running the following command: +Once you've created your stack file, you can generate the Terraform code by running the following command: ``` nitric up ``` -This will generate the Terraform code for your Nitric application into a folder named `cdktf.out` by default. +This will generate Terraform code which can deploy your application. The output will be in a folder named `cdktf.out` by default. ## Add and execute Terratest @@ -170,7 +178,7 @@ touch test/terraform_resources_test.go Add the following code to `terraform_resources_test.go`: -```go +```go title:test/terraform_resources_test.go package test import ( @@ -187,7 +195,7 @@ import ( func TestTerraformResources(t *testing.T) { // Set Terraform options, specifying the directory with your Terraform configuration terraformOptions := &terraform.Options{ - TerraformDir: "../cdktf.out/stacks/my-websocket-app-dev", + TerraformDir: "../cdktf.out/stacks/websocket-app-dev", } // Ensure resources are destroyed after test completion @@ -209,11 +217,11 @@ func TestTerraformResources(t *testing.T) { // Test IAM role creation iamClient := iam.New(sess) - roleName := "my-websocket-app_websockets-main" // Name of the IAM role to check + roleName := "websocket-app_websockets-main" // Name of the IAM role to check _, err = iamClient.GetRole(&iam.GetRoleInput{ RoleName: aws.String(roleName), }) - assert.NoError(t, err, "Expected IAM role 'my-websocket-app_websockets-main' to be created") + assert.NoError(t, err, "Expected IAM role 'websocket-app_websockets-main' to be created") // Test API gateway webSocket creation apiClient := apigatewayv2.New(sess) diff --git a/public/images/guides/realtime-messaging/dashboard.png b/public/images/guides/realtime-messaging/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9da077c060daf5d032b8b3ea561078c7a40760 GIT binary patch literal 212673 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 R6NfxjimnjTxbQ4;Xf$+REZ9e$!E93S% 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°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

40m0m3R& zbs8#h@sJ3C;a$Umc$B~N7enpJ%jm6}>z^!zUJcp^aMCV1i%w_s7KcnSENn8ltWkvm zPn;rFDyASxwyY0o^vl6T;v8HGOLSTsTe@vlld<;AhA+U=^?pg&0Ru+y(^Y!j_h(ut(Jm`_}6N1q#^pWAYTXg5>N9Hw>czkzkCF9rS@j7bScTbuCxpJ;G&8Klv2F)velJ> z#QO3=`Z(!|b%HGBlha}O(=&xsw-4}x?vR<+v&kh?*y+>!ARb#J zDWR9FyQ!ni#j*q-I+gZP^;p=+ns|_IkR|)Z{syO5?rG*MPRJm)K$Wh$L3jcSc`pmA zHk2W$@NUga_J>UU)=%qH>VRDmmPRbR$iNax~cQfc1n@LdeX9^dP#<@MQ^@$phH?L(QB4a6tt+O@~Ea-O=Q{6c>{N$jO;VU}(UD~QB7bsRgocaFm#`sl1+ z!MQ9_@o>MVbXAw*_;A*+=VF?-N`|f1>@dbGaLSth5!J9D3R|$)R8lhNq(OHs8D!oL ztkh;7`&fuarM(lxUaqw( z>|Im_$yYq?{z1Ne%0t^IFBlm&A-U!1*;W={H^0z-YeY;MFQ~$7@JINC z>))dN{+fDMgrf|d{6NWlqi7w=H0-Y=*%*v>EeE*F>iOiW;f|v9{pW~R3GdAHGOYPShurY_b?i18()=2L*z0?k!D3G~MD^1a+Uo_1 z&c*pL=OuS8u&KOb(7{{?I4+%;D5=I=hl9FA&I=ds5os(7Y*uI!jMD0mMzQ^veO{0w z1nnxZGI&smA-ZRJDAn^^)da>f$Z&D43UiPcG)!vu!XdA$;n!{D&<wRx$HALLYQk{w;h)0hc)G-!-~%G+s{3$k8$O4n%b{x5Sp=qz)}A z?nrErz13@~=OprKQuxJgk;2RtBP<)ZKsVRM#PK@mqhClO9Tpn*kyR5gX}TM`%UA4F zg|OD{1AM9bSuFQ5qM_p%#3Kfj0S`!7ttNj#H&Sp$jszoEyznWGj9!QvWvP+Sd&O9{ z<+23ZeQ)}8KY9ltHqz{LVU+?dpu&m6Lk#w?hMGoU{g9aGoE>SuLem8Zw{mvU6PDFz z-+#USZeH=V$;Uh)SfE!=>9Ll<98lE>xkQjhL^Oj@j?-xH^HSIw>zQ^Tu2!?b6wJ~Q zoe&@IpRFV0%tdLDbK&&f*=H@G7~e>V18H6aZEh|KaBy&Iy(mvyB6jbwcO_gqq zue}M61>(kGZ0tF}3@p%a-gucLfImr4x9V{p7HgQGT@VqaCsht#9xcSfj2%swbclzZ zr8~W0wpUs%MR+g7wab3rEh42lw&irF&>s5YR=f|RTn?~Ujo1qZTR&S!V5H?q>3#1NP*c5pIN9p{>f$)ACoBasa^tc5(dXBq^`fdM; znRAaIhYOr^BM+HwQmtaG)-FsC!Pv7(Pf-mIjd_^#34N`cxl8Z__CjAdrsV5Ezaw6Y zzX}N))Olk~g;i_y6q7Y?P2^J7uA9%5&MDf4vPlZ7Og-*>CrRLh27Pv`kz)I-bZLlJ zT)qQQzCD2d9-NZr*Cd|a|i;}#6DQ2#2(xF-ZfY#VdUhhRXN0(`KxN(9OsFDR|K zaB5U-IL*Q_1mPDlG2c^MD`;c0MpQSE;ZnmoC9$B_?M6JLDVy$1em`o%s5D*FyhT!i zGqauPPS~d#thgS+T9{fNq@hhHocgNWo&1_561#X-#%E3t@Ar^Pn5#T^L2KW=Kzs63~lGlzn6PQ!^Ce+V&g_bEmXU%rrVs&TDYs9D2G zDsE56X~5%tvQ^X4QetB!bfSGX1FD;kbQC;}y*RXxO0qE(^hZzvKIsY-OolX$`k|o4 zJ%s|~*cAh461$naGp+MPYcPITBX>hK_hMX%+S+Q}M+>X9SA@o=ahMIc1<%rzlKK*~ zHTfoeHixPk?ro6OUPIf%FOKt=ED=xN6wJHo44Auz%gR{Nr0dSUZWivYA3XWF00jZO zhx=-qNyS-zTGF;|1o`e>uQS8pwTQKv3z&e!R5%TfcTFLZ0tR{;=qJmfBo6%QoOVX| z7?Pn_dN%~x?Vdzhju2<7_BG$N_V3Z0oWG-#1eS`B5U;k)9eyIP1<`2W1f%yA67Oo>(3*5! zaoi)+6tFQDem@gm|Eu@`Sj6U)?3UoV_Inb3zOelVVV{13KN1H28ga;^Semd+l#rQM zJ#$_rSMx>SZ)ar*JT78zBRY_*)$B|1$V+QFLIP;LLEk}i9y8^m#Wz|#bZ|yYdI6>0 z;I)d)BpXJRd=MV6(jQ2E#AhX0$8A!czCU}rMND!3?{5RJ0jE+%BpJN2UJoQ~wxt@A zN`Ms%D(=o90nrCe?jf;M$w=K_<|08IGnHZxbN*T|#5BKv>ZBrHqI-woe~Q{+%eYwd zilHFqzI+5yjvNz4NL>D6p$aqxgq0-0eZf`9;lxZ%lu7q<2MKiS`@;6hn1H?@rwYfE zO{?yVKg*$7$`bVg|rhtTHTGaFaPJ%17YJ=7!cWR(oVX-I;=R%y>@~QjI+xW^%B-Yu zKN+=1nd;t|b$Jm|u=`Y>aI5%%TZH|spazv;SXpR{Zof&iSQeUyi+_>y>bTL0dQ?a)PjMMYSyl=rrz(3rqiCnV6dQ3lna8SF{E&paEnOa zOH(F;VeD4<2#wBkpQ**cY%__lNkhpqp`n|6B3mx*Df5uXs_KEakGm$)QS>HBMx@AHLk(E)>RM7pp zf5xvM`GOVB)p*K?zg%~bcZ5*Z&uNC@{XU0bQY@>L(Y*VJ1TeABnSjRU4R`z^ymf0- zLnWTbz?8U#&^~l}oX_x-`_te%&M4QcqFVM__r}C1S)oE7JN_~ku?75rJuw`Ma+mmU zn*W7v=lq^o8xqQv5iCqymg=U}2M--Q_|UWDOQhsx4d3Q^^S*I~avamD)Z77It(=2e z^55^-QpO8-P%u5hZJ@%f{MCaQ@)lI8d*#)XZuW0T_O(d&m*n4ttY=<6^9oZge0*h9 zT5gO4clxdgDG@)8Qc6Fp%J-Z%hk_@pq!Bn%Q_!gB-uwnI5O(vXD`G23Lt~=ag@RjG zC0*Z=;;!jCz4AhyXBl}c7j9{?xD;j)pT4hXX@Zzwy#!&aXYUpEuNhZl#H=7^f*7@l z9KT9hA^9{kK1W1!ER{GBXhqu}W(D)>=rEALKU4_7(aPDTrdbPKr>5YPm`?C+_k~Zh zG_bg}{dugic3r9z32Un=rBOOq2yns@Rt^orsjrKhE5YZ4k77C>B90(;YzAf5hjkc& zU`J_h52>G2%13jH1U4ZyunbR{!LuE5-Agu&?SOfk9%P!N)bHO5IzPda;LRq@PT$Q> zlT3xiE0?NN1y_&@u;et>6=5wKnK&8F1Ek7H=zKB-zhR`qJxFE#_tZkB3&QF#GrLxZ z9|IdwQPA`;wNeq&lc~t~DJV>J= z(Be&J3*4i}p0e>_24ty6l0KpAXNh*2@Y5*z8Fjh9OMOJ4gF%+L)GN>b{#GXS9jEQk`2Pj?>xj$2K2=xLZ+q| zK~NZH$-x&%$}NtZ7(#-W^~IEC&!Z1~&fbc(A~T1)aG~lNA$WJZu@GPd%_tTqDph)< z_Lc-s{%PgVm;6Um&sD~Zh5IjORoE{WSy@Rom8F6?(8;{wC12aI1~M6!8xKy%ci&TU znjbw}GauMw-bb$#h-evKb1Y4ESvk{9Y~>3(6)T-Vo{X;8FTDq1^wOT#%1PL;+f>{; zjkT|IGX;Ky6q zW*(IGxk+shO2G)fe`?Y9OW>y?LUIallA%?fr^z*&I6qdSXGSVetON*jB+g5LgUOV8 zkEnk5!TL}Mupnz3;#uIZ6*7F>74Xtg3$!=4hvECvXF5vRVjvYq}FEzZnG&>lb-E#YxfS_QZ}4( zw?LhfnGni7iv{v~7eohOZKfC#&2^IEK6~J?oYzSW5{J_Q`*KoYo1W8MO48u1TSyLG z`=4PxN!$t@IHUW7bu?B!J9x`K?`pZ*<*}(^3 zX@x;I+Jw^+6Q9NRwIG>cQRr~Zlse6%*E@a8wNXYQslJ9ZQEp}O&R;xi%uu|f=XsW= z{j{eE`Q1964D4501o`k9{Lvy`W`i?HDpzMk5WDq>g=RosQqLM|)A4|+YUWsOq5)Y= zvasG%VY@MlNdsrYPtZqz($kh=&ERgg%$XM5O;FDi6)q067^GSnnC7W&el3SM4zv56v)mlrJ>faM*DOU)0UxbV#SM{ zDXQ91^Jy+TG=B|R7ki7i_F1mnA6YHieFFMtO)$)Xu-h*v^KoCYa9YNDZ}sml*Eqk) zA2GORg9JYRJbydjg3rG>V(CH4vv@SDwn@3X@qC+G-jY8B#2I>lt94TgE$m;!YPCv1 zls|r&!J!6I8z4aCG*=n=%$;%2vqA^|9s7-f>@6a_JC(4+8?6+u@&PmpEpdK0jYafk z*%2z#sun6pn()YzG@eEa(WR=md#D9G42P@kJ$Ym>uN%&8M@YFek-?0Q!3PMRl|TfeU)0NQb%@c;H^F#tiw*Du3CIjR9(m$Y6HMY% zrF7?Y0%p@ZKbvQVM46d5WJt)l+L9<*~O|)V1o?)xN&1h8GNvG)Q1;vwjEUA z(f2kgSgt1+@7&(9b;UjVL#5eQM>uIJ;Gs0HH?4oD_1i z=11#3Vp;ZAJEhD)ZNg3r|r$UomxgK zbngsPVbog|wp<{ViI=>l^cZQm|jfoYLNu| zZujX=Gm6}M5?8R!*i~&97FKP^Qgt1-`&gwtKe=ZD+icf)q|DlEmYz3^E@nSafa%&U z1T z(wkt7J06k8q=`msQSu?LF-bdQc&)ibMt)Lv5x-F>5$A?WCn@iz2Zs)k>B0wYwH9et zLwN7N5lJ(wp~~?Bxuje;w6cp7>PAOwAma`LiOC%Xyou`eT)eD*-_@$Zi`@6;_y?$d z1jhU0+I5R(G($f{?+&4fLO)&zc$yAD5kGG4c=lw{rqW=t+>Jw?Y&XVYSfubST#Lx5 z*`>fzwn z@-Cl}w8bW$c46d#Tg6yVOOT^q`=!MFBbp% zcIH35SH7$a-<44Y7?mD;1Rs+Hk6WKYG>)W#+>2%t5wmXkzB{k=^MMbR`^+Ynz+q#kaud8$4QdFr@vbMUVV^*4TkwPLX2c?I~ zikOw-&1z4K?%iaU2lCpIumu|mWAukW?Dq#sZgz^e&GmWr2VJ9T*z$a72SCya*FjFX zNeS+qHm)(Vbh7Xhm3mcKNz+y4N@j4Pyuis)5M!~ogYO!GJ+ijJw)bhs$lCt&`9O*# z-gZP+llks&A?59A+K5sTl%y=CFGhVc)5MyH)AU|AWMm};?{WcKJvQL~Mfc?7#q(7v zb#~W5bF?$OO+oECmhATf3?Q=qsR^dutnkZ`itV6z(6rl@)}+p@uL$%k9q z6-IH*UwrDV!s~FcENCC`>v&Dse;1>KUX-C8F8YWnnlfsr;f9b{HYIMu?>%w|)sF@E zNY$O%q5iST01ClaZ7M?+J#lZ_q~t0#pd65*VIMtvc`**D3-EDwNVT8pyddQKU5UjM zUnZgXJecT4nX!tcE8HUIB8z&oR#_*Hk-#@T$ehwl}yI%7Y-E%T`}`~F#JIiB$C04nSF7$ zAdNelg9YLxMR`WViTQE=P=^Z0QX+r$BSPGm>pV}~4la6{SbuA~C63l9+4o6@2^Ul-Zo@6LttRx^6Vxv-gl#X#K~-89EhAi}54^{n|Az z1Gyw?n=&YE_I1uMV63P66VM=xWWwg6|5Ftd@1x{tnM|Bt7Kf| zVPX&{pLsb-2@M=ZiXJFvT}kVkDA(#Zy+d2xzEvDIIB5Z@ReXcL=lXszqroR*Zr0); zXGfLem%D&!_N>!?+vM_U%IArv*)qN>%v`w3F+s+avd4S$W67YSpzv(J!3&l%0ck#d zWNjnCWP|fQ;N~0}iMTl=krtp6+^LXZ;rbxl&kn?+K9D#pvDLzT+e*%GI@CqCsK7T8#(BFQE72AorXN-@NCq+T4_ zsiX#*4fkyBV(e5%Qrh0#)S^OvvaKLJ9zZaSM!N`aNWTEx>y?Li#By02V3AVDx`KwU zk9h0_%IB1S^ln?%-tGO|{W(5pN_eM)C@&X?|2;K@V0-*=laP$&#kzAP8|G<2k@{>y zvd=c$#GAW&%rGeK_LLa1`a95($lZD>yP;{TXhH9Wt&7z@0r0q*MYGtJ4v~w>73!Yz zA?@O$`2nlzaHUocn<@w`eH;@rP3Ul%5uSQeU8j7o1+2dDV~$9As`vct)2*N@5tPDO zpKJw;?j4T6QN&5wVkG@!bEZoqRP$pwxWglFu%+e0hsHw(&ZauD%qCHlp@@*9i_ong zP35T(L=vd)`Ydrfj-2Wg8Wc$_=%Xqq!Ot%S#Wc7tciObI7am_t`3RF8?xa03+4J46WG zl!w=?a8XR*5iU)#mGfyUVoG|kNn`5x%eP)542%9PVmqXnqdqKC_f!n5M+EO${gOw^ z3@i5#6ZdjI_FGpdjgFjH*cF_)Xs)}A%ROclrd_+gNyJp4cw>Mvx+S|t!n0aN!>x8+ zY0SyzV%;BHce?dJi&9^jiOp!3U0LelGZ1Yjuyr}OYPM&Dz zE!om=s9z<3LP-!WYwmHFAHB$ou;bw*1?e3GcBw!h+EjQ&RcG{uk@VT)6RLnp5t-yo z-vwd>zjuh;~R?dw10+p4sbx|*agWtZ9=y@Jok-q@X+$LJbQ<}rh z=<;1PhrCuPvu zG`a+os(l&QM-gwAS5|E%x)xNFPI$*Cnz)Aam+r1gn)KSlo$ncMplk+Zn9<+oCcT=> z2ZG^ssclpk@9r!L&Xor8#BU{#NPogc^0T#NecrB%{1rQMtT`r>fXYb(oawU|etR(L z&~f$Bg{g*9)9J-6$OoxWDk#IWq}**Oj03Ai&R+b6ivOnv8fLh8q1U}kgir%d=Negs zTRBaZw1rFbG5fFd36`VFZFUpbl0}Q&+S!cmqW}ue^<;|;D|#GQkg+jeAb9Wu2gHYI z#SM2G8|E4vSywqDf@j$s_ZW~;_VII8tc;j(QYPx!9~^eu`PB_K89O^cbwvo!gz)NW zAxksf=YH6pTe*^Y;bC;!!}=-M;G}7iQ80_b7(EgdlF2E5J~AF2;1CT7S=7xb+YSYM z=UKVU=1WN=cs$4?!fo&~3MIo~SqJ|Gy|0Dk$du!WS2E??Tk2R>vAcD%_FC6^CbmC?EPB?XGzEu$s6e2Eh*$oci9e2y6X2ZSzolm z*N0iT7f%KJllswcT-?My@n`fG+f8@A1B#e_9(OW|503dbR6KKDXipUp54y!B@wiDI z)pHVpWb8i4>zsz(oFX)CWt1D$74<^r-lGMb!RL>s0N+Vre=BtIv4?$(XJ@t{=zD?R zuk@B<;(WsJ5;7;rUAFW}5l;K0-mla80@F0J!1 zCh(UoZ>O=-&Te9EN>6UDWU|J2MJY_B2Hz)0af3;RapH1%;yV!%pem8>((B&8Dwh8I zx=y|ab{ZiMzD)1l*1KB#c{rp_7&V5E=(D*xZwmUzb=m6u+Wlp;%Qv4q5)6A+KZOaT zT|-!o@);N}3sczQf%~gSs7lV5@1Q&3=u4laS*!5KuPVgI8NOP-{IkEv+?UwO(!(9e zy>D2T%)Z#)dymEP3Af5Vh3-M5seIuad^L8y>DM31xzRLiT{m%f{Pz;bcjx6V|M2x) zJ3Yf9lVSYm&olO&fiG+S?|fw&&wo%v#^S_z`f-sT8|YUl-MshG`gqZP^RFHGFMa%% zufhzsO0DY8$r)r)Q2 z`lYnXzx3|E{BzjpM|xATRaFXM|FZbs&dGNs`SU1rz*@zu5wWcb|DaLZYc4M9zr(Tl zFFpPI)lQYL$j47=qeKvWZ}pc0EdQy4e;ve*(wegqTwv$#D7}ULx&wdk1z~YZi|i06 zQ9-$O`e#MjYfW0gb7P;U` zBiGU%{{y8LC!B0neEogBe%;x>o1MQ(pVp4#=!q$s?m);v+LzPr*c2bUnpWyXT223N z+w;D7DS7?2MDf8g5 z<1Sm}C4T;>+03_fX~hex)kK#E^20jC_5*OOr9{d8Ynng&FUtqdrS?i zDOBsWe#2N@e(T?fD8J4*+spn8L)AS)-+`C>&0EYLHBM)c0>1;b`nzT`B`>Y11{)Z} zG=w&Or#jYOh4NoNiRS~d>u-NOOKo2J)9braX36@|9lx2p@$U|`e-kNw0e!)3?}!co z0rEe+Cu^({#k^OnkQF|6_SBV;brJp&XuE4VKQAN#`uYY2VSnk^-}eVFMGWJM0o@;$ zn!N5yiumvU?~g9lyxx%`{e^pWcA`$=o)iL?c zXUwjYcgbHaIsfNB)uR^2@QqRV*p7O+PP}VMhUzv&Hj!{Mx@6ZJ43( zpPsS|-M|5J%uM<<5ep-!petaAJIiBp*_dZP( zR{axWZI=IR6{7$6@%=w-L`d-;1o%=~-%9w8jTUfKlcmmER0q=P4H|#_GI>AxV0%?i z|Lv5VMe+5k(p@1x-EF{2mmjdc!-!LpJ$UxVI{d{(3R^7)#GP(|RY-V zVZz&z(~|Fhg7PDx4httMtVCRUs1Uqr>)vAs{yJLKiJ>&!+uwKMpvk&9_y7B@wLQ!K zoMEVIe?I%v&6*YbK$(UUH*I`@XSa3wb)b69@}gSzJ$z_E0rd&u#S1^YO85V-vTKh^ z`tJT^nq@0nwPlu<)~0P;gfhju)zW9HG?(|gQJNPpL-2y&d|X;frDs;&#pP0ykPO8O zB5s;gikB2g5U40n6v+@t2>g9*&-U!~{CceU$M*&Ldini)KIfeGd7pDWpYzd++-2&S z2LDv~EzlI;(rXZNM8AoCE9Q83gh7{hC@L|+6pjAicB8^w=Gyo)Tv-wBddKtOVejI? zLL*{8(b^2Xz2+T2I&0a7r?W)4t_Lhmj3`qO{?hxq4UQS0@JC>WbBV4Bvyyt=>i=Y< z-vcp#E{VLu2WBqnjEiT_8K+&>wRo1f@oijwebdE$M#Vxx!1+zFA8HJX%EnuB5i!L- zc6nxFVNMw8HInh#1hU_>?t63PQD z6aAWFz5he6-#OBOmhX-3_YsG;nPogEj42(%4uYNana6_GyuJ&ULU;XXQ1AT!O4n26 zR&F}!nBJe8z#~6^e5rP-XCTE)G6luRXp93cVV=V=51Ax<=JC+O zv-iS}r|IrN9d?c!24m`-lXIdsP z&{}zFwKvrM-sk=0>O;oS`#knpvJcrm7q*aCR-H3rE69JxW%tHssFFRw59R9Q{t^E1 zz7f~%?E{xxHJih%FlYZ(<`<;av0LZ;L_Njrum0HbneIc&p)?Lyy^pVx;9+mYP#YCH zy;pYsSvPatt_${ts*kTcrI|UwvOhB)pdoyH%Ytrw1C)wJHyE)OApP>X_P*;y2}?@= z^rOx+KJS?q*ixr*mw9GN6vLuDC;%CGbA+dp?@>wx?`Gz?mLeYVbR4HCcRn26yS*xW zc2_Ku6}dND^BI1AV5oof)pY8^?_LPC6h)EKT}{)2;|jA^~%dxk&q zU~xsX*Vc0Z7h^5UK3X$##}JE`7xX+qo0gew{>?crk5cr(PBdeF&p>?evozfDb@=&q zoLv2p*%<%Y7QQ~ato+j(uJo|x$~YUm5_Xlx%>8g0adyv%+=Nn6##5ke7=Fc?Gm~FW zjRWcv8_*Zzlk{>dbEGYdK{FxX$Z)VIJvq!gQ#>l;aT!}N- ztDDw86w(mXxuMWA>_>TYSQfHParDE{C8yoh7W^;aPg|VlqJu^Ds;K*~ndc6nlrs)z zD?vhd`$z5(?YW}$>MIM@9JtBf(9&?{HP0ar6E3bX$+qhgBhKtq!hp0;%X72-ddB=3 zXsMV#9aq$^9)SyBfaC3`S)C(HI^S!z@J)1T%5X3a%l*;99H&0Ur;v%WBX z3xfc*s%(u1GrY>U$)$}#yPgL#rIdjFYp#l(xH{1Qvsq{(K&fp6bJaX82WXj}kpQp_ z0qfqv=J&*TKstZAZ0}+^KZBx^`|NAcQ4k6#aD(A%5wVF^++e`+oDE6R$p<3cZ>}q+ z2Sl+_RM@i0c0r~6f>#;4#>`XxM^B0OE2hw5;AroY8vV0=%IIOSvG{1Y4AP4n>yxz< z%TDW385zhEV#)fP?&kSUCu4H7<7F?ru%@3>U;CHyvr8L2u-3r_)|Xwj-FwWJ1iL3- zSwbU(iNelT9NW^;aXRiisAR>SANH`U@LoKDSD|ocZ-h4vm-06fJei-I-P{CW&(K-( zOhs_<1I9LYB%CRV)BLoUv&n4vy!TMRNzL6Y_b}x>^UN2IE0cHkURqk*fAva6CK)OS zqvfNiy1p}e#e?JHU1M%Ak6cl72x9pbehIf%4Gg}(YixA1To8w|^%Jc*<05{@ZU+9x zKcW+i88YCW7VZ8z^^>Wk#nKV32XHcdE}0JyOjt(3+PpekKoLPx(+8~+ok-8RSL$|V zuL2=&Uu+b@Z!b2MAFoiI*%za>2||<*6I3&R;?I%OIlxxnaA$)}3oysIGtN_;kIi%) z{)6T3Fw~CHHO)!(;_MFHRlP;7R`uvgqhld-GX$6+*(N&mM)J)jMA4+3w;0-j$anyh ze5}FX!IU)z7@-xa7vLC&{k<(~$ud+P!VX1k8U6ovL;TNo&sq+|mOhDF8E#uF49;~a z5&GidjCxs*StTmci5J!jjY+ck2 z5Owf1*={;6$0vPdmvjHUW`+D^J0jy7eInv^0wG}G3-1N&US*UKVv8G|nG=b)9f>fS zRn0ehX4*V513<|B6C;LfxDbKlvtD>8gPfLT2)*vhm7ZduSEHwHm7bf^cneF}4-$u( zBozv~yzWESqDxf>Y+W}IpRFtd`1a}z`Y?*;)xN6gkqX^c`iK)6#iRZTF=$*{EFFr= z9g2GcXXChORGy0h0B>N^z-9MzpxGuwBfFn0JA9c(evdMTtm-|sZRE&dpVjM)HfDqh zrEc3rl))QuV6Sn&l{EvWBa-$$ua z2bJvJ)0FOLYi)2I@2vCN9TBccI`?F&81&w3jL|}6xZ#peP#C*h=^<9FGQxMN3la2~(E2M~^7Nf-?)b&9eb?QfFb3#;Eco_U9?_ zPX7`hMTy!HX)|Hs4Pg||(4a)G`EyAE zYq4yS!PgUYCMC^4eg1Q9_MOk!f%jZjB37*UhnF%>uAjFh}q$bgcNA*bl?R__2KovcZv!={-jcj;&0kt{|V@ zAM557PRSFRGbWlySgu$IsljHk!lsk_NtyhG2vIdNW%Q?A7J?z&i6M)ZLi3E<}5MElq?AnK#v3Z+(nQ8(gXA7Xi(>=!|Co`Z*waD-(dduO&7U-F`u6Z zP?ae`#i^u8#`H}=j2W5djN|n*=jQcQsAH|&kRds?H7$PXM#qx?QC*j6@eo4mG3$+B zrmWW}hZqnF47FP|S`dlpQ!D~I0v3}71oPP)5UfjgsT>b65H=gig;VvL|1G3?R=4A7aAN}uAoru(pc>|!&tgXnqJ3I?t@#wBs~2=cMP7_hM%0F77<#3K@2YiJ9wa;Ejf~JRd<+wZ@x^Mb53! zf}1i5;gP*RVehK5EVZik9&r(qUC*F&cC&O(=g&cYNrrvHc<&X}TLX$ZP>QXQ+n z+Av}c82&D|!+*#vJNxK?rQM+QC+B1hU*@h|tU4wd3v4d}fD1)(lN#|J+_^_psd-UTpx+nr16_ZDb}U{5?iikJ9N*WL84&w{wg&H8+Cch(qQ;dXI?9V@K>0g@k8tw zAi2_)4`}iPN7X374$ag_jDR=m1LH5r1B9 z?AWBoKTSx73tgH!3z04uC5KXi;teyM$t(-pW)dwY04C^p6`V8L0^~mLUFzDWQNe z=-D7^gdt7KcK3_?%X*`nhrit4mT7`JT;y`Qvk*qY^t(|*yT_}J+af2W>gXVWpF(p- zMa+vRTEwTU&riHz%sehgxw8hE{?XJ@khNR~VFmclF|!r>%|XBE@Ve#|8_oiIgW;;% zGC~M9m>xotJbeH=6+%U|z^SP$t^9n0^kztdtQuxYA7YPgBMjN)B4`gn4OI}?ETqpV zy*V4K3{_9x46%i^-rBmCH!Q1y+sJMnhX-Lyyj@t%=n&JJEwinL93T<^HYGeuWk9g> z?$X%w?nE;;X)tK%eG%P3=7I$i2D(GICw@*h(l6ZR*;y_IH@h!e?%SUZ%C29a%{py` z*_%`jrADxi^Fk$lIL{`i4;OXUaZ2k@l(~qx<^#vVo!@k&1K>s$Lf^wy?H7&YJ*OmgO`vv8YixT;Q8IYeQhq@2W)wtbg^=|fm9i{R3KV*$>6o}zeEhkfJ0SK2c? zRH6Ss0-K0`r{(om=Fo9-2htyBgP(?~rYTI2Bxxwh7TMX%RnaKXiH_(kR4*3<4cAgL1hu{xUKv??A05GqLYosNj+f3@2i?h1+w^e)Mrhr z-fZ92J(W5^<=Oxm@C)1$`CIK!DsM!36Weg>I$Y!nV@qEF99Y^myco3~T3-_^Gotcx z(_J3AKy48lm(H(sJkfimjc><&bt2(qd+O%{xDF8XdDeVN`~exfn<%RuqLfj36!sIg z>|Eh!Ew+wb>)~v918%7}uSqT=+OWXXfax<>-mHsY(&OQ@b8$8#{Z2NR3ao7vvtkm( z5mZcGz*J*K%&J4VEM>mHu$4YW@>@hjqpS`{c3Tu~{*GZv*n4VO6@GxdqpuC+bwJk4 zZXmH?=TJNFZbB3%z7bXpJGHJQglv<79)|f^QeONt*;Km~83>bAk%DdMsD0SFk}!ud z&pJW>WLzGr-_gBZ`U_BpO7efD4>#IBc~b`GBnCF+r)Jh}%qyF{Mx);1!UQQflGrAp z4|k60SO8TzBuN*;idujuX)eKk|=Z%WQ7@iSxDUiH?7OJckz+qHdRS9c_KnAR+&hAc?HVvUNZ?o%2C@z^7%<2*P0h2u1c%1M82ts0Zzx71n z+YRo2cV|7W6|fC1u1h4N;d@RJ@|DaGLtaAs!j1E4==wq3fpzFmH(da5eK z66tVjqncM6N`U#0JtWBQs(ER(P|*tyHB&(#X&Q)g`?vN8t=Xe5K`Q~wjWjqG^)0>y zJ}bDFgqEr?$H>FD_Pbk_b_l*YN%yGi>6>}1=f|&i{I+S_qNBy^XE=RxYmpzhJxJjt zsPf@Gmc?iyfx(=V5&~RWJg8DHl26%~r={YC$JNK#D2xZYR7>TmSd{D8yFl~6$!bgD zz>DQ3(^o%@l(DR`4z8Z%L{&@eZ?V5Ado1u(1j2fJ$pOG*5g+$XA6koCnP;Rql0wT2*58 z8{xxZ+ZxTVAs~g;%{8aLm9@{5HeQq|sB|u&2VwICP)K{n(ErSsgy-p14PD@2tdM!t z&}1Fm>+8p@$5Sq4In|Ae)D^vcAgvRHM;@cO>AR>0yxwy_KxnaE>4CV#KgpZ~oEpeMhxpIZDCkOFnwHCK^a&$! zY+~5Au^674q86zd<=4Qr<&ULTO6!S(DwOoqTqMk4)D(H6p|~?KwfD|*bf>mZBm^I>o79*U??=K*Gvi9c{F;7Hu9QeQQWo0e&fQ7uF02E~W$?-V zI43#JTwOdWe}l12VUp5)xKx0Reg2Zx4Ssn6axmMcb%Hw7DwQ;HoX26A(^h$h3C<3q z{OGcp%{O_;Lyg4?ym+<9N!fm8lXzIoKf72|`*l?peNOmVV}$6F=k3-@NdbM8y7UIG zj@PTZXhS=J@|vK2zi|G`f!!S`fJ~W5u2j1}Cqp9ng;lrGut5+ChYxfrhLN!)L>z@l zIS^>3sO(AuB=(Kj3)gFOPHw<04hoE>aIz_7yDJRx(^Z*EM<-;A4Oil zG#b-+6c37fS#TiJfgP>j#H#^pqr$F=9!bYoiyZY1aF4ke<&Jhq3|_RIeQo`DWUp0; zy9V}t-@?^$STc*yI^I~If^{2KX_G4%VG~Fvd4Sd^G#8?CY%eN^s+cBXzO-!QQfiAe zx2cU*z>b&&f=jnXX4hS1(3hB}udQs>dYiH?;dr~gRx8jfrm>&9wb5j@b%9<+Wn3~{sRP>f8Qk^w z@(q?xA``D}!)5)`_)^wU^PlzBJ~AgAfTBlM@3NHHJm|xhS-!;Rc_r@2TV?+JGM%ht z@yWI)R&579zWx3`A1e%AW+|7)8wc?-J0A6SvP4IYp(6umd`=3{r(opyJipX7p4i-b z%?WKrEB}t)6WwMV7W)X=;4FRNxc6Mj45lzNth~BOiJO?7Q^^iKNhuc&jYBs0%d_qF zQ5z}VO^JOaQTK?2t|Sw7$pmqz7&j7)!QPhcAmOlKXl$a(@D5;%m5ZbBl5JDFEnBX; z-gT)*o?ddNx?W$f-pH#XwKI9v{;NeDPg}j5Y6v-k&y7H-LdJkBc3?v z_AJ%&Oqg$2bk!VXWOlfkHj)y(;HxP=C4V}JXl-r5o0{UWq#$@h5?QG`geIzb#vB-u zFeoZo^rhXzjOuo?PyD?uA^lk+vMsIEo%k=PG=C&eOw)|?TKkrGnl6sF!lyzTkDdGl zG5la*?a Date: Wed, 16 Oct 2024 08:45:56 +1100 Subject: [PATCH 14/15] Apply suggestions from code review --- docs/guides/go/realtime-messaging.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 722681550..5570a2737 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -116,7 +116,7 @@ ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) { }) if err != nil { fmt.Println("Error storing connection ID in KV store:", err) - return + ctx.Response.Reject = true } }) ``` @@ -196,7 +196,7 @@ func main() { }) if err != nil { fmt.Println("Error storing connection ID in KV store:", err) - return + ctx.Response.Reject = true } }) From d78be52fc943d36d6d5a25997aff4bd5f136c384 Mon Sep 17 00:00:00 2001 From: David Moore Date: Wed, 16 Oct 2024 12:44:15 +1100 Subject: [PATCH 15/15] add link to source --- docs/guides/go/realtime-messaging.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/go/realtime-messaging.mdx b/docs/guides/go/realtime-messaging.mdx index 5570a2737..89f37aae9 100644 --- a/docs/guides/go/realtime-messaging.mdx +++ b/docs/guides/go/realtime-messaging.mdx @@ -26,7 +26,7 @@ tags: ## Getting started -We'll start by creating a new project for our WebSocket application. +We'll start by creating a new project for our WebSocket application. The finished source can be found [here](https://github.com/nitrictech/examples/tree/main/v1/websocket-app). ```bash nitric new websocket-app go-starter