다음을 통해 공유


모든 Azure Cosmos DB 리소스를 표준에서 자동 크기 조정 처리량으로 변환

적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블

이 문서의 스크립트는 표준 프로비전된 처리량을 사용하여 구독 내에서 모든 리소스를 자동 크기 조정으로 변환하는 방법을 보여줍니다.

많은 고객이 새 애플리케이션을 개발할 때 표준 프로비전된 처리량으로 시작합니다. 하지만 표준 처리량은 지속적인 처리량 요구가 있는 워크로드에서 가장 효과적입니다. 대부분의 워크로드는 가변적입니다. 즉, 자동 크기 조정을 사용하는 것이 비용이 적게 들 수 있습니다. 리소스가 수십 또는 수백 개가 있는 시나리오에서는 마이그레이션이 지루하고 시간이 오래 걸리는 작업이 될 수 있습니다. 이 스크립트는 하나의 단계로 모든 리소스를 마이그레이션하도록 설계되었습니다.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

필수 조건

  • 이 문서에는 Azure CLI 버전 2.9.1 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

샘플 스크립트

Azure Cloud Shell 시작

Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.

Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보세요를 선택하기만 하면 됩니다. 또한 https://shell.azure.com 로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 시작할 수 있습니다.

Cloud Shell이 열리면 환경에 대해 Bash가 선택되어 있는지 확인합니다. 후속 세션은 Bash 환경에서 Azure CLI를 사용합니다. 복사를 선택하여 코드 블록을 복사하고 Cloud Shell에 붙여넣고 Enter 키를 눌러 실행합니다.

Azure에 로그인

Cloud Shell은 로그인한 초기 계정에서 자동으로 인증됩니다. 다음 스크립트를 사용하여 다른 구독을 사용하여 로그인하고 subscriptionId를 Azure 구독 ID로 바꿉니다.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

subscription="subscriptionId" # Set Azure subscription ID here

az account set -s $subscription # ...or use 'az login'

자세한 내용은 활성 구독 설정 또는 대화형으로 로그인을 참조하세요.

스크립트 실행

#!/bin/bash

# Passed validation in Cloud Shell on 7/25/2024

# <FullScript>
# Azure Cosmos DB users can migrate from standard provisioned to autoscale
# throughput and back again. Most users can benefit from autoscale throughput
# to save on costs and avoid over-provisioning. This script migrates all
# provisioned throughput to autoscale throughput for all Cosmos DB accounts
# in the current subscription for NoSQL, MongoDB, Cassandra, Gremlin, and Table
# database and container level resources in the accounts.


# These can remain commented out if running in Azure Cloud Shell
#az login
#az account set -s {your subscription id}

throughtput=0

# Get the list of resource groups in the current subscription
resourceGroups=$(az group list --query "[].name" -o tsv)

