Her şeyi otomatikleştirin (Azure ile gerçek hayatta bulut uygulamaları oluşturma)Automate Everything (Building Real-World Cloud Apps with Azure)

, Mike te son, Rick Anderson, Tom Dykstra tarafındanby Mike Wasson, Rick Anderson, Tom Dykstra

Onarma projesini indirin veya E-kitabı indirinDownload Fix It Project or Download E-book

Azure e-book Ile gerçek dünyada bulut uygulamaları oluşturma , Scott Guthrie tarafından geliştirilen bir sunuyu temel alır.The Building Real World Cloud Apps with Azure e-book is based on a presentation developed by Scott Guthrie. Bulut için Web Apps 'i başarılı bir şekilde geliştirmeye yardımcı olabilecek 13 desen ve uygulamaları açıklar.It explains 13 patterns and practices that can help you be successful developing web apps for the cloud. E-kitaba giriş için ilk bölümebakın.For an introduction to the e-book, see the first chapter.

Tüm yazılım geliştirme projeleri için, ancak özellikle de bulut projelerine uygulanabilecek ilk üç model.The first three patterns we'll look at actually apply to any software development project, but especially to cloud projects. Bu model, geliştirme görevlerini otomatikleştirme ile ilgilidir.This pattern is about automating development tasks. El ile gerçekleştirilen işlemlerin yavaş ve hataya açık olması nedeniyle önemli bir konudur; mümkün olduğunca çoğunu otomatik hale getirmek, hızlı, güvenilir ve çevik iş akışını ayarlamanıza yardımcı olur.It's an important topic because manual processes are slow and error-prone; automating as many of them as possible helps set up a fast, reliable, and agile workflow. Şirket içi bir ortamda otomatikleştirilmesi zor veya imkansız olan birçok görevi kolayca otomatikleştirebileceğiniz için, bulut geliştirmesi için benzersiz bir öneme sahiptir.It's uniquely important for cloud development because you can easily automate many tasks that are difficult or impossible to automate in an on-premises environment. Örneğin, yeni Web sunucusu ve arka uç VM 'Leri, veritabanları, BLOB depolama (dosya depolaması), kuyruklar vb. dahil olmak üzere tüm test ortamlarını ayarlayabilirsiniz.For example, you can set up whole test environments including new web server and back-end VMs, databases, blob storage (file storage), queues, etc.

DevOps Iş akışıDevOps Workflow

Giderek, "DevOps" terimini duydunuz.Increasingly you hear the term "DevOps." Yazılım verimli bir şekilde geliştirmek için geliştirme ve işlem görevlerini tümleştirmeniz gereken bir tanımanın geliştirildiği bir terimdir.The term developed out of a recognition that you have to integrate development and operations tasks in order to develop software efficiently. Etkinleştirmek istediğiniz iş akışı türü, bir uygulama geliştirebileceğiniz, bunu dağıtabileceğiniz, onun üretim kullanımından öğrendiğiniz, öğrendiklerinize yanıt olarak değiştirebileceğiniz ve döngüyü hızlı ve güvenilir bir şekilde tekrarlamanız için tek bir uygulamadır.The kind of workflow you want to enable is one in which you can develop an app, deploy it, learn from production usage of it, change it in response to what you've learned, and repeat the cycle quickly and reliably.

Bazı başarılı bulut geliştirme ekipleri, bir günde birden çok kez canlı ortama dağıtılır.Some successful cloud development teams deploy multiple times a day to a live environment. Azure ekibi, her 2-3 ayda bir büyük güncelleştirmeyi dağıtmak için kullanılır, ancak şimdi her 2-3 haftada bir 2-3 günde bir ve ana yayınlar için küçük güncelleştirmeleri yayınlar.The Azure team used to deploy a major update every 2-3 months, but now it releases minor updates every 2-3 days and major releases every 2-3 weeks. Bu temposunda e alma, müşteri geri bildirimlerine yanıt almanıza yardımcı olur.Getting into that cadence really helps you be responsive to customer feedback.

Bunu yapmak için, tekrarlanabilir, güvenilir, öngörülebilir ve süresi düşük olan bir geliştirme ve dağıtım döngüsünü etkinleştirmeniz gerekir.In order to do that, you have to enable a development and deployment cycle that is repeatable, reliable, predictable, and has low cycle time.

DevOps iş akışı

