Share via


자습서: Azure CLI를 사용하여 Azure Database for PostgreSQL - 단일 서버 디자인

적용 대상: Azure Database for PostgreSQL - 단일 서버

Important

Azure Database for PostgreSQL - 단일 서버는 곧 사용 중지됩니다. Azure Database for PostgreSQL - 유연한 서버로 업그레이드하는 것이 좋습니다. Azure Database for PostgreSQL - 유연한 서버로 마이그레이션하는 방법에 대한 자세한 내용은 Azure Database for PostgreSQL 단일 서버에 대한 새로운 소식을 참조하세요.

이 자습서에서는 Azure CLI(명령줄 인터페이스) 및 기타 유틸리티를 사용하여 다음을 수행하는 방법에 대해 알아봅니다.

  • PostgreSQL용 Azure Database 서버 만들기
  • 서버 방화벽 구성
  • psql 유틸리티를 사용하여 데이터베이스 만들기
  • 샘플 데이터 로드
  • 쿼리 데이터
  • 데이터 업데이트
  • 데이터 복원

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

사전 요구 사항

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은 로그인한 초기 계정에서 자동으로 인증됩니다. 다음 스크립트를 통해 다른 구독을 사용하여 로그인하고 <Subscription ID>를 Azure 구독 ID로 바꿉니다. Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

subscription="<subscriptionId>" # add subscription here

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

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

매개 변수 값 설정

다음 값은 데이터베이스와 필요한 리소스를 만드는 후속 명령에 사용됩니다. 서버 이름은 모든 Azure에서 전역적으로 고유해야 하므로 $RANDOM 함수를 사용하여 서버 이름을 만듭니다.

환경에 맞게 위치를 변경합니다. 0.0.0.0을 특정 환경과 일치하도록 IP 주소 범위로 바꿉니다. 사용 중인 컴퓨터의 공용 IP 주소를 사용하여 서버에 대한 액세스를 사용자의 IP 주소로만 제한합니다.

# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="East US"
resourceGroup="msdocs-postgresql-rg-$randomIdentifier"
tag="create-postgresql-server-and-firewall-rule"
server="msdocs-postgresql-server-$randomIdentifier"
sku="GP_Gen5_2"
login="azureuser"
password="Pa$$w0rD-$randomIdentifier"
# Specify appropriate IP address values for your environment
# to limit / allow access to the PostgreSQL server
startIp=0.0.0.0
endIp=0.0.0.0
echo "Using resource group $resourceGroup with login: $login, password: $password..."

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

# Create a resource group
echo "Creating $resourceGroup in $location..."
az group create --name $resourceGroup --location "$location" --tags $tag

서버 만들기

az postgres server create 명령으로 서버를 만듭니다.

# Create a PostgreSQL server in the resource group
# Name of a server maps to DNS name and is thus required to be globally unique in Azure.
echo "Creating $server in $location..."
az postgres server create --name $server --resource-group $resourceGroup --location "$location" --admin-user $login --admin-password $password --sku-name $sku

참고 항목

  • 서버 이름은 소문자, 숫자 및 하이픈(-) 문자만 포함할 수 있으며, 3~63자를 포함해야 합니다. 자세한 내용은 Azure Database for PostgreSQL 명명 규칙을 참조하세요.
  • 관리자 사용자 이름은 azure_superuser, admin, administrator, root, guest 또는 public일 수 없습니다.
  • 암호에는 영어 대문자, 영어 소문자, 숫자 및 영숫자가 아닌 문자의 세 범주에 해당하는 8~128자의 문자가 포함되어야 합니다.
  • SKU에 관한 자세한 내용은 Azure Database for PostgreSQL 가격 책정을 참조하세요.

Important

  • 서버의 기본 PostgreSQL 버전은 9.6입니다. 지원되는 모든 버전을 보려면 지원되는 PostgreSQL 주 버전을 참조하세요.
  • SSL은 서버에서 기본적으로 사용하도록 설정됩니다. SSL에 대한 자세한 내용은 SSL 연결 구성을 참조하세요.

