From d8411ee85a8e82404e2486aa305e4dfd34065bbb Mon Sep 17 00:00:00 2001 From: Mikhail Lipin Date: Wed, 5 Jul 2023 19:34:52 +0300 Subject: [PATCH 1/5] Combining spring-cloud-azure-data-cosmos-sample and spring-cloud-azure-data-cosmos-aks-sample sample sample. --- .../README.md | 2 +- .../{aks => }/CosmosExceptionHandler.java | 2 +- .../sample/{aks => }/CosmosProperties.java | 2 +- .../{aks => }/CosmosSpringConfiguration.java | 3 +- .../sample/CosmosdbSpringApplication.java} | 36 +--- .../data/cosmos/sample/{aks => }/User.java | 2 +- .../sample/{aks => }/UserController.java | 2 +- .../sample/{aks => }/UserRepository.java | 2 +- .../sample/aks/CosmosdbSpringApplication.java | 11 - .../README.md | 195 ------------------ .../pom.xml | 35 ---- .../com/azure/spring/sample/cosmos/User.java | 67 ------ .../spring/sample/cosmos/UserRepository.java | 14 -- .../src/main/resources/application.yml | 7 - .../terraform/main.tf | 97 --------- .../terraform/outputs.tf | 28 --- .../terraform/setup_env.ps1 | 5 - .../terraform/setup_env.sh | 5 - .../terraform/variables.tf | 23 --- 19 files changed, 17 insertions(+), 521 deletions(-) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/CosmosExceptionHandler.java (93%) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/CosmosProperties.java (96%) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/CosmosSpringConfiguration.java (96%) rename cosmos/spring-cloud-azure-starter-data-cosmos/{spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/CosmosSampleApplication.java => spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java} (54%) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/User.java (95%) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/UserController.java (97%) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{aks => }/UserRepository.java (77%) delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosdbSpringApplication.java delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/README.md delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/pom.xml delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/User.java delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/UserRepository.java delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/resources/application.yml delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/main.tf delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/outputs.tf delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.ps1 delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.sh delete mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/variables.tf diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/README.md b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/README.md index 91aece8b0..dc3ea53a3 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/README.md +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/README.md @@ -97,7 +97,7 @@ az acr create --resource-group cosmosdb-springboot-aks-rg --location eastus \ ```bash git clone https://github.com/Azure-Samples/azure-spring-boot-samples.git - cd cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample + cd cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample ``` 1. Use Maven to build the application. diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosExceptionHandler.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosExceptionHandler.java similarity index 93% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosExceptionHandler.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosExceptionHandler.java index 6c16ee480..106f1945e 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosExceptionHandler.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosExceptionHandler.java @@ -1,4 +1,4 @@ -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import com.azure.cosmos.CosmosException; import org.springframework.core.Ordered; diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosProperties.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosProperties.java similarity index 96% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosProperties.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosProperties.java index eaadc6554..599ed27cd 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosProperties.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosProperties.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosSpringConfiguration.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringConfiguration.java similarity index 96% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosSpringConfiguration.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringConfiguration.java index 5f39a6b77..dbf452c6c 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosSpringConfiguration.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringConfiguration.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import com.azure.cosmos.CosmosClientBuilder; import com.azure.cosmos.DirectConnectionConfig; @@ -16,7 +16,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; import org.springframework.lang.Nullable; @Configuration diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/CosmosSampleApplication.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java similarity index 54% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/CosmosSampleApplication.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java index f46bf6020..ccdc85e7b 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/CosmosSampleApplication.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java @@ -1,6 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -package com.azure.spring.sample.cosmos; +package spring.cloud.azure.starter.data.cosmos.sample; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,47 +7,32 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.util.Assert; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - import java.util.Optional; @SpringBootApplication -public class CosmosSampleApplication implements CommandLineRunner { - - private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSampleApplication.class); +public class CosmosdbSpringApplication implements CommandLineRunner { + private static final Logger LOGGER = LoggerFactory.getLogger(CosmosdbSpringApplication.class); @Autowired private UserRepository repository; public static void main(String[] args) { - SpringApplication.run(CosmosSampleApplication.class, args); + SpringApplication.run(CosmosdbSpringApplication.class, args); } + @Override public void run(String... var1) { - this.repository.deleteAll().block(); + this.repository.deleteAll(); LOGGER.info("Deleted all data in container."); final User testUser = new User("testId", "testFirstName", "testLastName", "test address line one"); // Save the User class to Azure Cosmos DB database. - final Mono saveUserMono = repository.save(testUser); - - final Flux firstNameUserFlux = repository.findByFirstName("testFirstName"); + final User savedUser = repository.save(testUser); - // Nothing happens until we subscribe to these Monos. - // findById will not return the user as user is not present. - final Mono findByIdMono = repository.findById(testUser.getId()); - final User findByIdUser = findByIdMono.block(); - Assert.isNull(findByIdUser, "User must be null"); - - final User savedUser = saveUserMono.block(); - Assert.state(savedUser != null, "Saved user must not be null"); Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match"); - firstNameUserFlux.collectList().block(); - - final Optional optionalUserResult = repository.findById(testUser.getId()).blockOptional(); + final Optional optionalUserResult = repository.findById(testUser.getEmail()); Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user."); final User result = optionalUserResult.get(); @@ -57,6 +40,7 @@ public void run(String... var1) { Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!"); LOGGER.info("findOne in User collection get result: {}", result.toString()); - LOGGER.info("spring-cloud-azure-data-cosmos-sample successfully run."); + LOGGER.info("spring-cloud-azure-data-cosmos-sample-aks successfully run."); } } + diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/User.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/User.java similarity index 95% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/User.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/User.java index 151f58749..7ddbeee87 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/User.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/User.java @@ -1,4 +1,4 @@ -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserController.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserController.java similarity index 97% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserController.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserController.java index d21f341a1..8eb3717cd 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserController.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserController.java @@ -1,4 +1,4 @@ -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserRepository.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserRepository.java similarity index 77% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserRepository.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserRepository.java index 7dc216bd5..9d59c999a 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/UserRepository.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/UserRepository.java @@ -1,4 +1,4 @@ -package spring.cloud.azure.starter.data.cosmos.sample.aks; +package spring.cloud.azure.starter.data.cosmos.sample; import com.azure.spring.data.cosmos.repository.CosmosRepository; import org.springframework.stereotype.Repository; diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosdbSpringApplication.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosdbSpringApplication.java deleted file mode 100644 index e2366f424..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/aks/CosmosdbSpringApplication.java +++ /dev/null @@ -1,11 +0,0 @@ -package spring.cloud.azure.starter.data.cosmos.sample.aks; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class CosmosdbSpringApplication { - public static void main(String[] args) { - SpringApplication.run(CosmosdbSpringApplication.class, args); - } -} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/README.md b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/README.md deleted file mode 100644 index 1a4af6ac5..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/README.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -page_type: sample -languages: -- java -products: -- azure-cosmos-db -name: Using Azure Cosmos DB by Spring Data in Spring Boot Application -description: This sample demonstrates how to use Azure Cosmos DB by Spring Data in Spring Boot application. ---- - -# Using Azure Cosmos DB by Spring Data in Spring Boot Application -This guide demonstrates how to use Azure Cosmos DB via Spring Boot Starter `spring-cloud-azure-starter-data-cosmos` to store data in and retrieve data from your Azure Cosmos DB. - -## What You Will Build -You will build an application to write data to and query data from Azure Cosmos DB via `spring-cloud-azure-starter-data-cosmos`. - -## What You Need - -- [An Azure subscription](https://azure.microsoft.com/free/) -- [Terraform](https://www.terraform.io/) -- [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) -- [JDK8](https://www.oracle.com/java/technologies/downloads/) or later -- Maven -- You can also import the code straight into your IDE: - - [IntelliJ IDEA](https://www.jetbrains.com/idea/download) - -## Provision Azure Resources Required to Run This Sample -This sample will create Azure resources using Terraform. If you choose to run it without using Terraform to provision resources, please pay attention to: -> [!IMPORTANT] -> If you choose to use a security principal to authenticate and authorize with Azure Active Directory for accessing an Azure resource -> please refer to [Authorize access with Azure AD](https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#authorize-access-with-azure-active-directory) to make sure the security principal has been granted the sufficient permission to access the Azure resource. - -### Authenticate Using the Azure CLI -Terraform must authenticate to Azure to create infrastructure. - -In your terminal, use the Azure CLI tool to setup your account permissions locally. - -```shell -az login -``` - -Your browser window will open and you will be prompted to enter your Azure login credentials. After successful authentication, your terminal will display your subscription information. You do not need to save this output as it is saved in your system for Terraform to use. - -```shell -You have logged in. Now let us find all the subscriptions to which you have access... - -[ - { - "cloudName": "AzureCloud", - "homeTenantId": "home-Tenant-Id", - "id": "subscription-id", - "isDefault": true, - "managedByTenants": [], - "name": "Subscription-Name", - "state": "Enabled", - "tenantId": "0envbwi39-TenantId", - "user": { - "name": "your-username@domain.com", - "type": "user" - } - } -] -``` - -If you have more than one subscription, specify the subscription-id you want to use with command below: -```shell -az account set --subscription -``` - -### Provision the Resources - -After login Azure CLI with your account, now you can use the terraform script to create Azure Resources. - -#### Run with Bash - -```shell -# In the root directory of the sample -# Initialize your Terraform configuration -terraform -chdir=./terraform init - -# Apply your Terraform Configuration -terraform -chdir=./terraform apply -auto-approve - -``` - -#### Run with Powershell - -```shell -# In the root directory of the sample -# Initialize your Terraform configuration -terraform -chdir=terraform init - -# Apply your Terraform Configuration -terraform -chdir=terraform apply -auto-approve - -``` - -It may take a few minutes to run the script. After successful running, you will see prompt information like below: - -```shell - -azurecaf_name.resource_group: Creating... -azurecaf_name.cosmos: Creating... -azurerm_resource_group.main: Creating... -azurerm_cosmosdb_account.application: Creating... -... -... -azurerm_cosmosdb_account.application: Creation complete after 2m26s ... -azurerm_cosmosdb_sql_database.db: Creating... -... -azurerm_cosmosdb_sql_database.db: Creation complete after 41s ... -azurerm_cosmosdb_sql_container.application: Creating... -azurerm_cosmosdb_sql_container.application: Still creating... [10s elapsed] -azurerm_cosmosdb_sql_container.application: Creation complete after 39s ... -... -... -Apply complete! Resources: 6 added, 0 changed, 0 destroyed. - -``` - -You can go to [Azure portal](https://ms.portal.azure.com/) in your web browser to check the resources you created. - -### Export Output to Your Local Environment -Running the command below to export environment values: - -#### Run with Bash - -```shell -source ./terraform/setup_env.sh -``` - -#### Run with Powershell - -```shell -terraform\setup_env.ps1 -``` - -If you want to run the sample in debug mode, you can save the output value. - -```shell -AZURE_COSMOS_ENDPOINT=... -COSMOS_DATABASE=... -``` - -## Run Locally - -### Run the sample with Maven - -In your terminal, run `mvn clean spring-boot:run`. - -```shell -mvn clean spring-boot:run -``` - -### Run the sample in IDEs - -You can debug your sample by adding the saved output values to the tool's environment variables or the sample's `application.yaml` file. - -* If your tool is `IDEA`, please refer to [Debug your first Java application](https://www.jetbrains.com/help/idea/debugging-your-first-java-application.html) and [add environment variables](https://www.jetbrains.com/help/objc/add-environment-variables-and-program-arguments.html#add-environment-variables). - -* If your tool is `ECLIPSE`, please refer to [Debugging the Eclipse IDE for Java Developers](https://www.eclipse.org/community/eclipse_newsletter/2017/june/article1.php) and [Eclipse Environment Variable Setup](https://examples.javacodegeeks.com/desktop-java/ide/eclipse/eclipse-environment-variable-setup-example/). - -## Verify This Sample - -Verify in your app’s logs that similar messages were posted: -```shell - -... -Deleted all data in container. -... -spring-cloud-azure-data-cosmos-sample successfully run. -``` - - -## Clean Up Resources -After running the sample, if you don't want to run the sample, remember to destroy the Azure resources you created to avoid unnecessary billing. - -The terraform destroy command terminates resources managed by your Terraform project. -To destroy the resources you created. - -#### Run with Bash - -```shell -terraform -chdir=./terraform destroy -auto-approve -``` - -#### Run with Powershell - -```shell -terraform -chdir=terraform destroy -auto-approve -``` - -## Deploy to Azure Spring Apps - -Now that you have the Spring Boot application running locally, it's time to move it to production. [Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/overview) makes it easy to deploy Spring Boot applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. To deploy your application to Azure Spring Apps, see [Deploy your first application to Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/quickstart?tabs=Azure-CLI). diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/pom.xml b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/pom.xml deleted file mode 100644 index 1b190a954..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - - com.azure.spring - azure-spring-boot-samples - 1.0.0 - ../../../pom.xml - - - spring-cloud-azure-data-cosmos-sample - 1.0.0 - jar - - Read and Write Data with Azure Cosmos DB Using Spring Data - Sample project for Spring Cloud Azure Starter Data Cosmos - - - - com.azure.spring - spring-cloud-azure-starter-data-cosmos - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - - diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/User.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/User.java deleted file mode 100644 index 0ac1b0c7b..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/User.java +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.sample.cosmos; - -import com.azure.spring.data.cosmos.core.mapping.Container; -import com.azure.spring.data.cosmos.core.mapping.PartitionKey; -import org.springframework.data.annotation.Id; - -@Container(containerName = "users") -public class User { - @Id - private String id; - private String firstName; - @PartitionKey - private String lastName; - private String address; - - public User() { - - } - - public User(String id, String firstName, String lastName, String address) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - this.address = address; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - @Override - public String toString() { - return String.format("%s %s, %s", firstName, lastName, address); - } -} - diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/UserRepository.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/UserRepository.java deleted file mode 100644 index a54c37218..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/java/com/azure/spring/sample/cosmos/UserRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.sample.cosmos; - -import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository; -import org.springframework.stereotype.Repository; -import reactor.core.publisher.Flux; - -@Repository -public interface UserRepository extends ReactiveCosmosRepository { - - Flux findByFirstName(String firstName); -} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/resources/application.yml b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/resources/application.yml deleted file mode 100644 index 9578a7c1d..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/src/main/resources/application.yml +++ /dev/null @@ -1,7 +0,0 @@ -spring: - cloud: - azure: - cosmos: - endpoint: ${AZURE_COSMOS_ENDPOINT} - database: ${COSMOS_DATABASE} - diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/main.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/main.tf deleted file mode 100644 index 5fc7e321a..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/main.tf +++ /dev/null @@ -1,97 +0,0 @@ -terraform { - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "3.9.0" - } - azurecaf = { - source = "aztfmod/azurecaf" - version = "1.2.16" - } - } -} - -provider "azurerm" { - features {} -} - -resource "azurecaf_name" "resource_group" { - name = var.application_name - resource_type = "azurerm_resource_group" - random_length = 5 - clean_input = true -} - -resource "azurerm_resource_group" "main" { - name = azurecaf_name.resource_group.result - location = var.location - - tags = { - terraform = "true" - application-name = var.application_name - spring-cloud-azure-sample = var.sample_tag_value - } -} - -resource "azurecaf_name" "cosmos" { - name = var.application_name - resource_type = "azurerm_cosmosdb_account" - random_length = 5 - clean_input = true -} - -resource "azurerm_cosmosdb_account" "application" { - name = azurecaf_name.cosmos.result - location = var.location - resource_group_name = azurerm_resource_group.main.name - offer_type = "Standard" - kind = "GlobalDocumentDB" - - enable_automatic_failover = true - - consistency_policy { - consistency_level = "Session" - } - - geo_location { - location = var.location - failover_priority = 0 - } - - tags = { - terraform = "true" - application-name = var.application_name - spring-cloud-azure-sample = var.sample_tag_value - } -} - -# Used to get object_id -data "azurerm_client_config" "current" { -} - -# https://docs.microsoft.com/azure/cosmos-db/how-to-setup-rbac#built-in-role-definitions -# https://github.com/hashicorp/terraform-provider-azurerm/issues/13907#issuecomment-1070916339 -resource "azurerm_cosmosdb_sql_role_assignment" "assignment" { - resource_group_name = azurerm_resource_group.main.name - account_name = azurerm_cosmosdb_account.application.name - role_definition_id = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.main.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.application.name}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002" - principal_id = data.azurerm_client_config.current.object_id - scope = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.main.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.application.name}" -} - -resource "azurerm_cosmosdb_sql_database" "db" { - name = var.cosmos_database_name - resource_group_name = azurerm_resource_group.main.name - account_name = azurerm_cosmosdb_account.application.name - throughput = 400 -} - -resource "azurerm_cosmosdb_sql_container" "application" { - name = "users" - resource_group_name = azurerm_cosmosdb_account.application.resource_group_name - account_name = azurerm_cosmosdb_account.application.name - database_name = azurerm_cosmosdb_sql_database.db.name - partition_key_path = "/id" - partition_key_version = 1 - throughput = 400 -} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/outputs.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/outputs.tf deleted file mode 100644 index acd7edeae..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/outputs.tf +++ /dev/null @@ -1,28 +0,0 @@ -output "azure_cosmos_endpoint" { - value = azurerm_cosmosdb_account.application.endpoint - description = "Azure Cosmos DB endpoint." -} - -output "azure_cosmos_account" { - value = azurerm_cosmosdb_account.application.name - description = "Azure Cosmos DB account created." -} - -output "cosmos_application_id" { - value = azurerm_cosmosdb_account.application.id - description = "Cosmos account application id." -} - -output "object_id" { - value = data.azurerm_client_config.current.object_id - description = "Current user's object_id." -} - -output "cosmos_database_name" { - value = var.cosmos_database_name -} - -output "resource_group_name" { - value = azurerm_resource_group.main.name - description = "The Azure resource group name." -} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.ps1 b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.ps1 deleted file mode 100644 index 98deb3ee4..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.ps1 +++ /dev/null @@ -1,5 +0,0 @@ -$env:AZURE_COSMOS_ENDPOINT=$(terraform -chdir=terraform output -raw azure_cosmos_endpoint) -$env:COSMOS_DATABASE=$(terraform -chdir=terraform output -raw cosmos_database_name) - -echo AZURE_COSMOS_ENDPOINT=$env:AZURE_COSMOS_ENDPOINT -echo COSMOS_DATABASE=$env:COSMOS_DATABASE diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.sh b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.sh deleted file mode 100644 index 704f6b94d..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/setup_env.sh +++ /dev/null @@ -1,5 +0,0 @@ -export AZURE_COSMOS_ENDPOINT=$(terraform -chdir=./terraform output -raw azure_cosmos_endpoint) -export COSMOS_DATABASE=$(terraform -chdir=./terraform output -raw cosmos_database_name) - -echo AZURE_COSMOS_ENDPOINT=$AZURE_COSMOS_ENDPOINT -echo COSMOS_DATABASE=$COSMOS_DATABASE diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/variables.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/variables.tf deleted file mode 100644 index 1a7af287a..000000000 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-sample/terraform/variables.tf +++ /dev/null @@ -1,23 +0,0 @@ -variable "application_name" { - type = string - description = "The name of your application." - default = "data-cosmos-sample" -} - -variable "location" { - type = string - description = "The Azure region where all resources in this example should be created." - default = "eastus" -} - -variable "cosmos_database_name" { - type = string - description = "The cosmos database name" - default = "cosmos-database" -} - -variable "sample_tag_value" { - type = string - description = "The value of spring-cloud-azure-sample tag." - default = "true" -} From 2ad345c63ac64329aa3d4276c83ba877d65117e2 Mon Sep 17 00:00:00 2001 From: Mikhail Lipin Date: Wed, 5 Jul 2023 19:35:58 +0300 Subject: [PATCH 2/5] Restoring readme and deleted terraform files. --- .../sample/README.md | 195 ++++++++++++++++++ .../sample/terraform/main.tf | 97 +++++++++ .../sample/terraform/outputs.tf | 28 +++ .../sample/terraform/setup_env.ps1 | 5 + .../sample/terraform/setup_env.sh | 5 + .../sample/terraform/variables.tf | 23 +++ 6 files changed, 353 insertions(+) create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/README.md create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/main.tf create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/outputs.tf create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.ps1 create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.sh create mode 100644 cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/variables.tf diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/README.md b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/README.md new file mode 100644 index 000000000..1a4af6ac5 --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/README.md @@ -0,0 +1,195 @@ +--- +page_type: sample +languages: +- java +products: +- azure-cosmos-db +name: Using Azure Cosmos DB by Spring Data in Spring Boot Application +description: This sample demonstrates how to use Azure Cosmos DB by Spring Data in Spring Boot application. +--- + +# Using Azure Cosmos DB by Spring Data in Spring Boot Application +This guide demonstrates how to use Azure Cosmos DB via Spring Boot Starter `spring-cloud-azure-starter-data-cosmos` to store data in and retrieve data from your Azure Cosmos DB. + +## What You Will Build +You will build an application to write data to and query data from Azure Cosmos DB via `spring-cloud-azure-starter-data-cosmos`. + +## What You Need + +- [An Azure subscription](https://azure.microsoft.com/free/) +- [Terraform](https://www.terraform.io/) +- [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) +- [JDK8](https://www.oracle.com/java/technologies/downloads/) or later +- Maven +- You can also import the code straight into your IDE: + - [IntelliJ IDEA](https://www.jetbrains.com/idea/download) + +## Provision Azure Resources Required to Run This Sample +This sample will create Azure resources using Terraform. If you choose to run it without using Terraform to provision resources, please pay attention to: +> [!IMPORTANT] +> If you choose to use a security principal to authenticate and authorize with Azure Active Directory for accessing an Azure resource +> please refer to [Authorize access with Azure AD](https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#authorize-access-with-azure-active-directory) to make sure the security principal has been granted the sufficient permission to access the Azure resource. + +### Authenticate Using the Azure CLI +Terraform must authenticate to Azure to create infrastructure. + +In your terminal, use the Azure CLI tool to setup your account permissions locally. + +```shell +az login +``` + +Your browser window will open and you will be prompted to enter your Azure login credentials. After successful authentication, your terminal will display your subscription information. You do not need to save this output as it is saved in your system for Terraform to use. + +```shell +You have logged in. Now let us find all the subscriptions to which you have access... + +[ + { + "cloudName": "AzureCloud", + "homeTenantId": "home-Tenant-Id", + "id": "subscription-id", + "isDefault": true, + "managedByTenants": [], + "name": "Subscription-Name", + "state": "Enabled", + "tenantId": "0envbwi39-TenantId", + "user": { + "name": "your-username@domain.com", + "type": "user" + } + } +] +``` + +If you have more than one subscription, specify the subscription-id you want to use with command below: +```shell +az account set --subscription +``` + +### Provision the Resources + +After login Azure CLI with your account, now you can use the terraform script to create Azure Resources. + +#### Run with Bash + +```shell +# In the root directory of the sample +# Initialize your Terraform configuration +terraform -chdir=./terraform init + +# Apply your Terraform Configuration +terraform -chdir=./terraform apply -auto-approve + +``` + +#### Run with Powershell + +```shell +# In the root directory of the sample +# Initialize your Terraform configuration +terraform -chdir=terraform init + +# Apply your Terraform Configuration +terraform -chdir=terraform apply -auto-approve + +``` + +It may take a few minutes to run the script. After successful running, you will see prompt information like below: + +```shell + +azurecaf_name.resource_group: Creating... +azurecaf_name.cosmos: Creating... +azurerm_resource_group.main: Creating... +azurerm_cosmosdb_account.application: Creating... +... +... +azurerm_cosmosdb_account.application: Creation complete after 2m26s ... +azurerm_cosmosdb_sql_database.db: Creating... +... +azurerm_cosmosdb_sql_database.db: Creation complete after 41s ... +azurerm_cosmosdb_sql_container.application: Creating... +azurerm_cosmosdb_sql_container.application: Still creating... [10s elapsed] +azurerm_cosmosdb_sql_container.application: Creation complete after 39s ... +... +... +Apply complete! Resources: 6 added, 0 changed, 0 destroyed. + +``` + +You can go to [Azure portal](https://ms.portal.azure.com/) in your web browser to check the resources you created. + +### Export Output to Your Local Environment +Running the command below to export environment values: + +#### Run with Bash + +```shell +source ./terraform/setup_env.sh +``` + +#### Run with Powershell + +```shell +terraform\setup_env.ps1 +``` + +If you want to run the sample in debug mode, you can save the output value. + +```shell +AZURE_COSMOS_ENDPOINT=... +COSMOS_DATABASE=... +``` + +## Run Locally + +### Run the sample with Maven + +In your terminal, run `mvn clean spring-boot:run`. + +```shell +mvn clean spring-boot:run +``` + +### Run the sample in IDEs + +You can debug your sample by adding the saved output values to the tool's environment variables or the sample's `application.yaml` file. + +* If your tool is `IDEA`, please refer to [Debug your first Java application](https://www.jetbrains.com/help/idea/debugging-your-first-java-application.html) and [add environment variables](https://www.jetbrains.com/help/objc/add-environment-variables-and-program-arguments.html#add-environment-variables). + +* If your tool is `ECLIPSE`, please refer to [Debugging the Eclipse IDE for Java Developers](https://www.eclipse.org/community/eclipse_newsletter/2017/june/article1.php) and [Eclipse Environment Variable Setup](https://examples.javacodegeeks.com/desktop-java/ide/eclipse/eclipse-environment-variable-setup-example/). + +## Verify This Sample + +Verify in your app’s logs that similar messages were posted: +```shell + +... +Deleted all data in container. +... +spring-cloud-azure-data-cosmos-sample successfully run. +``` + + +## Clean Up Resources +After running the sample, if you don't want to run the sample, remember to destroy the Azure resources you created to avoid unnecessary billing. + +The terraform destroy command terminates resources managed by your Terraform project. +To destroy the resources you created. + +#### Run with Bash + +```shell +terraform -chdir=./terraform destroy -auto-approve +``` + +#### Run with Powershell + +```shell +terraform -chdir=terraform destroy -auto-approve +``` + +## Deploy to Azure Spring Apps + +Now that you have the Spring Boot application running locally, it's time to move it to production. [Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/overview) makes it easy to deploy Spring Boot applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. To deploy your application to Azure Spring Apps, see [Deploy your first application to Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/quickstart?tabs=Azure-CLI). diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/main.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/main.tf new file mode 100644 index 000000000..5fc7e321a --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/main.tf @@ -0,0 +1,97 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.9.0" + } + azurecaf = { + source = "aztfmod/azurecaf" + version = "1.2.16" + } + } +} + +provider "azurerm" { + features {} +} + +resource "azurecaf_name" "resource_group" { + name = var.application_name + resource_type = "azurerm_resource_group" + random_length = 5 + clean_input = true +} + +resource "azurerm_resource_group" "main" { + name = azurecaf_name.resource_group.result + location = var.location + + tags = { + terraform = "true" + application-name = var.application_name + spring-cloud-azure-sample = var.sample_tag_value + } +} + +resource "azurecaf_name" "cosmos" { + name = var.application_name + resource_type = "azurerm_cosmosdb_account" + random_length = 5 + clean_input = true +} + +resource "azurerm_cosmosdb_account" "application" { + name = azurecaf_name.cosmos.result + location = var.location + resource_group_name = azurerm_resource_group.main.name + offer_type = "Standard" + kind = "GlobalDocumentDB" + + enable_automatic_failover = true + + consistency_policy { + consistency_level = "Session" + } + + geo_location { + location = var.location + failover_priority = 0 + } + + tags = { + terraform = "true" + application-name = var.application_name + spring-cloud-azure-sample = var.sample_tag_value + } +} + +# Used to get object_id +data "azurerm_client_config" "current" { +} + +# https://docs.microsoft.com/azure/cosmos-db/how-to-setup-rbac#built-in-role-definitions +# https://github.com/hashicorp/terraform-provider-azurerm/issues/13907#issuecomment-1070916339 +resource "azurerm_cosmosdb_sql_role_assignment" "assignment" { + resource_group_name = azurerm_resource_group.main.name + account_name = azurerm_cosmosdb_account.application.name + role_definition_id = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.main.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.application.name}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002" + principal_id = data.azurerm_client_config.current.object_id + scope = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.main.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.application.name}" +} + +resource "azurerm_cosmosdb_sql_database" "db" { + name = var.cosmos_database_name + resource_group_name = azurerm_resource_group.main.name + account_name = azurerm_cosmosdb_account.application.name + throughput = 400 +} + +resource "azurerm_cosmosdb_sql_container" "application" { + name = "users" + resource_group_name = azurerm_cosmosdb_account.application.resource_group_name + account_name = azurerm_cosmosdb_account.application.name + database_name = azurerm_cosmosdb_sql_database.db.name + partition_key_path = "/id" + partition_key_version = 1 + throughput = 400 +} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/outputs.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/outputs.tf new file mode 100644 index 000000000..acd7edeae --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/outputs.tf @@ -0,0 +1,28 @@ +output "azure_cosmos_endpoint" { + value = azurerm_cosmosdb_account.application.endpoint + description = "Azure Cosmos DB endpoint." +} + +output "azure_cosmos_account" { + value = azurerm_cosmosdb_account.application.name + description = "Azure Cosmos DB account created." +} + +output "cosmos_application_id" { + value = azurerm_cosmosdb_account.application.id + description = "Cosmos account application id." +} + +output "object_id" { + value = data.azurerm_client_config.current.object_id + description = "Current user's object_id." +} + +output "cosmos_database_name" { + value = var.cosmos_database_name +} + +output "resource_group_name" { + value = azurerm_resource_group.main.name + description = "The Azure resource group name." +} diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.ps1 b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.ps1 new file mode 100644 index 000000000..98deb3ee4 --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.ps1 @@ -0,0 +1,5 @@ +$env:AZURE_COSMOS_ENDPOINT=$(terraform -chdir=terraform output -raw azure_cosmos_endpoint) +$env:COSMOS_DATABASE=$(terraform -chdir=terraform output -raw cosmos_database_name) + +echo AZURE_COSMOS_ENDPOINT=$env:AZURE_COSMOS_ENDPOINT +echo COSMOS_DATABASE=$env:COSMOS_DATABASE diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.sh b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.sh new file mode 100644 index 000000000..704f6b94d --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/setup_env.sh @@ -0,0 +1,5 @@ +export AZURE_COSMOS_ENDPOINT=$(terraform -chdir=./terraform output -raw azure_cosmos_endpoint) +export COSMOS_DATABASE=$(terraform -chdir=./terraform output -raw cosmos_database_name) + +echo AZURE_COSMOS_ENDPOINT=$AZURE_COSMOS_ENDPOINT +echo COSMOS_DATABASE=$COSMOS_DATABASE diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/variables.tf b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/variables.tf new file mode 100644 index 000000000..1a7af287a --- /dev/null +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/sample/terraform/variables.tf @@ -0,0 +1,23 @@ +variable "application_name" { + type = string + description = "The name of your application." + default = "data-cosmos-sample" +} + +variable "location" { + type = string + description = "The Azure region where all resources in this example should be created." + default = "eastus" +} + +variable "cosmos_database_name" { + type = string + description = "The cosmos database name" + default = "cosmos-database" +} + +variable "sample_tag_value" { + type = string + description = "The value of spring-cloud-azure-sample tag." + default = "true" +} From 5beab96b6b6643bd9fb146bd026642725e297193 Mon Sep 17 00:00:00 2001 From: Mikhail Lipin Date: Wed, 5 Jul 2023 19:36:50 +0300 Subject: [PATCH 3/5] Restoring licensed sign. --- .../starter/data/cosmos/sample/CosmosdbSpringApplication.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java index ccdc85e7b..b8302a6b4 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java @@ -1,3 +1,5 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. package spring.cloud.azure.starter.data.cosmos.sample; import org.slf4j.Logger; From d5ef1b1d35fa42dbc757130be03345ecb4122a6b Mon Sep 17 00:00:00 2001 From: Mikhail Lipin Date: Fri, 7 Jul 2023 22:54:02 +0300 Subject: [PATCH 4/5] Fixing naming and code review points. --- ...pringApplication.java => CosmosSpringApplication.java} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{CosmosdbSpringApplication.java => CosmosSpringApplication.java} (87%) diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java similarity index 87% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java index b8302a6b4..7637aed4e 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosdbSpringApplication.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java @@ -12,14 +12,14 @@ import java.util.Optional; @SpringBootApplication -public class CosmosdbSpringApplication implements CommandLineRunner { - private static final Logger LOGGER = LoggerFactory.getLogger(CosmosdbSpringApplication.class); +public class CosmosSpringApplication implements CommandLineRunner { + private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSpringApplication.class); @Autowired private UserRepository repository; public static void main(String[] args) { - SpringApplication.run(CosmosdbSpringApplication.class, args); + SpringApplication.run(CosmosSpringApplication.class, args); } @Override @@ -42,7 +42,7 @@ public void run(String... var1) { Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!"); LOGGER.info("findOne in User collection get result: {}", result.toString()); - LOGGER.info("spring-cloud-azure-data-cosmos-sample-aks successfully run."); + LOGGER.info("spring-cloud-azure-data-cosmos-sample successfully run."); } } From e14201f4304aac5729193c8d010f5bb6507870da Mon Sep 17 00:00:00 2001 From: Mikhail Lipin Date: Fri, 7 Jul 2023 22:55:03 +0300 Subject: [PATCH 5/5] Update and rename CosmosSpringApplication.java to CosmosDBSpringApplication.java. --- ...pringApplication.java => CosmosDBSpringApplication.java} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/{CosmosSpringApplication.java => CosmosDBSpringApplication.java} (91%) diff --git a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosDBSpringApplication.java similarity index 91% rename from cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java rename to cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosDBSpringApplication.java index 7637aed4e..16ced69d8 100644 --- a/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosSpringApplication.java +++ b/cosmos/spring-cloud-azure-starter-data-cosmos/spring-cloud-azure-data-cosmos-aks-sample/src/main/java/spring/cloud/azure/starter/data/cosmos/sample/CosmosDBSpringApplication.java @@ -12,14 +12,14 @@ import java.util.Optional; @SpringBootApplication -public class CosmosSpringApplication implements CommandLineRunner { - private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSpringApplication.class); +public class CosmosDBSpringApplication implements CommandLineRunner { + private static final Logger LOGGER = LoggerFactory.getLogger(CosmosDBSpringApplication.class); @Autowired private UserRepository repository; public static void main(String[] args) { - SpringApplication.run(CosmosSpringApplication.class, args); + SpringApplication.run(CosmosDBSpringApplication.class, args); } @Override