Diğer bir deyişle, bir özellik için bir fikriniz olduğunda ve müşteriler onu kullanırken ve geri bildirim sağlanması mümkün olduğunca kısa olmalıdır.In other words, the period of time between when you have an idea for a feature and when the customers are using it and providing feedback must be as short as possible. İlk üç desen – her şeyi, kaynak denetimi ve sürekli tümleştirmeyi ve teslimi otomatikleştirin. bu tür bir işlemi etkinleştirmek için önerdiğimiz en iyi yöntemler vardır.The first three patterns – automate everything, source control, and continuous integration and delivery -- are all about best practices that we recommend in order to enable that kind of process.

Azure Yönetim betikleriAzure management scripts

Bu e-kitaba girişbölümünde, Azure yönetim portalı Web tabanlı konsolu gördünüz.In the introduction to this e-book, you saw the web-based console, the Azure Management Portal. Yönetim Portalı, Azure 'da dağıttığınız tüm kaynakları izlemenize ve yönetmenize olanak sağlar.The management portal enables you to monitor and manage all of the resources that you have deployed on Azure. Web uygulamaları ve sanal makineler gibi hizmetleri oluşturup silmenin yanı sıra bu hizmetleri yapılandırmak, hizmet işlemlerini izlemek ve benzeri işlemler için kolay bir yoldur.It's an easy way to create and delete services such as web apps and VMs, configure those services, monitor service operation, and so forth. Harika bir araçtır, ancak kullanmak el ile gerçekleştirilen bir işlemdir.It's a great tool, but using it is a manual process. Herhangi bir boyutta bir üretim uygulaması geliştiriyorsanız ve özellikle bir ekip ortamında, Azure 'u öğrenmek ve araştırmak için Portal kullanıcı arabiriminden gidip kaldı yaptığınız işlemleri otomatikleştirebilmeniz önerilir.If you're going to develop a production application of any size, and especially in a team environment, we recommend that you go through the portal UI in order to learn and explore Azure, and then automate the processes that you'll be doing repetitively.

Yönetim portalında veya Visual Studio 'da el ile yapabileceğiniz her şey, REST yönetim API 'SI çağırarak da yapılabilir.Nearly everything that you can do manually in the management portal or from Visual Studio can also be done by calling the REST management API. Windows PowerShellkullanarak komut dosyaları yazabilir veya Chef veya pupevcil hayvangibi açık kaynak bir çerçeve kullanabilirsiniz.You can write scripts using Windows PowerShell, or you can use an open source framework such as Chef or Puppet. Bash komut satırı aracını bir Mac veya Linux ortamında da kullanabilirsiniz.You can also use the Bash command-line tool in a Mac or Linux environment. Azure 'un tüm bu farklı ortamlara yönelik betik API 'Leri vardır ve betik yerine kod yazmak istemeniz durumunda .NET Yönetim API 'si vardır.Azure has scripting APIs for all those different environments, and it has a .NET management API in case you want to write code instead of script.

BT BT uygulaması için, bir test ortamı oluşturma ve projeyi bu ortama dağıtma işlemlerini otomatikleştiren bazı Windows PowerShell betikleri oluşturduğumuz ve bu betiklerin bazı içeriğini inceleyeceğiz.For the Fix It app we've created some Windows PowerShell scripts that automate the processes of creating a test environment and deploying the project to that environment, and we'll review some of the contents of those scripts.

Ortam oluşturma betiğiEnvironment creation script

Bakacağımız ilk betik, New-AzureWebsiteEnv. ps1olarak adlandırılmıştır.The first script we'll look at is named New-AzureWebsiteEnv.ps1. BT BT uygulamasını test etmek için dağıtabileceğiniz bir Azure ortamı oluşturur.It creates an Azure environment that you can deploy the Fix It app to for testing. Bu betiğin gerçekleştirdiği ana görevler şunlardır:The main tasks that this script performs are the following:

  • Bir web uygulaması oluşturun.Create a web app.
  • Depolama hesabı oluşturma.Create a storage account. (Blob 'lar ve kuyruklar için gereklidir, sonraki bölümlerde göreceğiniz gibi.)(Required for blobs and queues, as you'll see in later chapters.)
  • Bir SQL veritabanı sunucusu ve iki veritabanı oluşturun: bir uygulama veritabanı ve bir üyelik veritabanı.Create a SQL Database server and two databases: an application database, and a membership database.
  • Azure 'da, uygulamanın depolama hesabına ve veritabanlarına erişmek için kullanacağı ayarları depolayın.Store settings in Azure that the app will use to access the storage account and databases.
  • Dağıtımı otomatikleştirmek için kullanılacak ayar dosyaları oluşturun.Create settings files that will be used to automate deployment.

