#author("2020-12-12T17:05:33+00:00","","") #mynavi(Azureメモ) #setlinebreak(on); #html(){{ <style> .images img { border: 1px solid #333; } </style> }} * 概要 [#b8d6cc43] #html(<div class="pl10">) #TODO #html(</div>) * 料金 [#y044c341] #html(<div class="pl10">) https://azure.microsoft.com/ja-jp/pricing/details/private-link/ | サービス/詳細 | 料金 |h | Private Link サービス | Private Link サービスに料金はかかりません | | プライベート エンドポイント | ¥ 1.12 / 時間 | | 受信データ処理量 | ¥ 1.12/GB | | 送信データ処理量 | ¥ 1.12/GB | #html(</div>) * 目次 [#m1734f6a] #contents - 参考 -- [[Azure Database for PostgreSQL 用の Private Link - 単一サーバー>https://docs.microsoft.com/ja-jp/azure/postgresql/concepts-data-access-and-security-private-link]] -- [[ポータルを使用して Azure Database for PostgreSQL 単一サーバー用の Private Link を作成および管理する>https://docs.microsoft.com/ja-jp/azure/postgresql/howto-configure-privatelink-portal]] -- [[CLI を使用して Azure Database for PostgreSQL 単一サーバー用の Private Link を作成および管理する>https://docs.microsoft.com/ja-jp/azure/postgresql/howto-configure-privatelink-cli]] * VNet(仮想ネットワーク) 及び VM(仮想マシン) の作成 [#h9d49da3] #html(<div class="pl10">) #html(){{ <div id="tabs1"> <ul> <li><a href="#tabs1-1">0_env.sh</a></li> <li><a href="#tabs1-2">1_resources.sh</a></li> </ul> }} // START tabs1-1 #html(<div id="tabs1-1">) 0_env.sh #mycode2(){{ #!/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 }} #html(</div>) // END tabs1-1 // START tabs1-2 #html(<div id="tabs1-2">) 1_resources.sh #mycode2(){{ #!/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 }} #html(</div>) // END tabs1-2 #html(</div>) // END tabs1 #html(<script>$(function() { $("#tabs1").tabs(); });</script>) 上記のシェルで VNet 及び VMを作成 #myterm2(){{ ./1_resources_vm.sh --create }} #html(</div>) * データベース作成 [#t958e7c9] #html(<div class="pl10">) ** PostgreSQLサーバの作成 [#qbde4ed1] #html(<div class="pl10">) Azure Portal から 「Azure Database for PostgreSQL」 を以下の通り作成した。 ※ 汎用(General Purpose) または メモリ最適化(Memory Optimized) 以上の価格レベルにする事。 ※ &color(red){「Basic」 では Private Link 機能は利用できない。}; ※ https://docs.microsoft.com/ja-jp/azure/postgresql/concepts-data-access-and-security-private-link #html(<div class="images">) #ref(pg01.png,nolink); #html(</div>) #html(</div>) ** Azureサービスへのアクセス許可 [#p077f6cc] #html(<div class="pl10">) Cloud Shell や VM からアクセスする為、Azureサービスへの #html(<div class="images">) #TODO #html(</div>) #html(</div>) ** ユーザ 及び データベースの作成 [#s11e8263] #html(<div class="pl10">) VMにSSH接続して 以下の通り DB 及び ユーザを作成する。 #myterm2(){{ 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 }} 作成したユーザで接続し直してアクセス確認用のテーブルを作成しておく #myterm2(){{ 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 }} #html(</div>) #html(</div>) * プライベートエンドポイントの作成 [#bf41e9c2] #html(<div class="pl10">) Azure portal から [Private Link] を検索/選択後、[プライベートエンドポイントの作成] を選択。 #TODO #html(</div>) * Private Link の構成 [#w4a9dd66] #html(<div class="pl10">) #TODO #html(</div>)