演習 - 環境を設定する
重要
この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
おもちゃ会社の Web サイトのワークフローで作業を開始する前に、環境を構成する必要があります。 このセクションでは、このモジュールの残りの部分を完了するために、Azure と GitHub 環境が設定されていることを確認します。
これらの目標を達成するには、次のタスクを実行します。
- このモジュール向けに GitHub リポジトリを設定します。
- リポジトリをコンピューターに複製します。
- Azure でリソース グループを作成する。
- GitHub にシークレットを作成します。
GitHub リポジトリを取得する
テンプレート リポジトリに基づいて新しいリポジトリを作成して、このモジュールの残りの部分を完了するように GitHub リポジトリを設定します。 テンプレート リポジトリには、このモジュールを開始するために必要なファイルが含まれています。
このラーニング パスのモジュールは、段階的に進めるラーニング パスの一部となっています。 各モジュールには、学習のための、関連する GitHub テンプレート リポジトリがあります。
ヒント
ラーニング パスで前のモジュールを完了した場合でも、次の手順に従って新しいリポジトリを作成し、新しい名前を付けます。
テンプレート リポジトリから開始する
GitHub リポジトリを設定するテンプレートを実行します。
GitHub サイトで、次の手順を実行して、テンプレートからリポジトリを作成します。
[このテンプレートを使用]>[新しいリポジトリの作成] の順に選択します。
[所有者] ドロップダウン リストから GitHub ユーザー名を選択します。
新しいプロジェクトのリポジトリ名を入力します (toy-website-test など)。
[Public](パブリック) オプションを選択します
独自のリポジトリを作成するときに、プライベートにしたい場合もあります。 ただし、このモジュールでは、パブリック リポジトリと GitHub Enterprise アカウントでのみ動作する GitHub の機能をいくつか使用します。
[Create repository] (リポジトリの作成) を選択します。
重要
このモジュールの最後の演習には、重要なクリーンアップ ステップが含まれています。 クリーンアップ手順は、このモジュールを完了しなかった場合でも必ず行ってください。
リポジトリの複製
これで、独自のアカウントでテンプレート リポジトリのコピーが作成されました。 作業を始められるように、このリポジトリをローカル環境にクローンしてください。
[コード] を選択して、コピー アイコンを選択します。
Visual Studio Code を開きます。
[表示]>[ターミナル] を選択して、Visual Studio Code ターミナル ウィンドウを開きます。 このウィンドウは通常、画面の下部に表示されます。
ターミナルで、ローカル コンピューター上の GitHub リポジトリをクローンするディレクトリに移動します。
「
git clone
」と入力し、先ほどコピーした URL を貼り付けると、次のようになります。git clone https://github.com/mygithubuser/toy-website-test.git
Visual Studio Code ターミナルで次のコマンドを実行して、リポジトリ フォルダー内の Visual Studio Code を再度開きます。
code -r toy-website-test
Azure へのサインイン
Azure でリソース グループを使用するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure CLI ツールがインストールされていることを確認してください。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (Bash)] を選択します。
新しいシェルが開きます。
Azure CLI を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
Azure でリソース グループを使用するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell がインストールされていることを確認します。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (PowerShell)] を選択します。
新しいシェルが開きます。
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
Connect-AzAccount
開いたブラウザーで、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-website-test'
デプロイ ワークフロー用のワークロード ID を作成します。 このモジュールの後半にある演習の準備をするために、2 つのフェデレーション資格情報を作成します。
applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-test') applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id') applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId') az ad app federated-credential create \ --id $applicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-test\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Website\",\"audiences\":[\"api://AzureADTokenExchange\"]}" az ad app federated-credential create \ --id $applicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-test-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-website-test'
デプロイ ワークフロー用のワークロード ID を作成します。 このモジュールの後半にある演習の準備をするために、2 つのフェデレーション資格情報を作成します。
$applicationRegistration = New-AzADApplication -DisplayName 'toy-website-test' New-AzADAppFederatedCredential ` -Name 'toy-website-test' ` -ApplicationObjectId $applicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Website" New-AzADAppFederatedCredential ` -Name 'toy-website-test-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 ToyWebsiteTest --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 ToyWebsiteTest -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)"
GitHub シークレットを作成する
ワークロード ID と、それがデプロイできるリソース グループを作成しました。 次に、GitHub Actions でシークレットを作成します。
ブラウザーで GitHub リポジトリに移動します。
[設定]>[シークレットと変数]>[アクション] の順に選択します。
[New repository secret](新しいリポジトリ シークレット) を選択します。
シークレットに AZURE_CLIENT_ID という名前を付けます。
[値] フィールドに、ターミナル出力の最初の行の GUID を貼り付けます。 値には、
AZURE_CLIENT_ID
、コロン、スペースを含めないでください。[Add secret](シークレットの追加) を選択します。
このプロセスを繰り返して AZURE_TENANT_ID と AZURE_SUBSCRIPTION_ID のシークレットを作成します。値は、ターミナル出力の対応するフィールドからコピーします。
シークレットの一覧に現在 3 つのシークレットが表示されていることを確認します。