서버 기반 방화벽 규칙 구성

az postgres server firewall-rule create 명령을 사용하여 방화벽 규칙을 생성하여 서버에 연결할 수 있는 액세스 권한을 로컬 환경에 부여할 수 있습니다.

# Configure a firewall rule for the server 
echo "Configuring a firewall rule for $server for the IP address range of $startIp to $endIp"
az postgres server firewall-rule create --resource-group $resourceGroup --server $server --name AllowIps --start-ip-address $startIp --end-ip-address $endIp

IP 주소를 모르는 경우 WhatIsMyIPAddress.com으로 이동하여 가져옵니다.

참고 항목

연결 문제를 방지하려면 네트워크 방화벽에서 포트 5432를 허용하는지 확인합니다. Azure Database for PostgreSQL 서버는 해당 포트를 사용합니다.

서버 기반 방화벽 규칙 나열

기존 서버 방화벽 규칙을 나열하려면 az postgres server firewall-rule list 명령을 실행합니다.

# List firewall rules for the server
echo "List of server-based firewall rules for $server"
az postgres server firewall-rule list --resource-group $resourceGroup --server-name $server
# You may use the switch `--output table` for a more readable table format as the output.

출력에 기본적으로 JSON 형식으로 방화벽 규칙(있는 경우)이 나열됩니다. 읽기 쉬운 테이블 형식으로 출력하기 위해 --output table 스위치를 사용할 수도 있습니다.

연결 정보 가져오기

서버에 연결하려면 호스트 정보와 액세스 자격 증명을 제공합니다.

az postgres server show --resource-group $resourceGroup --name $server

administratorLoginfullyQualifiedDomainName 값을 기록해 둡니다.

psql을 사용하여 Azure Database for PostgreSQL 서버에 연결

psql 클라이언트는 PostgreSQL 서버에 연결하는 데 널리 사용되는 옵션입니다. Azure Cloud Shell을 통해 psql을 사용하여 서버에 연결할 수 있습니다. 사용 가능한 경우 로컬 환경에서도 psql을 사용할 수 있습니다. 빈 데이터베이스인 postgres는 새 PostgreSQL 서버와 함께 자동으로 만들어집니다. 다음 코드와 같이 psql을 통해 해당 데이터베이스를 사용하여 연결할 수 있습니다.

psql --host=<server_name>.postgres.database.azure.com --port=5432 --username=<admin_user>@<server_name> --dbname=postgres

URL 경로를 사용하여 Postgres에 연결하려는 경우 URL의 사용자 이름에서 @ 기호가 %40으로 인코딩됩니다. 예를 들어 psql에 대한 연결 문자열은 다음과 같습니다.

psql postgresql://<admin_user>%40<server_name>@<server_name>.postgres.database.azure.com:5432/postgres

빈 데이터베이스 만들기

  1. 서버에 연결되면 프롬프트에서 빈 데이터베이스를 만듭니다.

    CREATE DATABASE mypgsqldb;
    
  2. 프롬프트에서 다음 명령을 실행하여 새로 만든 mypgsqldb 데이터베이스에 대한 연결로 전환합니다.

    \c mypgsqldb
    

데이터베이스에서 테이블 만들기

이제 Azure Database for PostgreSQL에 연결하는 방법을 알았으므로 몇 가지 기본 작업을 완료할 수 있습니다.

먼저 테이블을 만들고 일부 데이터와 함께 로드합니다. 예를 들어 인벤토리 정보를 추적하는 테이블을 만듭니다.

CREATE TABLE inventory (
  id serial PRIMARY KEY, 
  name VARCHAR(50), 
  quantity INTEGER
);

다음과 같이 입력하면 테이블 목록에서 새로 만든 테이블을 볼 수 있습니다.

\dt

