PostgreSQL のクラウドベースのデータベース サービスにおけるジオデータベースの作成

ArcGIS は、PostgreSQL に基づくサービスとしてのクラウド データベース製品を複数サポートしています。 Esri がサポートする PostgreSQL のクラウドベースのデータベース サービスのほとんどで、エンタープライズ ジオデータベースを作成できます。

ArcGIS AllSource 3.3 からジオデータベースを作成する場合、そのジオデータベースのバージョンは 11.3.0 になります。

前提条件を満たす

ジオデータベースを作成する前に、クラウド アカウントにデータベース インスタンスを作成し、接続を受信できるよう構成し、sde ユーザーとスキーマを作成して、その sde ユーザーにジオデータベースを作成する権限を付与する必要があります。

クラウド プロバイダーの指示に従って、次の手順を実行します。

また、ジオデータベースの作成に使用する ArcGIS クライアントをインストールするクラウド コンピューターに ArcGIS Server キーコード認証ファイルをコピーする必要があります。

ジオデータベースを作成する前に、次の前提条件の手順を完了します。

  1. 使用する ArcGIS のバージョンが、使用予定のクラウドベースのデータベース サービスのタイプとバージョンをサポートしていることを確認します。
  2. 選択したクラウド プラットフォームにデータベース サービス インスタンスを作成します。
  3. データベース インスタンスに sde という名前のユーザー ログインを作成します。
  4. 使用しているデータベース サービスのタイプのジオデータベースを作成するのに必要な権限を sde ユーザーに付与します。
  5. データベース インスタンスに sde という名前のスキーマを作成し、そのスキーマに対する権限を sde ユーザーに付与します。
  6. ジオデータベースの作成に使用する ArcGIS クライアント - ArcGIS AllSource または ArcGIS Server - をインストールします。

    ArcGIS クライアントは、データベース サービスが実行されているのと同じクラウド プラットフォームおよびリージョンにインストールします。

  7. データベース インスタンスが ArcGIS クライアントからの接続を許可するように構成されていることを確認します。
  8. ステップ 6 でインストールした ArcGIS クライアントから、データベース インスタンスへのデータベース接続を作成し、sde ユーザーとして接続します。

    インスタンス文字列の例については、「ArcGIS AllSource でのデータベース接続」をご参照ください。

    sde ユーザーがデータベース認証ユーザーである場合、sde ユーザーのパスワードをデータベース接続に保存する必要があります。

  9. ArcGIS Server キーコード ファイルを入手し、ジオデータベースの作成に使用する ArcGIS クライアントからアクセスできる位置に配置します。

これで、クラウド内のデータベース インスタンスにジオデータベースを作成できるようになりました。

データベース サービス インスタンスでのジオデータベースの作成

