演習 - 環境を設定する
重要
この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
おもちゃ会社の再利用可能な Bicep コードの発行を開始する前に、環境を構成する必要があります。 このセクションでは、このモジュールの残りの部分を完了するために、Azure と GitHub 環境が設定されていることを確認します。
これらの目的を達成するには、次の作業を行います。
- このモジュール向けに GitHub リポジトリを設定します。
- リポジトリをコンピューターに複製します。
- Azure でリソース グループを作成する。
- GitHub にシークレットを作成します。
GitHub リポジトリを取得する
ここでは、テンプレート リポジトリに基づく新しい GitHub リポジトリを作成します。 テンプレート リポジトリには、このモジュールを開始するために必要なファイルが含まれています。
このラーニング パスのモジュールは、段階的に進めるラーニング パスの一部となっています。 各モジュールには、学習のための、関連する GitHub テンプレート リポジトリがあります。
ヒント
ラーニング パスで前のモジュールを完了した場合でも、次の手順に従って新しいリポジトリを作成し、新しい名前を付けます。
テンプレート リポジトリから開始する
GitHub リポジトリを設定するテンプレートを実行します。
GitHub サイトで、次の手順を実行して、テンプレートからリポジトリを作成します。
GitHub にサインインします。
[このテンプレートを使用]>[新しいリポジトリの作成] の順に選択します。
所有者の場合は、自分の GitHub アカウントを選択します。
新しいプロジェクトのリポジトリ名を入力します (toy-reusable など)。
[Public](パブリック) オプションを選択します
独自のリポジトリを作成するときに、プライベートにしたい場合もあります。 このモジュールでは、パブリック リポジトリと GitHub Enterprise アカウントを組み合わせた場合にのみ機能する GitHub の機能を使用します。
[Create repository] (リポジトリの作成) を選択します。
重要
このモジュールの最後の演習には、重要なクリーンアップ ステップが含まれています。 クリーンアップ手順は、このモジュールを完了しなかった場合でも必ず行ってください。
リポジトリの複製
これで自分のアカウントにテンプレート リポジトリのコピーが用意されたので、このリポジトリをローカルに複製して、そこで作業を開始できるようにします。
[コード] を選択し、[クリップボードに URL をコピーする] アイコンを選択します。
Visual Studio Code を開きます。
[ターミナル]>[新しいターミナル] を選択して、Visual Studio Code ターミナル ウィンドウを開きます。 このウィンドウは通常、画面の下部に表示されます。
ターミナルで、ローカル コンピューター上の GitHub リポジトリをクローンするディレクトリに移動します。 たとえば、repositories フォルダー内にリポジトリをクローンするには、次のコマンドを実行します。
cd repositories
「
git clone
」と入力し、前にコピーした URL を貼り付けると、次のようになります。git clone https://github.com/mygithubuser/toy-reusable.git
Visual Studio Code ターミナルで次のコマンドを実行して、リポジトリ フォルダー内の Visual Studio Code を再度開きます。
code --reuse-window toy-reusable
Azure へのサインイン
Azure でリソース グループを使用するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure CLI ツールと Visual Studio Code 用 Azure アカウント拡張機能がインストールされていることを確認します。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (Bash)] を選択します。
新しいシェルが開きます。
Azure CLI を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
Azure でリソース グループを使用するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell と Visual Studio Code 用 Azure アカウント拡張機能がインストールされていることを確認します。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (PowerShell)] を選択します。
新しいシェルが開きます。
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
Connect-AzAccount -UseDeviceAuthentication
コマンドの指示に従って Azure アカウントにサインインします。
ワークロード ID を作成する
次に、デプロイ ワークフロー用のワークロード ID を Microsoft Entra ID で作成します。
ワークロード ID を作成するため、Azure CLI コマンドでは jq
を使って JSON 出力からのデータが解析されます。 jq
をインストールしていない場合は、Azure Cloud Shell で Bash を使って、ワークロード ID、リソース グループ、ロールの割り当てを作成し、GitHub シークレットを準備できます。
次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。 必ず、
mygithubuser
を、この演習で先ほどメモした GitHub ユーザー名に置き換えます。 また、必ず正しい GitHub リポジトリ名を指定します。githubOrganizationName='mygithubuser' githubRepositoryName='toy-reusable'
デプロイ ワークフロー用のワークロード ID を作成します。
applicationRegistrationDetails=$(az ad app create --display-name 'toy-reusable') applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id') applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId') az ad app federated-credential create \ --id $applicationRegistrationObjectId \ --parameters "{\"name\":\"toy-reusable-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。 必ず、
mygithubuser
を、この演習で先ほどメモした GitHub ユーザー名に置き換えます。 また、必ず正しい GitHub リポジトリ名を指定します。$githubOrganizationName = 'mygithubuser' $githubRepositoryName = 'toy-reusable'
デプロイ ワークフロー用のワークロード ID を作成します。
$applicationRegistration = New-AzADApplication -DisplayName 'toy-reusable' New-AzADAppFederatedCredential ` -Name 'toy-reusable-branch' ` -ApplicationObjectId $applicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
Azure でリソース グループを作成してワークロード ID へのアクセス権を付与する
次に、Web サイトのリソース グループを作成します。 また、このプロセスでは、ワークロード ID にリソース グループの共同作成者ロールを付与し、ワークフローでリソース グループにデプロイできるようにします。
Visual Studio Code ターミナルで、次の Azure CLI コマンドを実行します。
resourceGroupResourceId=$(az group create --name ToyReusable --location westus3 --query id --output tsv)
az ad sp create --id $applicationRegistrationObjectId
az role assignment create \
--assignee $applicationRegistrationAppId \
--role Contributor \
--scope $resourceGroupResourceId
Visual Studio Code ターミナルで、次の Azure PowerShell コマンドを実行します。
$resourceGroup = New-AzResourceGroup -Name ToyReusable -Location westus3
New-AzADServicePrincipal -AppId $applicationRegistration.AppId
New-AzRoleAssignment `
-ApplicationId $applicationRegistration.AppId `
-RoleDefinitionName Contributor `
-Scope $resourceGroup.ResourceId
GitHub シークレットを準備する
次のコードを実行して、GitHub シークレットとして作成する必要がある各値を表示します。
echo "AZURE_CLIENT_ID: $applicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID: $($applicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"
AZURE_CLIENT_ID のアプリケーション ID 値をメモしておきます。 この値は、このモジュールの終了時にリソースをクリーン アップするときに使用できます。
GitHub シークレットを作成する
ワークロード ID と、それがデプロイできるリソース グループを作成しました。 次に、GitHub Actions でシークレットを作成します。
ブラウザーで GitHub リポジトリに移動します。
[設定]>[シークレットと変数]>[アクション] の順に選択します。
[New repository secret](新しいリポジトリ シークレット) を選択します。
シークレットに AZURE_CLIENT_ID という名前を付けます。
[値] フィールドに、ターミナル出力の最初の行の GUID を貼り付けます。 値には、
AZURE_CLIENT_ID
、コロン、スペースを含めないでください。[Add secret](シークレットの追加) を選択します。
このプロセスを繰り返して AZURE_TENANT_ID と AZURE_SUBSCRIPTION_ID のシークレットを作成します。値は、ターミナル出力の対応するフィールドからコピーします。
シークレットの一覧に現在 3 つのシークレットが表示されていることを確認します。