# Loop through every resource group in the subscription
for resourceGroup in $resourceGroups; do
    echo "Processing resource group: $resourceGroup"

    # Get the list of Cosmos DB accounts in this resource group
    accounts=$(az cosmosdb list -g $resourceGroup --query "[].name" -o tsv)

    # Loop through every Cosmos DB account in the resource group
    for account in $accounts; do

        echo "Processing account: $account"

        # Get the list of SQL databases in this account
        databases=$(az cosmosdb sql database list -g $resourceGroup -a $account --query "[].name" -o tsv)

        # Loop through SQL databases in the account
        for database in $databases; do
            throughput=$(az cosmosdb sql database throughput show -g $resourceGroup -a $account -n $database --query resource.throughput -o tsv)
            if [ $throughput -gt 0 ]; then
                echo "$database has throughput, attempting to migrate to autoscale"
                # Migrate the database to autoscale throughput
                az cosmosdb sql database throughput migrate -g $resourceGroup -a $account -n $database -t "autoscale"
                if [ $? -eq 0 ]; then
                    echo "Successfully migrated throughput for database: $database in Cosmos DB account $account"
                fi
            else
                echo "$database does not have throughput"
            fi

            # Loop through SQL containers in the database
            containers=$(az cosmosdb sql container list -g $resourceGroup -a $account -d $database --query "[].name" -o tsv)

            for container in $containers; do
                throughput=$(az cosmosdb sql container throughput show -g $resourceGroup -a $account -d $database -n $container --query resource.throughput -o tsv)
                if [ $throughput -gt 0 ]; then
                    echo "$container has throughput, attempting to migrate to autoscale"
                    # Migrate the container to autoscale throughput
                    az cosmosdb sql container throughput migrate -g $resourceGroup -a $account -d $database -n $container -t "autoscale"
                    if [ $? -eq 0 ]; then
                        echo "Successfully migrated throughput for container: $container in Cosmos DB account $account and database $database"
                    fi
                else
                    echo "$container does not have throughput"
                fi
            done
        done

        # Get the list of MongoDB databases in this account
        databases=$(az cosmosdb mongodb database list -g $resourceGroup -a $account --query "[].name" -o tsv)

        # Loop through MongoDB databases in the account
        for database in $databases; do
            throughput=$(az cosmosdb mongodb database throughput show -g $resourceGroup -a $account -n $database --query resource.throughput -o tsv)
            if [ $throughput -gt 0 ]; then
                echo "$database has throughput, attempting to migrate to autoscale"
                # Migrate the database to autoscale throughput
                az cosmosdb mongodb database throughput migrate -g $resourceGroup -a $account -n $database -t "autoscale"
                if [ $? -eq 0 ]; then
                    echo "Successfully migrated throughput for database: $database in Cosmos DB account $account"
                fi
            else
                echo "$database does not have throughput"
            fi

            # Loop through MongoDB collections in the database
            collections=$(az cosmosdb mongodb collection list -g $resourceGroup -a $account -d $database --query "[].name" -o tsv)

            for collection in $collections; do
                throughput=$(az cosmosdb mongodb collection throughput show -g $resourceGroup -a $account -d $database -n $collection --query resource.throughput -o tsv)
                if [ $throughput -gt 0 ]; then
                    echo "$collection has throughput, attempting to migrate to autoscale"
                    # Migrate the collection to autoscale throughput
                    az cosmosdb mongodb collection throughput migrate -g $resourceGroup -a $account -d $database -n $collection -t "autoscale"
                    if [ $? -eq 0 ]; then
                        echo "Successfully migrated throughput for collection: $collection in Cosmos DB account $account and database $database"
                    fi
                else
                    echo "$collection does not have throughput"
                fi
            done
        done

        # Get the list of Cassandra keyspaces in this account
        keyspaces=$(az cosmosdb cassandra keyspace list -g $resourceGroup -a $account --query "[].name" -o tsv)

        # Loop through Cassandra keyspaces in the account
        for keyspace in $keyspaces; do
            throughput=$(az cosmosdb cassandra keyspace throughput show -g $resourceGroup -a $account -n $keyspace --query resource.throughput -o tsv)
            if [ $throughput -gt 0 ]; then
                echo "$keyspace has throughput, attempting to migrate to autoscale"
                # Migrate the keyspace to autoscale throughput
                az cosmosdb cassandra keyspace throughput migrate -g $resourceGroup -a $account -n $keyspace -t "autoscale"
                if [ $? -eq 0 ]; then
                    echo "Successfully migrated throughput for keyspace: $keyspace in Cosmos DB account $account"
                fi
            else
                echo "$keyspace does not have throughput"
            fi

            # Loop through Cassandra tables in the keyspace
            tables=$(az cosmosdb cassandra table list -g $resourceGroup -a $account -k $keyspace --query "[].name" -o tsv)

            for table in $tables; do
                throughput=$(az cosmosdb cassandra table throughput show -g $resourceGroup -a $account -k $keyspace -n $table --query resource.throughput -o tsv)
                if [ $throughput -gt 0 ]; then
                    echo "$table has throughput, attempting to migrate to autoscale"
                    # Migrate the table to autoscale throughput
                    az cosmosdb cassandra table throughput migrate -g $resourceGroup -a $account -k $keyspace -n $table -t "autoscale"
                    if [ $? -eq 0 ]; then
                        echo "Successfully migrated throughput for table: $table in Cosmos DB account $account and keyspace $keyspace"
                    fi
                else
                    echo "$table does not have throughput"
                fi
            done
        done

        # Get the list of Gremlin databases in this account
        databases=$(az cosmosdb gremlin database list -g $resourceGroup -a $account --query "[].name" -o tsv)

        # Loop through Gremlin databases in the account
        for database in $databases; do
            throughput=$(az cosmosdb gremlin database throughput show -g $resourceGroup -a $account -n $database --query resource.throughput -o tsv)
            if [ $throughput -gt 0 ]; then
                echo "$database has throughput, attempting to migrate to autoscale"
                # Migrate the database to autoscale throughput
                az cosmosdb gremlin database throughput migrate -g $resourceGroup -a $account -n $database -t "autoscale"
                if [ $? -eq 0 ]; then
                    echo "Successfully migrated throughput for database: $database in Cosmos DB account $account"
                fi
            else
                echo "$database does not have throughput"
            fi

            # Loop through Gremlin graphs in the database
            graphs=$(az cosmosdb gremlin graph list -g $resourceGroup -a $account -d $database --query "[].name" -o tsv)

            for graph in $graphs; do
                throughput=$(az cosmosdb gremlin graph throughput show -g $resourceGroup -a $account -d $database -n $graph --query resource.throughput -o tsv)
                if [ $throughput -gt 0 ]; then
                    echo "$graph has throughput, attempting to migrate to autoscale"
                    # Migrate the graph to autoscale throughput
                    az cosmosdb gremlin graph throughput migrate -g $resourceGroup -a $account -d $database -n $graph -t "autoscale"
                    if [ $? -eq 0 ]; then
                        echo "Successfully migrated throughput for graph: $graph in Cosmos DB account $account and database $database"
                    fi
                else
                    echo "$graph does not have throughput"
                fi
            done
        done

        # Get the list of Table databases in this account
        tables=$(az cosmosdb table list -g $resourceGroup -a $account --query "[].name" -o tsv)

        # Loop through Table databases in the account
        for table in $tables; do
            throughput=$(az cosmosdb table throughput show -g $resourceGroup -a $account -n $table --query resource.throughput -o tsv)
            if [ $throughput -gt 0 ]; then
                echo "$table has throughput, attempting to migrate to autoscale"
                # Migrate the table to autoscale throughput
                az cosmosdb table throughput migrate -g $resourceGroup -a $account -n $table -t "autoscale"
                if [ $? -eq 0 ]; then
                    echo "Successfully migrated throughput for table: $table in Cosmos DB account $account"
                fi
            else
                echo "$table does not have throughput"
            fi
        done
    done
