https://azure.microsoft.com/ja-jp/pricing/details/private-link/
サービス/詳細 | 料金 |
Private Link サービス | Private Link サービスに料金はかかりません |
プライベート エンドポイント | ¥ 1.12 / 時間 |
受信データ処理量 | ¥ 1.12/GB |
送信データ処理量 | ¥ 1.12/GB |
0_env.sh
#!/bin/bash # リソース名の接頭文字 PREFIX=XXXXXXXXXXX # サブスクリプションID subscriptionId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # リージョン region=japanwest resourceGroup=${PREFIX}Resources vnetName=${PREFIX}VNet vnetPrefix=10.1.0.0/16 nsgName=${vnetName}SecGrp nsgPubRuleName=${nsgName}PubRule nsgPubInboundPort="8086" vmSubnetName=${PREFIX}VmSubnet vmSubnetPrefix=10.1.1.0/24 exSubnetName=${PREFIX}ExSubnet exSubnetPrefix=10.1.2.0/24 vmName=${PREFIX}Vm vmImage=UbuntuLTS # "az vm image list -o table" で利用可能なイメージの一覧を確認可能 vmIpAddress=10.1.1.5 vmUser=sampleuser
1_resources.sh
#!/bin/bash # 設定の読み込み source 0_env.sh # リソース作成 if [ "$1" == "--create" ]; then # リソースグループの作成 echo az group create az group create --name $resourceGroup --location $region # NSG(ネットワークセキュリティグループの)作成 echo az network nsg create az network nsg create --resource-group $resourceGroup --name $nsgName # NSGルール(Public) SSH echo "az network nsg rule create(ssh)" az network nsg rule create \ --resource-group $resourceGroup --nsg-name $nsgName --name ${nsgPubRuleName}2 \ --access Allow --protocol Tcp --direction Inbound --priority 100 \ --source-address-prefix Internet --source-port-range "*" --destination-port-range "22" # 仮想ネットワーク 及び サブネット作成 echo az network vnet create az network vnet create \ --name $vnetName --resource-group $resourceGroup \ --address-prefixes $vnetPrefix --network-security-group $nsgName \ --subnet-name $vmSubnetName --subnet-prefixes $vmSubnetPrefix # VNet統合用のサブネット echo az vnet subnet create az network vnet subnet create \ --name $exSubnetName \ --resource-group $resourceGroup \ --vnet-name $vnetName \ --address-prefixes $exSubnetPrefix # ユーザディレクトリ配下のSSH鍵をバックアップ bk_suffix=`date +%Y%m%d%H%M%S` if [ -e ~/.ssh/id_rsa ]; then mv ~/.ssh/id_rsa ~/.ssh/id_rsa_${bk_suffix} fi if [ -e ~/.ssh/id_rsa.pub ]; then mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub_${bk_suffix} fi # 仮想マシンの作成 echo az vm create az vm create \ --resource-group $resourceGroup --name $vmName --image $vmImage --generate-ssh-keys \ --vnet-name $vnetName --subnet $vmSubnetName \ --private-ip-address $vmIpAddress --admin-username $vmUser \ --public-ip-address-dns-name `echo $vmName | tr '[A-Z]' '[a-z]'` \ --custom-data 2_setup_vm.sh # ポート開放 #az vm open-port --resource-group $resourceGroup --name $vmName --port 80 # 生成されたSSH鍵を移動( --ssh-dest-key-path が効かない為 ) mkdir -p pem if [ -e ~/.ssh/id_rsa ]; then mv ~/.ssh/id_rsa ./pem/id_rsa_${vmName} fi if [ -e ~/.ssh/id_rsa.pub ]; then mv ~/.ssh/id_rsa.pub ./pem/id_rsa_${vmName}.pub fi # バックアップしたSSH鍵を戻す if [ -e ~/.ssh/id_rsa_${bk_suffix} ]; then mv ~/.ssh/id_rsa_${bk_suffix} ~/.ssh/id_rsa fi if [ -e ~/.ssh/id_rsa.pub_${bk_suffix} ]; then mv ~/.ssh/id_rsa.pub_${bk_suffix} ~/.ssh/id_rsa.pub fi fi # リソース削除 if [ "$1" == "--delete" ]; then echo az group delete az group delete --name $resourceGroup fi
上記のシェルで VNet 及び VMを作成
./1_resources_vm.sh --create
Azure Portal から 「Azure Database for PostgreSQL」 を以下の通り作成した。
※ 汎用(General Purpose) または メモリ最適化(Memory Optimized) 以上の価格レベルにする事。
※ 「Basic」 では Private Link 機能は利用できない。
※ https://docs.microsoft.com/ja-jp/azure/postgresql/concepts-data-access-and-security-private-link
Cloud Shell や VM からアクセスする為、Azureサービスへの
VMにSSH接続して 以下の通り DB 及び ユーザを作成する。
psql "host=サーバ名.postgres.database.azure.com port=5432 dbname=postgres user=ユーザ名@サーバ名 password=管理者アカウントのパスワード sslmode=require" psql (10.15 (Ubuntu 10.15-0ubuntu0.18.04.1), server 11.6) : postgres=> CREATE DATABASE sampledb1 ENCODING UTF8; CREATE DATABASE postgres=> CREATE USER user1 WITH PASSWORD 'DBユーザのパスワード'; CREATE ROLE postgres=> GRANT ALL ON DATABASE sampledb1 TO user1; GRANT postgres=> \q
作成したユーザで接続し直してアクセス確認用のテーブルを作成しておく
psql "host=サーバ名.postgres.database.azure.com port=5432 dbname=sampledb1 user=user1@サーバ名 password=DBユーザのパスワード sslmode=require" : postgres=> create table sampletable1 (id integer, col1 integer, col2 integer, constraint sampletable1_pkc primary key (id)); CREATE TABLE postgres=> insert into sampletable1 values(1, 10, 100); INSERT 0 1 postgres=> insert into sampletable1 values(2, 20, 200); INSERT 0 1 postgres=> \q
Azure portal から [Private Link] を検索/選択後、[プライベートエンドポイントの作成] を選択。