다음을 통해 공유


자습서: PowerShell을 사용하여 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 Database for PostgreSQL은 PostgreSQL 커뮤니티 버전 데이터베이스 엔진을 기반으로 하는 Microsoft 클라우드의 관계형 데이터베이스 서비스입니다. 이 자습서에서는 PowerShell 및 다른 유틸리티를 사용하여 다음을 수행하는 방법에 대해 알아봅니다.

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

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

PowerShell을 로컬로 사용하도록 선택하는 경우 이 문서에서는 Az PowerShell 모듈을 설치하고 Connect-AzAccount cmdlet을 사용하여 Azure 계정에 연결해야 합니다. Az PowerShell 모듈을 설치하는 방법에 대한 자세한 내용은 Azure PowerShell 설치를 참조하세요.

Important

Az.PostgreSql PowerShell 모듈이 미리 보기에 있지만 Install-Module -Name Az.PostgreSql -AllowPrerelease 명령을 사용하여 Az PowerShell 모듈과 별도로 설치해야 합니다. Az.PostgreSql PowerShell 모듈이 일반 공급되면 이후 Az PowerShell 모듈 릴리스에 포함되며 Azure Cloud Shell 내에서 기본적으로 사용할 수 있습니다.

Azure Database for PostgreSQL 서비스를 처음 사용하는 경우 Microsoft.DBforPostgreSQL 리소스 공급자를 등록해야 합니다.

Register-AzResourceProvider -ProviderNamespace Microsoft.DBforPostgreSQL

Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.

옵션 예제/링크
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다. 시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. Azure Cloud Shell에 대한 사용 예제를 보여 주는 스크린샷
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. Azure Cloud Shell을 시작하는 단추입니다.
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. Azure Portal의 Cloud Shell 단추를 보여 주는 스크린샷

Azure Cloud Shell을 사용하려면:

  1. Cloud Shell을 시작합니다.

  2. 코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.

  3. Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.

  4. Enter를 선택하여 코드 또는 명령을 실행합니다.

여러 Azure 구독이 있는 경우 리소스에 대한 요금이 청구되는 적절한 구독을 선택합니다. Set-AzContext cmdlet을 사용하여 특정 구독 ID를 선택합니다.

Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000

리소스 그룹 만들기

New-AzResourceGroup cmdlet을 사용하여 Azure 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 리소스가 그룹으로 배포되고 관리되는 논리 컨테이너입니다.

다음 예제에서는 myresourcegroup이라는 리소스 그룹을 미국 서부 지역에 만듭니다.

New-AzResourceGroup -Name myresourcegroup -Location westus

PostgreSQL용 Azure Database 서버 만들기

New-AzPostgreSqlServer cmdlet을 사용하여 Azure Database for PostgreSQL 서버를 만듭니다. 서버는 여러 데이터베이스를 관리할 수 있습니다. 일반적으로 각 프로젝트 또는 각 사용자에 대해 별도의 데이터베이스가 사용됩니다.

다음 예제에서는 myadmin의 서버 관리자 로그인을 사용하여 myresourcegroup 리소스 그룹의 mydemoserver라는 PostgreSQL 서버를 미국 서부 지역에 만듭니다. 이는 2개 vCore 및 지역 중복 백업을 사용하도록 설정된 범용 가격 책정 계층의 5세대 서버입니다. PostgreSQL 서버 관리자 계정의 암호이므로 예제의 첫 번째 줄에 사용되는 암호를 문서화합니다.

서버 이름은 DNS 이름에 매핑되며 Azure에서 글로벌하게 고유해야 합니다.

$Password = Read-Host -Prompt 'Please enter your password' -AsSecureString
New-AzPostgreSqlServer -Name mydemoserver -ResourceGroupName myresourcegroup -Sku GP_Gen5_2 -GeoRedundantBackup Enabled -Location westus -AdministratorUsername myadmin -AdministratorLoginPassword $Password

Sku 매개 변수 값은 다음 예제와 같이 pricing-tier_compute-generation_vCores 규칙을 따릅니다.

  • -Sku B_Gen5_1은 기본, 5세대 및 1개 vCore에 매핑됩니다. 이 옵션은 사용 가능한 가장 작은 SKU입니다.
  • -Sku GP_Gen5_32는 범용, 5세대 및 vCore 32개에 매핑됩니다.
  • -Sku MO_Gen5_2는 메모리 최적화, 5세대 및 2개의 vCore에 매핑됩니다.

유효한 지역별 및 계층별 Sku 값에 대한 자세한 내용은 Azure Database for PostgreSQL 가격 책정 계층을 참조하세요.

간단한 컴퓨팅 및 I/O가 워크로드에 적합한 경우 기본 가격 책정 계층을 사용하는 것이 좋습니다.

Important

기본 가격 책정 계층에서 만든 서버는 나중에 범용 또는 메모리 최적화로 크기 조정할 수 없으며 지리적으로 복제할 수 없습니다.

방화벽 규칙 구성

New-AzPostgreSqlFirewallRule cmdlet을 사용하여 Azure Database for PostgreSQL 서버 수준 방화벽 규칙을 만듭니다. 서버 수준 방화벽 규칙을 사용하면 psql 명령줄 도구 또는 외부 애플리케이션(예: PostgreSQL Workbench)에서 Azure Database for PostgreSQL 서비스 방화벽을 통해 서버에 연결할 수 있습니다.