Betiği çalıştırınRun the script

Note

Bu bölümde, betikleri çalıştırmak için girdiğiniz betiklerin ve komutların örnekleri gösterilmektedir.This part of the chapter shows examples of scripts and the commands that you enter in order to run them. Bu bir demo ve betikleri çalıştırmak için bilmeniz gereken her şeyi sağlamaz.This a demo and doesn't provide everything you need to know in order to run the scripts. Adım adım nasıl yapılır yönergeleri için bkz. ek: BT örneğini onarma örnek uygulaması.For step-by-step how-to-do-it instructions, see Appendix: The Fix It Sample Application.

Azure hizmetlerini yöneten bir PowerShell betiğini çalıştırmak için Azure PowerShell konsolunu yüklemeli ve Azure aboneliğinizle çalışacak şekilde yapılandırmalısınız.To run a PowerShell script that manages Azure services you have to install the Azure PowerShell console and configure it to work with your Azure subscription. Ayarladıktan sonra, aşağıdaki gibi bir komutla BT ortamı oluşturma komut dosyasını çalıştırın:Once you're set up, you can run the Fix It environment creation script with a command like this one:

.\New-AzureWebsiteEnv.ps1 -Name <websitename> -SqlDatabasePassword <password>

Name parametresi, veritabanı ve depolama hesapları oluşturulurken kullanılacak adı belirtir ve SqlDatabasePassword parametresi, SQL veritabanı için oluşturulacak yönetici hesabının parolasını belirtir.The Name parameter specifies the name to be used when creating the database and storage accounts, and the SqlDatabasePassword parameter specifies the password for the admin account that will be created for SQL Database. Daha sonra bakabilmemiz için kullanabileceğiniz başka parametreler de vardır.There are other parameters you can use that we'll look at later.

PowerShell penceresi

Komut dosyası tamamlandıktan sonra, yönetim portalı 'nda oluşturulan ' de görebilirsiniz.After the script finishes you can see in the management portal what was created. İki veritabanı bulacaksınız:You'll find two databases:

Veritabanları

Depolama hesabı:A storage account:

Depolama hesabı

Ve bir Web uygulaması:And a web app:

Web sitesi

Web uygulamasının yapılandırma sekmesinde, BT BT uygulaması için ayarlanan depolama hesabı AYARLARıNA ve SQL veritabanı bağlantı dizelerine sahip olduğunu görebilirsiniz.On the Configure tab for the web app, you can see that it has the storage account settings and SQL database connection strings set up for the Fix It app.

appSettings ve connectionStrings

Otomasyon klasörü artık <bir WebSiteName>. pubxml dosyası içeriyor.The Automation folder now also contains a <websitename>.pubxml file. Bu dosya, MSBuild 'in, uygulamayı yeni oluşturulan Azure ortamına dağıtmak için kullanacağı ayarları depolar.This file stores settings that MSBuild will use to deploy the application to the Azure environment that was just created. Örneğin:For example:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish>http://fixitdemo.azurewebsites.net</SiteUrlToLaunchAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <MSDeployServiceURL>waws-prod-bay-003.publish.azurewebsites.windows.net:443</MSDeployServiceURL>
    <DeployIisAppPath>fixitdemo</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <UserName>$fixitdemo</UserName>
    <PublishDatabaseSettings></PublishDatabaseSettings>
  </PropertyGroup>
</Project>

Gördüğünüz gibi, betik tam bir test ortamı oluşturdu ve tüm işlem yaklaşık 90 saniye içinde yapılır.As you can see, the script has created a complete test environment, and the whole process is done in about 90 seconds.

Takımınızda başka birisi bir test ortamı oluşturmak istiyorsa, yalnızca betiği çalıştırabilir.If someone else on your team wants to create a test environment, they can just run the script. Bu yalnızca hızlıdır, ancak aynı zamanda, kullanmakta olduğunuz bir ortamı kullandığından emin olabilirler.Not only is it fast, but also they can be confident that they are using an environment identical to the one you're using. Herkesin yönetim portalı Kullanıcı arabirimini kullanarak el ile ayarlama yapacağından emin olmanız gerekir.You couldn't be quite as confident of that if everyone was setting things up manually by using the management portal UI.