done

echo "All Done! Enjoy your new autoscale throughput Cosmos DB accounts!"

# </FullScript>

샘플 참조

이 스크립트는 다음 명령을 사용합니다. 테이블에 있는 각 명령은 명령에 해당하는 문서에 연결됩니다.

명령 주의
az 그룹 목록 Azure 구독의 모든 리소스 그룹을 나열합니다.
az cosmosdb list 리소스 그룹의 모든 Azure Cosmos DB 계정을 나열합니다.
az cosmosdb sql database list 계정의 모든 NoSQL 데이터베이스를 나열합니다.
az cosmosdb sql database throughput show 계정의 NoSQL 데이터베이스에 대한 처리량 값을 읽습니다.
az cosmosdb sql database throughput migrate NoSQL 데이터베이스 리소스의 처리량을 마이그레이션합니다.
az cosmosdb sql container list 데이터베이스의 모든 NoSQL 컨테이너를 나열합니다.
az cosmosdb sql container throughput show 계정의 NoSQL 컨테이너의 처리량 값을 읽습니다.
az cosmosdb sql container throughput migrate 계정의 NoSQL 컨테이너의 처리량을 마이그레이션합니다.
az cosmosdb mongodb database list 계정의 모든 MongoDB 데이터베이스를 나열합니다.
az cosmosdb mongodb database throughput show 계정의 MongoDB 데이터베이스에 대한 처리량 값을 읽습니다.
az cosmosdb mongodb database throughput migrate MongoDB 계정의 데이터베이스 리소스에 대한 처리량을 마이그레이션합니다.
az cosmosdb mongodb collection list 데이터베이스의 모든 MongoDB 컬렉션을 나열합니다.
az cosmosdb mongodb collection throughput show 계정의 MongoDB 컬렉션에 대한 처리량 값을 읽습니다.
az cosmosdb mongodb collection throughput migrate MongoDB 계정의 컬렉션 리소스에 대한 처리량을 마이그레이션합니다.
az cosmosdb cassandra keyspace list 계정의 모든 Cassandra 키 영역을 나열합니다.
az cosmosdb cassandra keyspace throughput show 계정의 Cassandra 키스페이스에 대한 처리량 값을 읽습니다.
az cosmosdb cassandra keyspace throughput migrate 계정의 Cassandra 키스페이스에 대한 처리량을 마이그레이션합니다.
az cosmosdb cassandra table list 키스페이스의 모든 Cassandra 테이블을 나열합니다.
az cosmosdb cassandra table throughput show 계정의 Cassandra 테이블에 대한 처리량 값을 읽습니다.
az cosmosdb cassandra table throughput migrate 계정의 cassandra 테이블에 대한 처리량을 마이그레이션합니다.
az cosmosdb gremlin database list 계정의 모든 Gremlin 데이터베이스를 나열합니다.
az cosmosdb gremlin database throughput show 계정의 Gremlin 데이터베이스에 대한 처리량 값을 읽습니다.
az cosmosdb gremlin database throughput migrate Gremlin 데이터베이스 리소스에 대한 처리량을 마이그레이션합니다.
az cosmosdb gremlin container list 데이터베이스의 모든 Gremlin 그래프를 나열합니다.
az cosmosdb gremlin container throughput show 계정의 Gremlin 그래프에 대한 처리량 값을 읽습니다.
az cosmosdb gremlin graph throughput migrate 계정의 Gremlin 그래프에 대한 처리량을 마이그레이션합니다.
az cosmosdb table list 계정의 모든 테이블을 나열합니다.
az cosmosdb table throughput show 계정의 테이블에 대한 처리량 값을 읽습니다.
az cosmosdb table throughput migrate 계정의 테이블에 대한 처리량을 마이그레이션합니다.

다음 단계

Azure Cosmos DB CLI에 대한 자세한 내용은 Azure Cosmos DB CLI 설명서를 참조하세요.

특정 API에 대한 Azure CLI 샘플은 다음을 참조하세요.