2

新しいAzureRmResourceGroupDeployment Powershellコマンドレットを使用して、Azureリソーステンプレートを使用してリソースグループに展開しています。これはテスト環境なので、データベースを.bacpacファイルから復元して、現実的な量のデータでデータベースをシードしたいと考えています。Azure ARMテンプレートSQL AzureデータベースBacpacのインポートが2回目の展開で失敗する

次のスニペットは、既存のデータベースは存在しないが後続のデプロイメントで失敗するため、このリソースグループへの最初のデプロイ時に正常にデプロイされます。

{ 
       "name": "[variables('databaseName')]", 
       "type": "databases", 
       "location": "[resourceGroup().location]", 
       "apiVersion": "2014-04-01-preview", 
       "dependsOn": [ 
        "[variables('databaseServerName')]", 
        "[concat('Microsoft.Sql/servers/', variables('databases.ServerName'))]" 
       ], 
       "tags": { 
        "displayName": "testDatabase" 
       }, 
       "properties": { 
        "collation": "[variables('databaseCollation')]", 
        "edition": "[variables('databaseEdition')]", 
        "maxSizeBytes": "1073741824", 
        "requestedServiceObjectiveName": "[variables('databaseServicePlan')]" 
       }, 
       "resources": [ 
        { 
         "name": "Import", 
         "type": "extensions", 
         "apiVersion": "2014-04-01-preview", 
         "dependsOn": [ 
          "[variables('databaseName')]" 
         ], 
         "properties": { 
          "storageKeyType": "[variables('databaseBackupStorageKeyType')]", 
          "storageKey": "[parameters('databaseBackupStorageKey')]", 
          "storageUri": "[concat(parameters('databaseBackupStorageLocation'), '/', parameters('backupFileName'))]", 
          "administratorLogin": "[variables('databaseAdminLogin')]", 
          "administratorLoginPassword": "[variables('databaseAdminPassword')]", 
          "operationMode": "Import" 
         } 
        } 
       ] 
      } 

障害が発生したエラー:

Resource Microsoft.Sql/servers/databases/extensions '[resource-group-name]/[database-name]/Import' failed with message 'The ImportExport operation with Request Id 'b1f54bdd-6c98-4feb-a86f-656a5c6f1cc5' failed due to 'Error encountered during the service operation. 

Data cannot be imported into target because it contains one or more user objects. Import should be performed against a new, empty database. 

はおそらく、私はこれらのテンプレートが展開されている方法を誤解しました - 私は、ARMが環境にパッチを当て思いました。それらのリソースの設定が変更された場合、私はARMにデータベース(およびサブリソース)の作成/更新のみを通知する方法を知っていますか?

また、リソーステンプレートを使用してデータベースを復元する方法があれば、それについて聞きたいことがあります。

大変助かりましたか?エラーメッセージの状態として予め

おかげで、

ロブは

答えて

0

は、あなただけの空のデータベースにするか、新しいデータベースを作成しながら、データをインポートすることができます。

毎回同じデータベースにデータをインポートするか、毎回新しいデータベースにデータをインポートしようとしていますか?後者の場合は、ARMテンプレートをよく知っているチームのメンバーと調整して、テンプレートのエラーを修正するのに役立ちます。

+1

理想的には、同じリソースグループに複数回テンプレートをデプロイできますが、初めてデータベースをインポートするか、ARMはインポートが実行できないことを認識してそのステップをスキップします。 – Rob

0

各展開で同じテストデータベースを再作成したいという発想から、正しい?

nnuemahによれば、bacpacをインポートする前に、空のデータベースかデータベースを持たないといけません。シナリオとしてテストデータを復元するのではなく、偶発的なスキーマ展開を目的としていますが、dacpacファイル(bacpacファイルのインポートに加えて)の展開をサポートしています。その間、bacpacをインポートするテンプレートを展開する前に帯域外のデータベースを削除できますか?

あなたはここにdacpacsとbacpacsとの違いについての詳細を調べることができます:https://msdn.microsoft.com/en-us/library/ee210546.aspx

私も暫定的に働くかもしれない他のテンプレートオプションを探します。

ビルが言ったように乾杯、ビル

+0

最初のデプロイ時にデータベースを作成してインポートするだけで、その後のデプロイメントはコードの修正(MS Deploy)とスキーマの修正(DbUp)に使用されます。これらの環境をテスターに​​与え、環境のパッチ間でデータの変更を持続させたいと考えています。 – Rob

0

は残念ながら、dacpacファイルの展開はまだサポートされていませんが、それは我々がに探しているものです。現在、バクパックは冪等ではありません。 dacpacsがサポートされると、あなたが記述していることを達成できるはずです。

0

私は同じ問題があります。私にとっては、データベースのデプロイメントに失敗しても、配置テンプレートの他のすべてがコミットされるということが良いことです。しかし、それらのエラーを得ることは不安です。

マイクロソフトからKirk Evansを参照すると、エンジニアが認識している既知の問題です。 Se https://blogs.msdn.microsoft.com/kaevans/2016/03/28/deploy-bacpac-to-azure-sql-database-using-arm/#comment-56605

これに対する解決方法は、部分的なテンプレートがWebアプリケーションを参照する可能性を使用して、データベース配備部分を発行することです。次いで、このウェブアプリケーションは、存在をデータベースに照会し、結果に基づいて部分コンテンツを放出することができる。

+0

リンク+ありがとうございます!それはそれを行うにはかなり良い方法と思われます、おそらくAzure関数は、それをホストするのに最適な場所になります!私の回避策は、RGの存在をチェックするPSスクリプトが含まれています。もしそうならば、Importセクションでテンプレートを実行します。そうでなければ、テンプレートなしで実行します。 – Rob

関連する問題