Betiklerin bir görünümüA look at the scripts

Bu işi gerçekleştiren üç komut dosyası vardır.There are actually three scripts that do this work. Komut satırından bir tane çağırır ve görevlerden bazılarını yapmak için otomatik olarak diğerini kullanır:You call one from the command line and it automatically uses the other two to do some of the tasks:

  • New-AzureWebSiteEnv. ps1 , ana betiktir.New-AzureWebSiteEnv.ps1 is the main script.

    • New-AzureStorage. ps1 , depolama hesabı oluşturur.New-AzureStorage.ps1 creates the storage account.
    • New-AzureSql. ps1 veritabanlarını oluşturur.New-AzureSql.ps1 creates the databases.

Ana betikteki parametrelerParameters in the main script

New-AzureWebSiteEnv. ps1ana betiği çeşitli parametreleri tanımlar:The main script, New-AzureWebSiteEnv.ps1, defines several parameters:

[CmdletBinding(PositionalBinding=$True)]
Param(
    [Parameter(Mandatory = $true)]
    [ValidatePattern("^[a-z0-9]*$")]
    [String]$Name,                             
    [String]$Location = "West US",             
    [String]$SqlDatabaseUserName = "dbuser",   
    [String]$SqlDatabasePassword,              
    [String]$StartIPAddress,                   
    [String]$EndIPAddress                      
    )

İki parametre gereklidir:Two parameters are required:

  • Betiğin oluşturduğu Web uygulamasının adı.The name of the web app that the script creates. (Bu URL için de kullanılır: <name>.azurewebsites.net.)(This is also used for the URL: <name>.azurewebsites.net.)
  • Veritabanı sunucusunun oluşturduğu yeni yönetici kullanıcı için parola.The password for the new administrative user of the database server that the script creates.

İsteğe bağlı parametreler, veri merkezi konumunu (varsayılan olarak "Batı ABD"), veritabanı sunucusu yönetici adını (varsayılan olarak "dbuser") ve veritabanı sunucusu için bir güvenlik duvarı kuralını belirtmenize olanak tanır.Optional parameters enable you to specify the data center location (defaults to "West US"), database server administrator name (defaults to "dbuser"), and a firewall rule for the database server.

Web uygulaması oluşturmaCreate the web app

Komut dosyası ilk şey, Web uygulaması adı ve konum parametresi değerlerine geçerek New-AzureWebsite cmdlet 'ini çağırarak Web uygulamasını oluşturmaktır:The first thing the script does is create the web app by calling the New-AzureWebsite cmdlet, passing in to it the web app name and location parameter values:

# Create a new website
$website = New-AzureWebsite -Name $Name -Location $Location -Verbose

Depolama hesabı oluşturmaCreate the storage account

Ardından ana betik, depolama hesabı adı için " <WebSiteName> Storage" öğesini ve Web uygulamasıyla aynı veri merkezi konumunu belirterek New-AzureStorage. ps1 betiğini çalıştırır.Then the main script runs the New-AzureStorage.ps1 script, specifying "<websitename> storage" for the storage account name, and the same data center location as the web app.

$storageAccountName = $Name + "storage"
 
$storage = $scriptPath\New-AzureStorage.ps1" -Name $storageAccountName -Location $Location

New-AzureStorage. ps1 , depolama hesabını oluşturmak için New-AzureStorageAccount cmdlet 'ini çağırır ve hesap adını ve erişim anahtarı değerlerini döndürür.New-AzureStorage.ps1 calls the New-AzureStorageAccount cmdlet to create the storage account, and it returns the account name and access key values. Depolama hesabındaki bloblara ve kuyruklara erişmek için uygulamanın bu değerlere ihtiyacı olacaktır.The application will need these values in order to access the blobs and queues in the storage account.

# Create a new storage account
New-AzureStorageAccount -StorageAccountName $Name -Location $Location -Verbose
 
# Get the access key of the storage account
$key = Get-AzureStorageKey -StorageAccountName $Name
 
# Generate the connection string of the storage account
$connectionString = "BlobEndpoint=http://$Name.blob.core.windows.net/;QueueEndpoint=http://$Name.queue.core.windows.net/;TableEndpoint=http://$Name.table.core.windows.net/;AccountName=$Name;AccountKey=$primaryKey"
 
