Azure AZ104試験対策

# はじめに
Az104取得に向けての自分用の備忘録です。

#Azure Resource Manager を使用する

##Azure Resource Managerの利点 
▼Azure Resource Manager を使用すると、ソリューション内の複数のリソースを 1 つのグループとして作業できます

▼すべてのツールが同じ Azure Resource Manager API とやり取りする。 この API により、要求の認証と承認を行う Azure Resource Manager サービスに要求が渡されます。 次に Azure Resource Manager により、適切なリソース プロバイダーに要求がルーティングされる。

▼azure cli ,azure PowerShell、portalなどリソース扱うツールが異なれど一貫した結果がもたらされる

##Azureリソースの用語

###リソース　：

Azureを通じて管理可能な項目のこと。VMやストレージ、ネットワーク、webアプリ、データベースなど

###リソースプロバイダ
ARMで管理できる項目を提供するサービス。
一般的なリソース プロバイダーとしては、仮想マシン リソースを提供する Microsoft.Compute や、ストレージ アカウント リソースを提供する Microsoft.Storage、Web アプリに関連したリソースを提供する Microsoft.Web などがある

リソースの種類を表す名前は
リソースプロバイダ名/リソースタイプであらわされる
Microsoft.KeyVault/vaults

###テンプレート
JSONファイル。リソースグループにデプロイする１つ以上のサービスを記述する。
 デプロイ対象リソース間の依存関係も、このテンプレートによって定義される。

###リソースのロック
ロックの種類は二つある。
・読み取り専用ロック：読み取りのみ許可。変更を防ぐ
・削除ロック：削除を防ぐ

管理ロックを作成または削除できるのはだれか。
所有者とユーザーアクセス管理者のロールだけです。

##リソースグループの注意事項
・リソースは1つのリソースグループにのみ属する。
・リソース グループにタグを適用できる。リソース グループ内のリソースは、これらのタグを継承しません。
・リソースグループの名前は変更できない
・異なるリージョンのサービスや様々なサービスを含めることができる
・リソースグループからリソースグループへリソースを移動することができる
・リソース グループを使用すると、管理操作のアクセス制御のスコープを設定できる

リソースグループを作成する際に場所（リージョン）の指定が必要。リソースグループ内には属するリソースのメタデータが含まれる。このメタデータの保管場所をコンプライアンスの観点から特定しておく必要があるため

##リソースの再構成
リソースを移動する際は（サブスクリプション間、リソースグループ間問わず）ソースグループとターゲットグループの両方がロックされる。これらのリソースグループに対する書き込み、削除は移動完了までできない。
ただしリソースが使えないわけではない。中のアプリなどは継続して使える。

・リソースを移動すると、そのリソース ID は変更されます。 リソース ID の標準形式は ```/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} ```

▼PowerShellでのリソースグループの削除
remove-AzrResourceGroup -Name "名前”

#Azure Resource Managerテンプレートを使用してリソースを構成する

## ARMテンプレートスキーマについて詳しく知る
・JSONで記述
・キーと値のペアのコレクション（キーは文字列で値は以下の通り）
文字列、数字、ブール式、値の一覧、オブジェクト（他のキーと値のペアのコレクション）

Azure クイックスタート テンプレートとは、Azure コミュニティによって提供されている Azure Resource Manager のテンプレートです。

・ ARM テンプレート ツール キット (arm-ttk) を使用してテストすると、テンプレートが推奨ガイドラインに従っていることを確認できます

・このテスト キットは PowerShell スクリプト

・テンプレート内では、JSON の機能を拡張するテンプレート式を記述できます。 これらの式では、Resource Manager によって提供される関数を使用します。

・テンプレートには次のセクションがあります。以下の内必須はリソースのみ。
?*schema:**
 JSON データの構造を記述する JSON スキーマ ファイルの場所を定義する必須セクションです。 使用するバージョン番号は、デプロイのスコープと JSON エディターによって異なります。

