2

New-AzureRmResourceGroupDeployment Powershell コマンドレットを使用して、Azure リソース テンプレートを使用してリソース グループにデプロイしています。これはテスト環境であるため、.bacpac ファイルからデータベースを復元して、データベースに現実的な量のデータをシードしたいと考えています。

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

{
                "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 に通知できる方法を知っている人はいますか?

または、リソース テンプレートを使用してデータベースを復元するためのより良い方法があれば、ぜひ教えてください。

どんな助けやアドバイスも大歓迎です!

前もって感謝します、

ロブ

4

4 に答える 4

0

残念ながら、ビルが言ったように、dacpac ファイルの展開はまだサポートされていませんが、調査中です。現在、bacpac はべき等ではありません。dacpacs がサポートされると、説明していることを達成できるはずです。

于 2016-07-22T21:18:08.140 に答える
0

エラー メッセージに示されているように、空のデータベースにデータをインポートするか、新しいデータベースを作成するときにのみデータをインポートできます。

毎回同じデータベースにデータをインポートしようとしていますか、それとも毎回新しいデータベースにインポートしようとしていますか? 後者の場合は、ARM テンプレートに精通しているチームのメンバーと協力して、テンプレートのエラーを修正します。

于 2016-07-08T19:00:44.353 に答える
0

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

Microsoft の Kirk Evans 氏に言及すると、これはエンジニアが認識している既知の問題です。https://blogs.msdn.microsoft.com/kaevans/2016/03/28/deploy-bacpac-to-azure-sql-database-using-arm/#comment-56605を参照してください

これに対する解決策は、部分的なテンプレートが Web アプリケーションを参照する可能性を利用することです。これにより、データベース デプロイ パーツが発行されます。次に、この Web アプリケーションは、データベースの存在を照会し、結果に基づいて部分的なコンテンツを発行できます。

于 2016-10-07T07:57:36.537 に答える
0

その音から、展開ごとに同じテスト データベースを再作成する必要があります。正しい?

nnuemah が言うように、bacpac をインポートする前に、データベースを空にするか、データベースをまったく持たない必要があります。dacpacファイルの展開のサポート( bacpacファイルのインポートに加えて) を検討していますが、シナリオとしてデータの復元をテストするよりも、べき等スキーマの展開を目的としています。それまでの間、bacpac をインポートするテンプレートをデプロイする前に、帯域外でデータベースを削除できますか?

dacpacs と bacpacs の詳細と相違点については、https ://msdn.microsoft.com/en-us/library/ee210546.aspx をご覧ください。

また、暫定的に機能する可能性のある他のテンプレート オプションも探します。

乾杯、ビル

于 2016-07-08T22:17:10.003 に答える