#Return a hashtable of storage account values
Return @{AccountName = $Name; AccessKey = $key.Primary; ConnectionString = $connectionString}

Her zaman yeni bir depolama hesabı oluşturmak istemeyebilirsiniz; isteğe bağlı olarak, var olan bir depolama hesabını kullanmak üzere yönlendiren bir parametre ekleyerek betiği geliştirebilirsiniz.You might not always want to create a new storage account; you could enhance the script by adding a parameter that optionally directs it to use an existing storage account.

Veritabanlarını oluşturmaCreate the databases

Ana betik daha sonra varsayılan veritabanı ve Güvenlik Duvarı kural adlarını ayarladıktan sonra, New-AzureSql. ps1veritabanı oluşturma betiğini çalıştırır:The main script then runs the database creation script, New-AzureSql.ps1, after setting up default database and firewall rule names:

$sqlAppDatabaseName = "appdb"
$sqlMemberDatabaseName = "memberdb"
$sqlDatabaseServerFirewallRuleName = $Name + "rule"
# Create a SQL Azure database server, app and member databases
$sql = $scriptPath\New-AzureSql.ps1 `
    -AppDatabaseName $sqlAppDatabaseName `
    -MemberDatabaseName $sqlMemberDatabaseName `
    -UserName $SqlDatabaseUserName `
    -Password $SqlDatabasePassword `
    -FirewallRuleName $sqlDatabaseServerFirewallRuleName `
    -StartIPAddress $StartIPAddress `
    -EndIPAddress $EndIPAddress `
    -Location $Location

Veritabanı oluşturma betiği, dev makinesinin IP adresini alır ve bir güvenlik duvarı kuralı ayarlayarak geliştirme makinesinin sunucuya bağlanıp yönetmesine izin verebilir.The database creation script retrieves the dev machine's IP address and sets a firewall rule so the dev machine can connect to and manage the server. Veritabanı oluşturma betiği daha sonra veritabanlarını ayarlamaya yönelik birkaç adımdan geçer:The database creation script then goes through several steps to set up the databases:

  • New-AzureSqlDatabaseServer cmdlet 'ini kullanarak sunucuyu oluşturur.Creates the server by using the New-AzureSqlDatabaseServer cmdlet.

    $databaseServer = New-AzureSqlDatabaseServer -AdministratorLogin $UserName -AdministratorLoginPassword $Password -Location $Location
    
  • Geliştirme makinesinin sunucuyu yönetmesini ve Web uygulamasının bu sunucuya bağlanmasını sağlamak için güvenlik duvarı kuralları oluşturur.Creates firewall rules to enable the dev machine to manage the server and to enable the web app to connect to it.

    # Create a SQL Azure database server firewall rule for the IP address of the machine in which this script will run
    # This will also whitelist all the Azure IP so that the website can access the database server
    New-AzureSqlDatabaseServerFirewallRule -ServerName $databaseServerName -RuleName $FirewallRuleName -StartIpAddress $StartIPAddress 
    -EndIpAddress $EndIPAddress -Verbose
    New-AzureSqlDatabaseServerFirewallRule -ServerName $databaseServer.ServerName -AllowAllAzureServices 
    -RuleName "AllowAllAzureIP" -Verbose
    
  • New-AzureSqlDatabaseServerContext cmdlet 'ini kullanarak sunucu adı ve kimlik bilgilerini içeren bir veritabanı bağlamı oluşturur.Creates a database context that includes the server name and credentials, by using the New-AzureSqlDatabaseServerContext cmdlet.

    # Create a database context which includes the server name and credential
    # These are all local operations. No API call to Azure
    $credential = New-PSCredentialFromPlainText -UserName $UserName -Password $Password
    $context = New-AzureSqlDatabaseServerContext -ServerName $databaseServer.ServerName -Credential $credential
    

    New-PSCredentialFromPlainText, parolayı şifrelemek için ConvertTo-SecureString cmdlet 'ini çağıran ve Get-Credential cmdlet 'inin döndürdüğü aynı türdeki bir PSCredential nesnesi döndüren betikteki bir işlevdir.New-PSCredentialFromPlainText is a function in the script that calls the ConvertTo-SecureString cmdlet to encrypt the password and returns a PSCredential object, the same type that the Get-Credential cmdlet returns.

  • New-AzureSqlDatabase cmdlet 'ini kullanarak uygulama veritabanını ve üyelik veritabanını oluşturur.Creates the application database and the membership database by using the New-AzureSqlDatabase cmdlet.

    # Use the database context to create app database
    New-AzureSqlDatabase -DatabaseName $AppDatabaseName -Context $context -Verbose
     
    # Use the database context to create member database
    New-AzureSqlDatabase -DatabaseName $MemberDatabaseName -Context $context -Verbose
    
  • Her veritabanı için bir bağlantı dizesi oluşturmak üzere yerel olarak tanımlanmış bir işlevi çağırır.Calls a locally defined function to create a connection string for each database. Uygulama veritabanlarına erişmek için bu bağlantı dizelerini kullanacaktır.The application will use these connection strings to access the databases.

    $appDatabaseConnectionString = Get-SQLAzureDatabaseConnectionString -DatabaseServerName $databaseServerName -DatabaseName $AppDatabaseName -UserName $UserName -Password $Password
    $memberDatabaseConnectionString = Get-SQLAzureDatabaseConnectionString -DatabaseServerName $databaseServerName -DatabaseName $MemberDatabaseName -UserName $UserName -Password $Password
    

    Get-SQLAzureDatabaseConnectionString, içinde sağlanan parametre değerlerinden bağlantı dizesini oluşturan betikte tanımlanan bir işlevdir.Get-SQLAzureDatabaseConnectionString is a function defined in the script that creates the connection string from the parameter values supplied to it.

    Function Get-SQLAzureDatabaseConnectionString
    {
        Param(
            [String]$DatabaseServerName,
            [String]$DatabaseName,
            [String]$UserName,
            [String]$Password
        )
    
        Return "Server=tcp:$DatabaseServerName.database.windows.net,1433;Database=$DatabaseName;User ID=$UserName@$DatabaseServerName;Password=$Password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
    }
    
  • Veritabanı sunucusu adı ve bağlantı dizelerini içeren bir karma tablo döndürür.Returns a hash table with the database server name and the connection strings.

    Return @{ `
        Server = $databaseServer.ServerName; UserName = $UserName; Password = $Password; `
        AppDatabase = @{Name = $AppDatabaseName; ConnectionString = $appDatabaseConnectionString}; `
        MemberDatabase = @{Name = $MemberDatabaseName; ConnectionString = $memberDatabaseConnectionString} `
    }
    

BT uygulaması, ayrı üyelik ve uygulama veritabanlarını kullanır.The Fix It app uses separate membership and application databases. Ayrıca, hem üyelik hem de uygulama verilerinin tek bir veritabanına yerleştirilme olasılığı vardır.It's also possible to put both membership and application data in a single database.

Mağaza uygulama ayarları ve bağlantı dizeleriStore app settings and connection strings

Azure, Web. config dosyasındaki appSettings veya connectionStrings koleksiyonlarını okumayı denediğinde uygulamaya döndürülen ayarları ve bağlantı dizelerini otomatik olarak geçersiz kılan bir özelliğe sahiptir.Azure has a feature that enables you to store settings and connection strings that automatically override what is returned to the application when it tries to read the appSettings or connectionStrings collections in the Web.config file. Bu, dağıtırken Web. config dönüştürmeleri uygulamanın bir alternatifidir.This is an alternative to applying Web.config transformations when you deploy. Daha fazla bilgi için bu e-kitapta daha sonra hassas verileri Azure 'Da depolama bölümüne bakın.For more information, see Store sensitive data in Azure later in this e-book.

Ortam oluşturma betiği, Azure 'da çalıştığı zaman, uygulamanın depolama hesabına ve veritabanlarına erişmesi gereken tüm appSettings ve connectionStrings değerlerini depolar.The environment creation script stores in Azure all of the appSettings and connectionStrings values that the application needs to access the storage account and databases when it runs in Azure.