ArcGIS AllSource をデータベース サービスと同じクラウド リージョンにインストールした場合は、[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ジオプロセシング ツールを実行してデータベース インスタンスにジオデータベースを作成できます。この手順は、以下の最初のセクションで説明します。

また、Python ウィンドウで EnableEnterpriseGeodatabase ArcPy 関数を実行するか、クラウド内の ArcGIS AllSource またはArcGIS Server のインストールからPython スクリプトを実行することもできます。

[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールの実行

以下の手順に従って、ArcGIS AllSource[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールを使用してジオデータベースを作成します。

  1. クラウド環境の仮想コンピューターにサイン インして、ArcGIS AllSource を起動します。
  2. [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールを開きます。
  3. [入力データベース接続] パラメーターに、前提条件の手順の一部として作成したデータベース接続ファイルを指定します。
  4. [認証ファイル] で、ArcGIS Server (Enterprise エディション) を認証したときに作成されたキーコード ファイルを参照して選択します。

    このファイルは ArcGIS ServerWindows にインストールした場合は \\Program Files\ESRI\License<release#>\sysgen に書き込まれており、ArcGIS ServerLinux にインストールした場合は /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen に書き込まれています。

  5. [実行] をクリックします。

これで、データベース インスタンスにジオデータベースが作成されました。

ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、スクリプトを実行した仮想コンピューターの TEMP 変数で指定されたディレクトリに作成されます。 ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。

次に、データベース管理者は、データを作成、編集、表示するユーザーのログイン ロールおよび対応するスキーマを作成し、編集者とデータ閲覧者のログイン ロールを作成することができます。

EnableEnterpriseGeodatabase ArcPy 関数の実行

ArcPy 関数を実行するには、クラウド内のいずれかの ArcGIS クライアント コンピューターに接続して、Python ウィンドウから関数を実行します。

  1. ArcGIS AllSource または ArcGIS Server がインストールされている、クラウド環境の仮想コンピューターにサイン インします。
  2. Python ウィンドウにアクセスします。

    ArcGIS のインストールから Python へのアクセスの詳細については、以下をご参照ください。

  3. Python ウィンドウから EnableEnterpriseGeodatabase ArcPy 関数を実行します。

    作成したデータベース接続ファイルを使用して、前提条件の手順の一部としてアクセス可能な場所に配置した ArcGIS Server の認証ファイルを参照します。

    次の例では、ArcGIS AllSource のインストールから EnableEnterpriseGeodatabase 関数が実行されています。 データベース接続ファイル (postresdbaas.sde) は ArcGIS AllSource のプロジェクト フォルダー (C:\proprojects\pg_proj) に格納され、認証ファイル (keycodes) は C:\authcodes に格納されます。

    arcpy.management.EnableEnterpriseGeodatabase(r"C:\proprojects\pg_proj\postresdbaas.sde",r"C:\authcodes\keyfile")

    次の例では、Linux コンピューター上の ArcGIS Server のインストールから関数が実行されています。 データベース接続ファイル (postresdbaas.sde) は /usr/connectionfiles に格納され、キーコード ファイルはデフォルトの ArcGIS Server の場所に配置されます。

    arcpy.management.EnableEnterpriseGeodatabase("/usr/connectionfiles/postresdbaas.sde","/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes")

これで、データベース インスタンスにジオデータベースが作成されました。

ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、関数を実行した仮想コンピューターの TEMP 変数で指定されたディレクトリに作成されます。 ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。

次に、データベース管理者は、データを作成、編集、表示するユーザーのログイン ロールおよび対応するスキーマを作成し、編集者とデータ閲覧者のログイン ロールを作成することができます。

ArcGIS クライアントからの Python スクリプトの実行

ArcGIS AllSource (Desktop Standard または Desktop Advanced) または ArcGIS Server コンピューターからスクリプトを実行してジオデータベースを作成するには、下記のスクリプトを使用できます。

CreateDatabaseConnection および EnableEnterpriseGeodatabase ArcPy 関数を呼び出してデータベースに接続し、PostgreSQL のデータベース サービスにジオデータベースを作成する Python スクリプトを実行するには、次の手順に従います。

  1. ArcGIS クライアント コンピューター上でテキスト ファイルを作成し、そのファイルに以下のスクリプトをコピーします。

    """
    Name: enable_enterprise_gdb.py
    Description: Provide connection information to an enterprise database
    and enable enterprise geodatabase.
    Type enable_enterprise_gdb.py -h or enable_enterprise_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy, os, optparse, sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for " + arcpy.GetInstallInfo()['Version'] )
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, ORACLE, POSTGRESQL, DB2, INFORMIX, or DB2ZOS.")
    parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
    parser.add_option ("--auth", dest="account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive):  DATABASE_AUTH, OPERATING_SYSTEM_AUTH.  Default=DATABASE_AUTH")
    parser.add_option ("-u", dest="User", type="string", default="", help="Geodatabase administrator user name")
    parser.add_option ("-p", dest="Password", type="string", default="", help="Geodatabase  administrator password")
    parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file")
    
    
    # Check if value entered for option
    try:
    	(options, args) = parser.parse_args()
    
    	
    #Check if no system arguments (options) entered
    	if len(sys.argv) == 1:
    		print("%s: error: %s\n" % (sys.argv[0], "No command options given"))
    		parser.print_help()
    		sys.exit(3)
    	
    
    	#Usage parameters for spatial database connection
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	database = options.Database.lower()
    	license = options.Authorization_file
    
    
    	if( database_type ==""):	
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified."))
    		parser.print_help()
    		sys.exit(3)		
    		
    	if (license == ""):
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified."))
    		parser.print_help()
    		sys.exit(3)
    
    		
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	if (license == ""):
    		print(" \n%s: error: %s\n" % (sys.argv[0], "Authorization file (-l) must be specified."))
    		parser.print_help()
    		sys.exit(3)
    	
    	# Checks required license level
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print("\n" + product_license + " license found!" + "  Enabling enterprise geodatabase functionality requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
    		sys.exit("Re-authorize ArcGIS before enabling an enterprise geodatabase.")
    	else:
    		print("\n" + product_license + " license available!  Continuing to enable...")
    		arcpy.AddMessage("+++++++++")
    	
    	# Local variables
    	instance_temp = instance.replace("\\","_")
    	instance_temp = instance_temp.replace("/","_")
    	instance_temp = instance_temp.replace(":","_")
    	Conn_File_NameT = instance_temp + "_" + database + "_" + username    
    	
    	if os.environ.get("TEMP") == None:
    		temp = "c:\\temp"	
    	else:
    		temp = os.environ.get("TEMP")
    	
    	if os.environ.get("TMP") == None:
    		temp = "/usr/tmp"		
    	else:
    		temp = os.environ.get("TMP")  
    	
    
    	Connection_File_Name = Conn_File_NameT + ".sde"
    	Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde"
    	
    	# Check for the .sde file and delete it if present
    	arcpy.env.overwriteOutput=True
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    	print("\nCreating Database Connection File...\n")	
    	# Process: Create Database Connection File...
    	# Usage:  out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true)
    	arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=username, password=password, save_user_pass="TRUE")
    	for i in range(arcpy.GetMessageCount()):
    
                    if "000565" in arcpy.GetMessage(i):   #Check if database connection was successful
    
                            arcpy.AddReturnMessage(i)
    
                            arcpy.AddMessage("\n+++++++++")
    
                            arcpy.AddMessage("Exiting!!")
    
                            arcpy.AddMessage("+++++++++\n")
    
                            sys.exit(3)
    
                    else:
    
                            arcpy.AddReturnMessage(i)
    
                            arcpy.AddMessage("+++++++++\n")
    	
    	# Process: Enable geodatabase...
    	try:
    		print("Enabling Enterprise Geodatabase...\n")
    		arcpy.EnableEnterpriseGeodatabase_management(input_database=Connection_File_Name_full_path, authorization_file=license)
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    		arcpy.AddMessage("+++++++++\n")
    	except:
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    			
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    			
    #Check if no value entered for option	
    except SystemExit as e:
    	if e.code == 2:
    		parser.usage = ""
    		print("\n")
    		parser.print_help() 
    		parser.exit(2)

  2. .py 拡張子を付けてファイルを保存します。
  3. ユーザーのインスタンスに固有のオプションと情報を指定して、スクリプトを実行します。

    次の例では、データベース サービスと同じクラウド リージョンにある仮想コンピューターから enable_gdb.py ファイルが実行されています。

    この例では、Linux コンピューター上の ArcGIS Server のインストールからスクリプトが実行されています。 これは、us-west-2 リージョン (database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com) の Amazon Aurora PostgreSQL インスタンスにある myauroradb という名前のデータベースに接続します。 キーコード ファイルは、ArcGIS Server コンピューター上の /usr/arcgis/auth に配置されました。

    ./enable_gdb.py --DBMS POSTGRESQL -i database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com --auth DATABASE_AUTH 
    -u sde -p sdeP@ss -D myauroradb -l '/usr/arcgis/auth/keycodes'

    次の例では、AzureMicrosoft Windows コンピューターからスクリプトが実行されています。 これは、Microsoft Azure Database for PostgreSQL (フレキシブル サーバー) インスタンス my-pg-flex.postgres.database.azure.com にある azurepgf という名前のデータベースに接続します。 キーコード ファイルは、デフォルトの ArcGIS Server の場所に配置されます。

    enable_gdb.py --DBMS POSTGRESQL -i my-pg-flex.postgres.database.azure.com --auth DATABASE_AUTH 
    -u sde -p EsDeeEpass -D azurepgf -l '\\Program Files\ESRI\License\sysgen\keycodes'

    次の例では、ArcGIS AllSource がインストールされているコンピューターからスクリプトが実行され、キーコード ファイルが Users\MyUser\Documents\AuthFiles\keycodes に配置されています。 スクリプトは、パブリック IP アドレス 98.765.43.210 を通じてアクセスされる Google Cloud SQL for PostgreSQL インスタンス内のデータベース (gcspostgres) に接続します。

    enable_gdb.py --DBMS POSTGRESQL -i 98.765.43.210 --auth DATABASE_AUTH 
    -u sde -p Zpassw0rd -D gcspostgres -l '\\Users\MyUser\Documents\AuthFiles\keycodes'

    ヒント:

    このスクリプトの構文ヘルプを取得するには、コマンド プロンプトに「-h」または「--help」と入力します。

これで、データベース インスタンスにジオデータベースが作成されました。

ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、スクリプトを実行した仮想コンピューターの TEMP 変数または TMP 変数で指定されたディレクトリに作成されます。 ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。

次に、データベース管理者は、データを作成、編集、表示するユーザーのログイン ロールおよび対応するスキーマを作成し、編集者とデータ閲覧者のログイン ロールを作成することができます。