以前の展開スキーム

ソースコード
次のパートに進む前に、前の2つの質問に答えます
そして、DevOpsはどうですか?
その答えは、前の記事とこの記事でGartner DevOpsモデルのテクノロジーブロック、つまりInfrastructure as Code 、 One-Step Deploy 、 Continuous Monitoringに直接関係したことです。
なぜそんなに複雑なのですか?
私は答えます-記事は純粋に技術的であり、元々計画されていました。 Azureの基本的な知識が必要です。 記事の意味は、それらに(より正確にはgithubに )基礎となる作業例を実装し、mancraftを<レガシーシステム>に変更し、AzureでCDパイプラインの構築を開始することです。
新しい展開スキーム

何が変わった
写真からわかるように、新しい管理層レイヤーが追加されました。その理由は次のとおりです。前の記事では、自動化された展開(インフラストラクチャを含む)を作成しました。 しかし、今後、サーバー構成を時間内に監視しないため、これは悪いことです。
別の構成管理ルールを考え出すことさえできます。
展開したソフトウェアとインフラストラクチャの構成が期待どおりであることを常に確認する必要があります。
この要件の実装を支援するために、Puppet、Chef、Azure Automationの1つのモジュールなどのツールがあります。
Azure Automationの場合、次のように機能します。
- AzureでPowershell DSCファイルをダウンロードする
- Azure AutomationでVMを登録し、以前に読み込まれた構成を割り当てる
- Azure AutomationはVMを構成し、割り当てられた構成について定期的にVMをチェックします。
- 構成が一致しない場合、Azure AutomationはVMを再構成するか、コンプライアンス違反を報告します
これをすべて実装するには、以下を行う必要があります。
- オートメーションアカウントを作成する
- Azure AutomationでPowerShell DSC構成をダウンロードする
- Azure Automationで依存Powershellモジュールをダウンロードする
- PowerShell DSC構成のコンパイル
- Azure Automation VMに登録し、以前にコンパイルされたPowerShell DSC構成とApplyAndAutocorrectフラグを割り当てます
小さな問題は、 Azure CLI 2を使用してこれらの手順を現在自動化できないことです。
したがって、必要なロジックはpowershellに実装され、rollout.shの最後に呼び出されます
powershellスクリプトautomation_preparation.ps1の内容をステップごとに詳細に検討します
まず、azureにログインします(簡単にするために、ファイルからコンテキストをインポートします。最初にそこに保存する必要があります-これはlogin_manual.shで行います )。
Import-AzureRmContext -Path "$env:HOMEPATH/azureprofile.json"
オートメーションアカウントを作成します。 無料プランで十分です。
New-AzureRmAutomationAccount -ResourceGroupName $env:GROUP -Name $env:AUTOMATION -Location $env:LOCATION -Plan Free
DSCスクリプトに必要な依存関係を読み込みます。 ContentLinkはnugetパッケージを参照する必要があることに注意してください。 モジュールのロード操作は同期的ではありませんが、常に予測可能な時間に実行されます。 コードが乱雑にならないように、最後にスリープ状態にします。 職場でこれを行う必要はありません )
New-AzureRmAutomationModule -AutomationAccountName $env:AUTOMATION -ResourceGroupName $env:GROUP -Name xNetworking -ContentLink "https://www.powershellgallery.com/api/v2/package/xNetworking/5.1.0.0" New-AzureRmAutomationModule -AutomationAccountName $env:AUTOMATION -ResourceGroupName $env:GROUP -Name xPSDesiredStateConfiguration -ContentLink "https://www.powershellgallery.com/api/v2/package/xPSDesiredStateConfiguration/7.0.0.0" New-AzureRmAutomationModule -AutomationAccountName $env:AUTOMATION -ResourceGroupName $env:GROUP -Name xStorage -ContentLink "https://www.powershellgallery.com/api/v2/package/xStorage/3.2.0.0" Start-Sleep -Seconds 60
DSC構成をロードします(スクリプトの以前のバージョンとは異なり、構成でzipを作成する必要はありません-ps1をロードするだけです)。
Import-AzureRmAutomationDscConfiguration -AutomationAccountName $env:AUTOMATION -ResourceGroupName $env:GROUP -SourcePath "$env:CONFIG_NAME.ps1" -Force -Published
ロードされた構成をコンパイルします(この時点で、構成パラメーターを初期化する必要があります)。
操作は同期的ではなく、待ち時間は無期限です(明らかに無料プランによる)ので、ここでサイクルを編成する必要があります。
$Params = @{"minecraftVersion"="$env:MVERSION";"accountName"="$env:STORAGE_ACCOUNT";"containerName"="$env:STORAGE_CONTAINER";"vmName"="$env:VM_NAME"} $CompilationJob = Start-AzureRmAutomationDscCompilationJob -AutomationAccountName $env:AUTOMATION -ConfigurationName $env:CONFIG_NAME -Parameters $Params -ResourceGroupName $env:GROUP while($CompilationJob.EndTime -eq $null -and $CompilationJob.Exception -eq $null) { $CompilationJob = $CompilationJob | Get-AzureRmAutomationDscCompilationJob Start-Sleep -Seconds 3 }
それでは、Azure AutomationのVM登録コマンドをDSCノードとして呼び出すだけです。
ConfigurationModeパラメーターに注意してください。ApplyAndMonitorの場合、Azure AutomationはVMを1回のみ構成し、DSCで説明されている構成のVMの実際の構成の対応のステータス(準拠、非準拠)を単に報告します。
Register-AzureRmAutomationDscNode -AzureVMName $env:VM_NAME ` -AzureVMResourceGroup $env:GROUP ` -AzureVMLocation $env:LOCATION ` -ResourceGroupName $env:GROUP -AutomationAccountName $env:AUTOMATION ` -NodeConfigurationName "$env:CONFIG_NAME.$env:VM_NAME" ` -ConfigurationMode ApplyAndAutocorrect ` -ActionAfterReboot ContinueConfiguration ` -RebootNodeIfNeeded $true ` -AllowModuleOverwrite $true
すべてをWindowsから開始する方法
必要になります
ロールアウト手順の開始:
ロールアウト手順の開始:
git clone https://github.com/AndreyPoturaev/minecraft-in-azure cd minecraft-in-azure git checkout v2.0.0 export MINESERVER_PASSWORD=<place your password here> export MINESERVER_DNS=<place unique name here. Server url will be $MINESERVER_DNS.westeurope.cloudapp.azure.com> export MINESERVER_STORAGE_ACCOUNT=<place unique name here> . login_manual.sh . rollout.sh
必要なVM構成の適合性に関する情報を取得するには、作成されたAutomationアカウント→DSCノードに移動できます。


そしてもちろんこれが唯一のオプションではありません 。
Powershell DSCのデビュー方法
最後に、これらの奇跡の構成のデバッグについていくつか説明します。これにより、誰かの命を救うことができるかもしれません)
DSC構成が構成されていない場合は、理由を確認できます
- ポータル上の仮想マシンのDSC拡張のプロパティに移動し、そこでログからの抜粋を読み取ります。
- マシン自体にログインし、 xDscDiagnosticsモジュールPowershellを使用してDSCを診断する
xDscDiagnosticsの問題を診断する方法
- 最新のジョブのリストを取得するGet-xDscOperation
- 特定のジョブの出力を取得するTrace-xDscOperation -JobID
- 必要な情報が出力に書き込まれていない場合は、 Update-DscConfigurationで-Verboseフラグを使用して構成を再度強制し、再度xDscDiagnosticsを使用してログを確認する必要があります。