# Configure app settings for storage account and New Relic
$appSettings = @{ `
    "StorageAccountName" = $storageAccountName; `
    "StorageAccountAccessKey" = $storage.AccessKey; `
    "COR_ENABLE_PROFILING" = "1"; `
    "COR_PROFILER" = "{71DA0A04-7777-4EC6-9643-7D28B46A8A41}"; `
    "COR_PROFILER_PATH" = "C:\Home\site\wwwroot\newrelic\NewRelic.Profiler.dll"; `
    "NEWRELIC_HOME" = "C:\Home\site\wwwroot\newrelic" `
}
# Configure connection strings for appdb and ASP.NET member db
$connectionStrings = ( `
    @{Name = $sqlAppDatabaseName; Type = "SQLAzure"; ConnectionString = $sql.AppDatabase.ConnectionString}, `
    @{Name = "DefaultConnection"; Type = "SQLAzure"; ConnectionString = $sql.MemberDatabase.ConnectionString}
)
# Add the connection string and storage account name/key to the website
Set-AzureWebsite -Name $Name -AppSettings $appSettings -ConnectionStrings $connectionStrings

Yeni relik , izleme ve telemetri bölümünde gösterdiğimiz bir telemetri çerçevesidir.New Relic is a telemetry framework that we demonstrate in the Monitoring and Telemetry chapter. Ortam oluşturma betiği, yeni relik ayarlarını da kullandığından emin olmak için Web uygulamasını yeniden başlatır.The environment creation script also restarts the web app to make sure that it picks up the New Relic settings.

# Restart the website to let New Relic hook kick in
Restart-AzureWebsite -Name $websiteName

Dağıtım için hazırlanmaPreparing for deployment

İşlemin sonunda, ortam oluşturma betiği dağıtım betiği tarafından kullanılacak dosyaları oluşturmak için iki işlevi çağırır.At the end of the process, the environment creation script calls two functions to create files that will be used by the deployment script.

Bu işlevlerden biri bir yayımlama profili (<WebSiteName>. pubxml dosyası) oluşturur.One of these functions creates a publish profile (<websitename>.pubxml file). Kod, yayımlama ayarlarını almak için Azure REST API çağırır ve bilgileri bir . publishsettings dosyasına kaydeder.The code calls the Azure REST API to get the publish settings, and it saves the information in a .publishsettings file. Daha sonra, yayımlama profilini içeren . pubxml dosyasını oluşturmak için bu dosyadaki bilgileri bir şablon dosyası (pubxml. Template) ile birlikte kullanır.Then it uses the information from that file along with a template file (pubxml.template) to create the .pubxml file that contains the publish profile. Bu iki adımlı işlem, Visual Studio 'da yapabileceklerinizi taklit ediyor: bir . publishsettings dosyası indirip bir yayımlama profili oluşturmak için içeri aktarma.This two-step process simulates what you do in Visual Studio: download a .publishsettings file and import that to create a publish profile.

Diğer işlev, dağıtım betiğinin . pubxml dosyası ile birlikte kullanacağı ayarları içeren bir website-Environment. xml dosyası oluşturmak için başka bir şablon dosyası (Web sitesi-Environment. Template) kullanır.The other function uses another template file (website-environment.template) to create a website-environment.xml file that contains settings the deployment script will use along with the .pubxml file.

Sorun giderme ve hata işlemeTroubleshooting and error handling

Betikler, programlar gibidir: başarısız olabilirler ve hatanın ne olduğuna ve neden olduğu konusunda ne zaman daha fazla bilgi edinmek istiyorsunuz?Scripts are like programs: they can fail, and when they do you want to know as much as you can about the failure and what caused it. Bu nedenle, ortam oluşturma betiği, tüm ayrıntılı iletilerin görüntülenebilmesi için SilentlyContinue VerbosePreference değişkenin değerini Continue olarak değiştirir.For this reason, the environment creation script changes the value of the VerbosePreference variable from SilentlyContinue to Continue so that all verbose messages are displayed. Ayrıca, ErrorActionPreference değişkeninin değerini Continue Stopolarak değiştirir, böylece komut dosyası Sonlandırılmamış hatalardan karşılaştığında bile devam eder:It also changes the value of the ErrorActionPreference variable from Continue to Stop, so that the script stops even when it encounters non-terminating errors:

# Set the output level to verbose and make the script stop on error
$VerbosePreference = "Continue"
$ErrorActionPreference = "Stop"

Herhangi bir iş yapmadan önce, komut dosyası başlangıç saatini, tamamlandığında geçen süreyi hesaplayabilmesi için depolar:Before it does any work, the script stores the start time so that it can calculate the elapsed time when it's done:

# Mark the start time of the script execution
$startTime = Get-Date

Çalışmayı tamamladıktan sonra, komut dosyası geçen süreyi görüntüler:After it completes its work, the script displays the elapsed time:

# Mark the finish time of the script execution
$finishTime = Get-Date
# Output the time consumed in seconds
Write-Output ("Total time used (seconds): {0}" -f ($finishTime - $startTime).TotalSeconds)

Her anahtar işlemi için, betik ayrıntılı iletiler yazar, örneğin:And for every key operation the script writes verbose messages, for example:

Write-Verbose "[Start] creating $websiteName website in $Location location"
$website = New-AzureWebsite -Name $websiteName -Location $Location -Verbose
Write-Verbose "[Finish] creating $websiteName website in $Location location"

Dağıtım betiğiDeployment script

New-AzureWebsiteEnv. ps1 betiğinin ortam oluşturma için ne olduğu; Publish-AzureWebsite. ps1 betiği uygulama dağıtımı için de bunu yapar.What the New-AzureWebsiteEnv.ps1 script does for environment creation, the Publish-AzureWebsite.ps1 script does for application deployment.

Dağıtım betiği, Web uygulamasının adını ortam oluşturma betiği tarafından oluşturulan website-Environment. xml dosyasından alır.The deployment script gets the name of the web app from the website-environment.xml file created by the environment creation script.

[Xml]$envXml = Get-Content "$scriptPath\website-environment.xml"
$websiteName = $envXml.environment.name

. Publishsettings dosyasından dağıtım Kullanıcı parolasını alır:It gets the deployment user password from the .publishsettings file:

[Xml]$xml = Get-Content $scriptPath\$websiteName.publishsettings 
$password = $xml.publishData.publishProfile.userPWD[0]
$publishXmlFile = Join-Path $scriptPath -ChildPath ($websiteName + ".pubxml")

Projeyi oluşturup dağıtan MSBuild komutunu yürütür:It executes the MSBuild command that builds and deploys the project:

& "$env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" $ProjectFile `
    /p:VisualStudioVersion=12.0 `
    /p:DeployOnBuild=true `
    /p:PublishProfile=$publishXmlFile `
    /p:Password=$password

Komut satırında Launch parametresini belirttiyseniz, varsayılan tarayıcınızı Web sitesi URL 'sine açmak için Show-AzureWebsite cmdlet 'ini çağırır.And if you've specified the Launch parameter on the command line, it calls the Show-AzureWebsite cmdlet to open your default browser to the website URL.

If ($Launch)
{
    Show-AzureWebsite -Name $websiteName
}

Dağıtım betiğini şunun gibi bir komutla çalıştırabilirsiniz:You can run the deployment script with a command like this one:

.\Publish-AzureWebsite.ps1 ..\MyFixIt\MyFixIt.csproj -Launch

Bu işlem tamamlandığında, tarayıcı <websitename>.azurewebsites.net URL 'sindeki bulutta çalışan siteyle birlikte açılır.And when it's done, the browser opens with the site running in the cloud at the <websitename>.azurewebsites.net URL.

Windows Azure 'a dağıtılan BT uygulamasını onarma

ÖzetSummary

Bu betiklerle aynı adımların aynı sırada her zaman aynı şekilde yürütüleceğinden emin olabilirsiniz.With these scripts you can be confident that the same steps will always be executed in the same order using the same options. Bu, ekipteki her geliştiricinin bir şeyi kaçırmayın veya bir şeyi başka bir ekip üyesinin ortamında veya üretimde aynı şekilde çalışmayan kendi makinesine özel bir şekilde dağıtmamaları için yardımcı olur.This helps ensure that each developer on the team doesn't miss something or mess something up or deploy something custom on his own machine that won't actually work the same way in another team member's environment or in production.

Benzer bir şekilde, REST API, Windows PowerShell betiklerini, .NET dil API 'sini veya Linux veya Mac 'te çalıştırabileceğiniz bir bash yardımcı programını kullanarak yönetim portalında yapabileceğiniz Azure yönetim işlevlerinin çoğunu otomatik hale getirebilirsiniz.In a similar way, you can automate most Azure management functions that you can do in the management portal, by using the REST API, Windows PowerShell scripts, a .NET language API, or a Bash utility that you can run on Linux or Mac.

Bir sonraki bölümde , kaynak kodu ' na bakacağız ve kendi betiklerinizi kaynak kodu deponuza eklemek için neden önemli olduğunu açıklayacağız.In the next chapter we'll look at source code and explain why it's important to include your scripts in your source code repository.

KaynaklarResources