#author("2020-12-12T13:21:04+00:00","","")
#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 サービスに料金はかかりません |
| プライベート エンドポイント | &yen; 1.12 / 時間 |
| 受信データ処理量 | &yen; 1.12/GB |
| 送信データ処理量 | &yen; 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>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS