万博体育苹果iphone版 //www.controladm.com网站 朱莉·勒曼的数据世界万博体育平台 结婚,2019年6月12日00:58:26 +0000 en - us 每小时 1 https://wordpress.org/?v=5.2.1 另一多元化视觉认购销售!//www.controladm.com/pluralsight/subscription-sale/ //www.controladm.com/multiplesight/subscription sale/回复 结婚,2019年6月12日00:55:15+0000 万博体育平台 Pluralsight 订阅 //www.controladm.com/?P=6467 总是有人问“我怎么又错过了?”所以,我希望您不介意我分享另一个Pluralsight订阅销售!再一次,每年的折扣是100美元(通常是299美元,现在是199美元)或年费(通常是449美元,现在349美元)订阅。这也适用于续订。6月19日(11:59山地…Continue readingAnother multiplesight subscription sale!

总是有人问“我怎么又错过了它?”所以我希望你不介意我再分享一个 < img src = " //www.controladm.com/wp-content/uploads/2019/06/june2019promo.jpeg "ALT =“class=“wp-image-6468”级srcset=“//www.controladm.com/wp-content/uploads/2019/06/june2019promo.jpeg 970w,//www.controladm.com/wp content/uploads/2019/06/june2019promo - 300 x77.jpeg 300 w,//www.controladm.com/wp-content/uploads/2019/06/june2019promo-768x198.jpeg 768w“大小= " (max-width: 970 px) 100年大众,970 px”/>>>图> //www.controladm.com/multiplesight/subscription-sale/feed/ 在运行时在Azure上迁移EF核心的快速提示//www.controladm.com/data-access/quick-tips-for-migrating-ef-core-at-runtime-on-azure/ //www.controladm.com/data access/quick tips for migrating ef core at runtime on azure/comments 结婚,2019年5月22日14:57:14 +0000 万博体育平台 数据访问 //www.controladm.com/?P=6462 关于我的EF Core 2 Pluralsight入门课程的一个问题是:你好,朱莉,谢谢你的课程。我有个问题。您能否建议将代码先迁移部署到生产数据库(azure)的最佳实践是什么?我的意思是我已经使用代码首先创建了ASP.NET核心MVC和EF.CORE应用程序…Continue readingQuick tips for migrating ef core at runtime on azure

Hi Julie
感谢您的课程。我有个问题。您能否建议将代码先迁移部署到生产数据库(azure)的最佳实践是什么?我的意思是我已经创建了.asp.netcore mvc and ef.core application using the code first migration approach.在部署到Azure之后。如果我在我们的代码优先方法中更改了任何模式,我如何更新生产数据库中的模式(而不丢失生产数据库中的数据).>

my response with a different ideas I thought were worth sharing outside of the course discussion.(注意这只是高层次的)

For simple solutions,我使用的一个路径是在启动时调用database.migrate。VS发布工作流有一个选项,您可以在发布应用程序时选中该选项以应用迁移。您可以在ms-docs中看到它,用于:

,或者您可以在program.cs文件中通过编程来实现,该文件将执行任何需要的迁移。在我的A< A rel="noreferrer noopener"中有一个例子aria label=“2019年4月,msdn杂志文章(在新选项卡中打开)”href=“https://msdn.microsoft.com/magazine/mt833405”target=“_blank”>2019年4月msdn杂志文章。如果你需要更健壮的,然后,您可以使用EF核心迁移生成脚本(可能是幂等脚本),然后将它们包含到您的更新中,并使用可以应用这些脚本的工具。如果你使用红门工具,也许他们的SQL变更自动化工具。另一种工具是迁移工具,如flywaydb(flywaydb.org)或liquidbase。我用过集装箱的Flyway。这是我最近在使用它的地方做的一次会议演讲:位。ly/30ahgar>

>

//www.controladm.com/data-access/quick-tips-for-migrating-ef-core-at-runtime-on-azure/feed/
发布一个包含VS2017机密的单一Image Docker容器并在Azure上运行它//www.controladm.com/docker/publishdockertoazure/ //www.controladm.com/docker/publishdockertoazure/评论 星期四,2019年5月02日15:35:57 +0000 万博体育平台 码头工人 //www.controladm.com/?P=6445 (事先书面,但在5月2日相关文章最终发布时)我刚刚完成了一个由三部分组成的系列文章,内容是构建一个容器化的ASP.NET核心API,该API使用EF核心进行数据持久化。所有这些都是在VS2017中完成的,我利用了VS2017工具…… 发布了一个包含来自VS2017的秘密的图像Docker容器,并在Azure上运行它< span class="meta-nav">→ < p >(书面提前,但是,当相关文章最终可用时,发布于5月2日。)

I've just finished writing a three-part series on building a containerized asp.net core a p i that uses ef core for its data persistence.所有这些都是在vs 2017中完成的,我利用了vs2017 tools for docker。

The article series will be in the april,5月和6月发行的msdn杂志。

part 1:ef core in a docker containerized app,2019年4月

Part 2: ef core in a docker containerized app,2019年5月尽管我努力工作。好,部署非常简单,但是为了处理存储用于连接到我的Azure SQL数据库的密码,还有一些新的步骤需要完成。我将在这篇博文中转载这些步骤。

my api使用ef core并以一个Azure SQL数据库为目标。无论我在本地调试IIS还是Kestrel,在Docker容器内进行本地调试或从服务器或云运行应用程序,我始终可以访问该数据库。

这意味着我有一个要处理的连接字符串,但我想将密码保密。

The structure of the solution is here.我的ASP.NET核心API项目是DataApidocker。因为我使用Docker工具添加容器编排,我在Docker Compose解决方案中有另一个文件夹。

图像

I go into detail in part 2 of the article(the one in the May 2019 issue)but the bottom line is that I use a docker environment variable in my docker-compose.yml file.

version:'3.4'.

services:
dataapidocker:
image:$docker_registry-dataapidocker
build:
context:.
dockerfile:dataapidocker/dockerfile
environment:
–db_pw

in the environment mapping,我有一个序列项,我在其中定义db_pw键,但不包括值。因为那里没有价值,Docker将查看主机的环境变量。因为我只是在调试,我在系统上用密码值创建了一个临时环境变量,当我从VS2017调试或运行应用程序时,将找到密码变量。该环境变量被传递到正在运行的容器中,我的应用程序具有读取该变量的代码,并在teh连接字符串中包含该密码。

so its all self-contained,漂亮整洁。

将图像发布到Azure的ACI注册表中。

Once you've got the app working it's time to publish it.但我们用的是Docker,所以你不会发布这个应用程序,但可以为你运行应用程序的Docker图像。Docker工具也会对此有所帮助。

右键单击项目并选择发布。

这篇博客文章的我的目标是将图像放入Azure容器注册表,所以这是我的选择。您可以在azure帐户中拥有多个容器注册中心。您可以在一个注册表中存储任意数量的图像。好,可能会有技术或财政上的限制,但问题是,注册表中可以有多个图像。我不是来这里为如何管理Azure财务提供建议的,只是如何完成任务。

这是我让发布工具为我创建的注册表的概述页面。我圈出了链接以查看存储库,其中是您的图像可访问的位置。

You may have different versions of a special image so each“set”是一个不同的存储库。我有三个我一直在试验的存储库。

back in Visual Studio,在浏览了发布工具关于创建新存储库的问题之后,最后一步是进行发布,发布将构建图像并将其推送到目标存储库。请记住,您希望将VS2017设置为运行版本构建,不是调试版本。

如果它是您第一次将此映像推送到存储库,工具还将推送ASP.NET核心SDK和运行时映像,这些映像列在应用程序的DockerFile中。

I was surved to see this,想知道为什么Azure不只是从Docker Hub上获取它们,为什么我要直接上传那些大文件。当然,我在推特上发了一条困惑的信息:

在Microsoft,Rich Lander和Steve Lasker首先确认了这是预期的行为。

在这里,我的目标范围之外,还有更多的故事,但是它已经超出了我的目标范围。

从图像

运行容器这个注册表的一个很酷的特性是,您可以右键单击并运行一个图像。如果你不想安排一些图像,这很好,而且与我的情况相匹配。此映像确实独立运行。

右键单击该映像并选择“运行实例”。Azure将创建一个容器并以Azure容器实例。尽管首先需要为实例定义规范。

如果容器是一个简单的应用程序,那么您不必创建和管理一个虚拟机来运行容器,所以它有点神奇。

What about environment variables for the container instance?

The instance will run but the gadges controller that needs to read from the azure sql database will fail because we haven't provided the password which the container expected to be provided through the host's environment variable.对于我的图像,右键单击并运行还不够。

这是我必须做大量阅读的地方,研究和实验,直到我找到解决方案。(请记住,如果我在自己设计的虚拟机上运行此程序,当您手动调用docker run时,只需将变量传入即可。

有两种方法可以向容器实例提供环境变量。

one,通过门户网站,表示不是右键单击图像,您需要首先在Azure中创建一个新的容器实例并指向该映像。该路径允许您在配置中分配最多3个环境变量:
< / > < / p > < p类=“推文文”data partner=“tweetdeck”>另一种方法是通过Azure的PowerShell命令(new-azContainerGroup)或Azure CLI(az container create)创建/运行实例,并将键值对作为PowerShell命令的环境变量参数传递。但这里还有一个问题,那就是将密码存储在Azure密钥库中,然后从那里读取它,将其传递到您运行容器实例的命令中。

I'll do all this from the azure portal's cloud shell.

new azcontainergroup`
-resourcegroupnamemyresourcegroup`
-registrycredentialmycreds`
-namecontainernametocreateorupdate`
-imagemyimageuri`
-restartpolicy onfailure`
-environmentvariablemystoredvarialabes`
-ipAddressType public

Using an on the fly variable to pass into the container

I'm going to do a first pass creating an variable on the fly to pass to environmentvariable.然后,我将向您展示如何使用Azure密钥库

environmentvariable expects a hashtable.

create a new variable(i'll call it envvars in homage to the resource where i learned this)and assign a single key value pair:

$envvars=@'db w'='eiluj'.

the other studically part正在提供访问注册表中映像的凭据。在使用门户创建容器时,我们不必这样做,因为我们已经提供了它们。但现在我需要提供这些信息。

您需要存储库中的用户名和密码:

then you can use powershell to create a secure string from the password and then use that secure string along with the username to create a powershell credential object.

- as明文-Force

data partner=“tweetdeck”>secpasswd美元)< / span > < / p > < p类=“推文文”data partner=“tweetdeck”>now you can pass the credentials to the registrycredential.

下面是我使用为凭证和环境变量设置的变量时命令的外观。

new azcontainergroup`
-resourcegroupnamemyresourcegroup`
-registrycredentialmycred`
-namecontainernametocreateorupdate`
-imagemyimageuri`
-restartpolicy onfailure`
-environmentvariable$envvars`
-ipaddresstype public

tip:if you have multiple subscriptions,请确保指向的是目标资源组所在的正确资源组。

tip:a cool thing you can do in cloud shell is type dir to list your subscriptions and then use cd to get into the correct one!签出PowerShell Cloud Shell Quick Startfor details

.

命令将返回运行实例的一些详细信息,包括它的公共IP地址(您也可以通过浏览门户中的容器实例获得该地址)。我将defawult值控制器留在我的测试API中,因为它们不依赖外部资源来工作。所以我浏览到ipaddress/api/values来查看控制器的运行情况。在正常情况下,使用EF核心和Azure SQL数据库(在ipaddress/api/杂志)的控制器也应该工作。

tip:if like me,你摆弄数据库来体验因果关系,记住,在我的示例代码中,在应用程序启动时迁移数据库。在容器中包含它的情况下,这意味着当容器实例运行时。所以如果你运行容器,然后删除数据库,在容器再次旋转之前,不会再次看到db。停止和重新启动具有相同的效果。当然这只是为了测试一下,不是生产!再一次,一件事让我卡住了一个多小时,直到我有了“啊哈”的时刻。

创建一个密钥库并添加我的密码。

如果您想进一步挖掘,这里还有另一个资源: https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/key-vault < / >。< / p > < p类=“推文文”data partner=“tweetdeck”>that will get a default access policy.

< / > < / p > < p类=“推文文”data partner=“tweetdeck”>然后我必须编辑策略以启用各种功能。我只是启用了一切,因为它是一个演示!

< / > < / p > < p类=“推文文”data partner=“tweetdeck”>这只是一种了解该功能的方法,但老实说,这些小步骤不适合做严肃的工作。我会为制作做更多的学习和研究。

tip:您创建的每一项新服务都将对您的Azure帐户收取费用。我只是在这里进行实验和学习,所以使用我的Visual Studio订阅中的免费学分。

Now I was able to add a secret into the key vault and I'm do back in cloud shell via powershell.

Then I added this to the new key vault.

set azkeyvaultsecret-vaultname'portalcreatedvault'-name'dbpw'-secretvalue$secdbpw.

然后您可以在门户中看到这个秘密。

现在有了秘密,我可以读取它并在创建容器实例时使用它。

$ getsecret = (Get-AzKeyVaultSecret -vaultName“PortalCreatedVault”-name“dbpw”).secretvaluetext

我确信我还需要利用更多的层,因为现在我又回到了纯文本输入密码,它存储在$getsecret变量中。但在我的实验中,这就足够了。

my container会被创建,数据库密码会传递到container实例中,以便在需要新的数据库连接与数据库交互时使用。

现在我需要好好睡一觉!