다음 예제에서는 특정 192.168.0.1 IP 주소에서 연결하도록 허용하는 AllowMyIP라는 방화벽 규칙을 만듭니다. 연결하는 위치에 해당하는 IP 주소 또는 IP 주소 범위로 바꿉니다.

New-AzPostgreSqlFirewallRule -Name AllowMyIP -ResourceGroupName myresourcegroup -ServerName mydemoserver -StartIPAddress 192.168.0.1 -EndIPAddress 192.168.0.1

참고 항목

Azure Database for PostgreSQL에 대한 연결은 포트 5432를 통해 통신합니다. 회사 네트워크 내에서 연결하려고 하면 5432 포트를 통한 아웃바운드 트래픽이 허용되지 않을 수 있습니다. 이 시나리오에서는 IT 부서에서 5432 포트를 여는 경우에만 서버에 연결할 수 있습니다.

연결 정보 가져오기

서버에 연결하려면 호스트 정보와 액세스 자격 증명을 제공해야 합니다. 다음 예제를 사용하여 연결 정보를 확인합니다. FullyQualifiedDomainNameAdministratorLogin 값을 적어 둡니다.

Get-AzPostgreSqlServer -Name mydemoserver -ResourceGroupName myresourcegroup |
  Select-Object -Property FullyQualifiedDomainName, AdministratorLogin
FullyQualifiedDomainName                    AdministratorLogin
------------------------                    ------------------
mydemoserver.postgresql.database.azure.com       myadmin

psql을 사용하여 PostgreSQL 데이터베이스에 연결

클라이언트 컴퓨터에 PostgreSQL이 설치되어 있는 경우 psql 로컬 인스턴스를 사용하여 Azure PostgreSQL 서버에 연결할 수 있습니다. 이 문서의 코드 샘플에서 사용해 보세요 단추를 선택하여 Azure Cloud Shell에서 미리 설치된 버전의 psql 명령줄 도구에 액세스할 수도 있습니다. Azure Cloud Shell에 액세스하는 또 다른 방법으로, Azure Portal의 오른쪽 위 도구 모음에서 >_ 단추를 선택하거나 shell.azure.com을 방문하는 것이 있습니다.

  1. psql 명령줄 유틸리티를 사용하여 Azure PostgreSQL 서버에 연결합니다.

    psql --host=<servername> --port=<port> --username=<user@servername> --dbname=<dbname>
    

    예를 들어 다음 명령은 액세스 자격 증명을 사용하여 PostgreSQL 서버 mydemoserver.postgres.database.azure.compostgres라는 기본 데이터베이스에 연결합니다. 암호를 묻는 메시지가 표시되면 선택한 <server_admin_password>를 입력합니다.

    psql --host=mydemoserver.postgres.database.azure.com --port=5432 --username=myadmin@mydemoserver --dbname=postgres
    

    URL 경로를 사용하여 Postgres에 연결하려는 경우 URL의 사용자 이름에서 @ 기호가 %40으로 인코딩됩니다. 예를 들어 psql에 대한 연결 문자열은 psql postgresql://myadmin%40mydemoserver@mydemoserver.postgres.database.azure.com:5432/postgres입니다.

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

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

    \c mypgsqldb
    

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

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

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

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

테이블에 데이터 로드

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

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;

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

이전의 특정 시점으로 서버를 복원할 수 있습니다. 복원된 데이터는 새 서버에 복사되고 기존 서버는 변경되지 않은 상태로 유지됩니다. 예를 들어 테이블이 실수로 삭제된 경우 삭제가 발생한 바로 전 시간으로 복원할 수 있습니다. 그런 다음 서버의 복원된 복사본에서 누락된 테이블 및 데이터를 검색할 수 있습니다.

서버를 복원하려면 Restore-AzPostgreSqlServer PowerShell cmdlet을 사용합니다.

복원 명령 실행

서버를 복원하려면 PowerShell에서 다음 예제를 실행합니다.

$restorePointInTime = (Get-Date).AddMinutes(-10)
Get-AzPostgreSqlServer -Name mydemoserver -ResourceGroupName myresourcegroup |
  Restore-AzPostgreSqlServer -Name mydemoserver-restored -ResourceGroupName myresourcegroup -RestorePointInTime $restorePointInTime -UsePointInTimeRestore

서버를 이전 특정 시점으로 복원하는 경우 새 서버가 만들어집니다. 지정된 특정 시점의 원본 서버 및 해당 데이터베이스가 새 서버에 복사됩니다.

복원된 서버에 대한 위치 및 가격 책정 계층 값은 원본 서버와 같게 유지됩니다.

복원 프로세스가 완료된 후 새 서버를 찾아 데이터가 예상대로 복원되었는지 확인합니다. 새 서버에는 복원이 시작된 당시의 기존 서버에 유효한 동일한 서버 관리자 로그인 이름 및 암호가 있습니다. 암호는 새 서버의 개요 페이지에서 변경할 수 있습니다.

복원 중에 만든 새 서버에는 원래 서버에 존재했던 VNet 서비스 엔드포인트가 없습니다. 이러한 규칙은 새 서버에 대해 개별적으로 설정돼야 합니다. 원본 서버의 방화벽 규칙이 복원됩니다.

리소스 정리

이전 단계에서 리소스 그룹에 Azure 리소스를 만들었습니다. 이러한 리소스가 더 이상 필요 없으면 서버 그룹을 삭제합니다. 서버 그룹의 개요 페이지에서 삭제 단추를 누릅니다. 팝업 페이지에 메시지가 표시되면 서버 그룹의 이름을 확인하고 마지막 삭제 단추를 선택합니다.

다음 단계