테이블에 데이터 로드

이제 테이블을 만들었으니 여기에 일부 데이터를 삽입합니다. 열린 명령 프롬프트 창에서 다음 쿼리를 실행하여 데이터 행을 삽입합니다.

INSERT INTO inventory (id, name, quantity) VALUES (1, 'banana', 150); 
INSERT INTO inventory (id, name, quantity) VALUES (2, 'orange', 154);

앞에서 만든 테이블에 두 개의 샘플 데이터 행이 추가되었습니다.

테이블의 데이터 쿼리 및 업데이트

다음 쿼리를 실행하여 인벤토리 테이블에서 정보를 검색합니다.

SELECT * FROM inventory;

또한 인벤토리 테이블의 데이터를 업데이트할 수도 있습니다.

UPDATE inventory SET quantity = 200 WHERE name = 'banana';

데이터를 검색할 때 업데이트된 값을 볼 수 있습니다.

SELECT * FROM inventory;

이전 시점으로 데이터베이스 복원

실수로 테이블을 삭제한 경우를 가정해 보겠습니다. 이런 경우는 쉽게 복구할 수 없는 경우입니다. Azure Database for PostgreSQL을 사용하면, 서버에 백업이 있는 특정 시점(구성한 백업 보존 기간에 따라 결정됨)으로 돌아가서 새 서버를 이 시점으로 복원할 수 있습니다. 이 새 서버를 사용하여 삭제된 데이터를 복구할 수 있습니다.

다음 명령은 샘플 서버를 테이블이 추가되기 전 시점으로 복원합니다.

az postgres server restore --resource-group myresourcegroup --name mydemoserver-restored --restore-point-in-time 2017-04-13T13:59:00Z --source-server mydemoserver

az postgres server restore 명령에는 다음 매개 변수가 필요합니다.

설정 제안 값 설명
resource-group  myresourcegroup  원본 서버가 존재하는 리소스 그룹입니다. 
name mydemoserver-restored 복원 명령에 의해 만들어진 새 서버의 이름입니다.
restore-point-in-time 2017-04-13T13:59:00Z 복원하려는 지정 시간을 선택합니다. 이 날짜 및 시간은 원본 서버의 백업 보존 기간 내에 있어야 합니다. ISO8601 날자 및 시간 형식을 사용합니다. 예를 들어 2017-04-13T05:59:00-08:00과 같은 고유한 현지 표준 시간대 또는 UTC Zulu 형식 2017-04-13T13:59:00Z를 사용할 수도 있습니다.
source-server mydemoserver 복원을 수행하려는 원본 서버의 이름 또는 ID입니다.

서버를 지정 시간으로 복원하면 새 서버가 만들어지고 사용자가 지정한 시점의 원본 서버로 복사됩니다. 복원된 서버에 대한 위치 및 가격 책정 계층 값은 원본 서버와 동일합니다.

명령은 동기화되고 서버가 복원된 후에 반환됩니다. 복원이 완료되면 생성된 새 서버를 찾습니다. 데이터가 예상대로 복원되었는지 확인합니다.

리소스 정리

다음 명령을 사용하여 이러한 리소스가 계속해서 필요한 경우가 아니면 az group delete 명령을 사용하여 리소스 그룹 및 연결된 모든 리소스를 제거합니다. 이러한 리소스 중 일부는 만들기 및 삭제하는 데 시간이 걸릴 수 있습니다.

az group delete --name $resourceGroup

다음 단계

이 자습서에서는 Azure CLI(명령줄 인터페이스) 및 기타 유틸리티를 사용하여 다음을 수행하는 방법에 대해 알아보았습니다.

  • PostgreSQL용 Azure Database 서버 만들기
  • 서버 방화벽 구성
  • psql 유틸리티를 사용하여 데이터베이스 만들기
  • 샘플 데이터 로드
  • 쿼리 데이터
  • 데이터 업데이트
  • 데이터 복원