**contentVersion:** 
テンプレートのバージョン (1.0.0.0 など) を定義する必須セクションです。 この値を使用して、テンプレートの重要な変更を文書化することで、適切なテンプレートを確実にデプロイできます。

**apiProfile:**
 リソースの種類の API バージョンのコレクションを定義する省略可能セクションです。 この値を使用することで、テンプレート内のリソースごとに API バージョンを指定する必要がなくなります。

**parameters:**
 デプロイ時に指定される値を定義する省略可能なセクションです。 これらの値は、コマンドライン パラメーターまたは Azure portal で、パラメーター ファイルによって指定できます。

**variables:**
テンプレート言語式を簡略化するために使用される値を定義する省略可能セクションです。

**functions:**
テンプレート内で使用可能な ユーザー定義関数を定義できる省略可能セクションです。 ユーザー定義関数を使用すると、テンプレートで複雑な式が繰り返し使用される場合に、テンプレートを簡略化できます。

**resources:**
 リソース グループまたはサブスクリプションで、デプロイまたは更新する必要がある実際の項目を定義する必須セクションです。

**output:**
 デプロイの最後に返される値を指定する省略可能セクションです。

▼VM作成
New-AzVm -ResourceGroupName "リソースグループ名" -Name "testvm-jap-01" -Credential (Get-Credential) -Location "japaneast" -Image UbuntuLTS -OpenPorts 22

・環境変数へvmオブジェクトを代入
$vm = (Get-AzVM -Name "testvm-jap-01" -ResourceGroupName learn-b729f131-76dc-4919-b76f-49ab5ac75ad7)

複合オブジェクトを指定するには、ドット (".") 構文を使用します。 たとえば、HardwareProfile セクションに関連付けられた VMSize オブジェクトのプロパティを表示するには、次のコマンドを実行する。

$vm.HardwareProfile

ディスクのいずれかに関する情報を取得するには、次のコマンドを実行します。
$vm.StorageProfile.OsDisk

▼VMシャットダウン
Stop-AzVM -Name $vm.Name -ResourceGroup $vm.ResourceGroupName

▼VM削除
Remove-AzVM -Name $vm.Name -ResourceGroup $vm.ResourceGroupName

▼リソースグループの削除
Remove-AzResourceGroup -Name MyResourceGroupName

#ARMテンプレートをAzureにデプロイする

###ARMテンプレートの基ファイルを作成しておく

```json:test.json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": []
}
```

###まず、Azure CLI または Azure PowerShell を使用して Azure にサインインします
Azure CLI:
```az login```
Power Shell :
```Connect-AzAccount```

###サブスクリプションの選択
Azure CLI:
```az account set --subscription [SubscriptionID/SubscriptionName]```
PowerShell:
```Set-AzContext [SubscriptionID/SubscriptionName]```

###リソースグループの作成
Azure CLI:

```
az group create \
  --name myResourceGroup \
  --location "Central US"
```
PowerShell:

```
New-AzResourceGroup `
  -Name myResourceGroup `
  -Location "Central US"
```

###テンプレートをデプロイする
・Azure CLI または Azure PowerShell を使用する。 
・作成済みのリソース グループを使用します。 デプロイ履歴で識別しやすいよう、デプロイには名前を付ける
・便宜上、テンプレート ファイルのパスを格納する変数も作成する。 デプロイするたびにパスを再入力しなくても済むため、デプロイ コマンドが実行しやすくなります。

Azure CLI:

```
templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile
```
PowerShell:

```
$templateFile = "{provide-the-path-to-the-template-file}"
New-AzResourceGroupDeployment `
  -Name blanktemplate `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile
```
デプロイ コマンドから結果が返されます。 デプロイが成功したかどうかは、```ProvisioningState``` を見て確認する。値が```Succeeded```であればOK

##おわりに
Microsoft learn 
AZ-104:Azure 管理者向けの前提条件　を大いに参考にさせていただきました。