この記事では、Azure Load Testing のロード テストにパラメーターとしてシークレットと環境を渡す方法について説明します。 パラメーターを使用すると、Apache JMeter スクリプトまたは子スクリプトを編集しなくても、ロード テストの動作を変更できます。 たとえば、Web アプリケーションをテストするには、エンドポイント URL をパラメーターとして指定して、複数の環境でテスト スクリプトを再利用します。 パラメーターを使用して、テスト スクリプトで機密情報をハード コーディングする必要がないようにすることもできます。
Azure Load Testing サービスでは、次の 2 種類のパラメーターがサポートされています。
シークレット: 機密情報が含まれており、ロード テスト エンジンに安全に渡されます。 たとえば、シークレットは、テスト スクリプトでハードコーディングするのではなく、Web サービスの資格情報を提供します。 詳細については、「シークレットを使用してロード テストを構成する」を参照してください。
環境変数: 機密性の高くない情報が含まれており、ロード テスト エンジンで環境変数として使用できます。 たとえば、環境変数を使用すると、アプリケーション エンドポイントの URL を構成できます。 詳細については、「環境変数を使用してロード テストを構成する」を参照してください。
新しいテストを作成するとき、または既存のテストを更新するときに、ロード テスト構成でパラメーターを指定できます。 CI/CD ワークフローでロード テストを実行する場合は、ロード テスト構成ファイルまたは CI/CD ワークフロー定義でパラメーターを定義します。
[前提条件]
アクティブなサブスクリプションを持つ Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure ロード テスト リソース。 Azure Load Testing リソースを作成する必要がある場合は、ロード テストの作成と実行に関するクイックスタートを参照してください。
シークレットを使用してロード テストを構成する
このセクションでは、Azure Load Testing でロード テスト スクリプトにシークレットを渡す方法について説明します。 たとえば、シークレットを使用して、ロード テストしている Web サービス エンドポイントに API キーを渡すことができます。 API キーを構成に格納したり、スクリプトにハードコーディングしたりする代わりに、シークレット ストアに保存してシークレットへのアクセスを厳密に制御できます。
Azure Load Testing を使用すると、シークレットを Azure Key Vault に格納できます。 また、CI/CD パイプラインでロード テストを実行する場合、Azure Pipelines や GitHub Actions など、CI/CD テクノロジに関連付けられたシークレット ストアを使うこともできます。
Azure Load Testing でシークレットを使用するには、次の手順を実行します。
- シークレット値をシークレット ストア (Azure Key Vault または CI/CD シークレット ストア) に格納します。
- シークレットへの参照を Apache JMeter テスト スクリプトに渡します。
- JMeter ベースのテストの場合は、
GetSecretカスタム関数を使用して Apache JMeter テスト スクリプトのシークレット値を使用します。 Locustベースのテストの場合、環境変数からシークレット値を読み取って使用します。
Von Bedeutung
GetSecret カスタム関数は、Azure Load Testing で JMeter テスト スクリプトを実行する場合にのみ使用できます。 テスト スクリプトをローカルで実行する場合は、テスト スクリプトを更新し、別の方法でシークレット値を読み取る必要があります。
Azure Key Vault を使ってロード テストのシークレットを格納する
Azure Key Vault を使って、Azure Load Testing のテスト スクリプトにシークレット値を渡すことができます。 Azure Load Testing の構成にシークレットへの参照を追加します。 その後、Azure Load Testing はこの参照を使用して、テスト スクリプト内のシークレット値を取得します。
シークレット値を取得するには、Azure Key Vault へのアクセス権を Azure Load Testing に付与する必要もあります。
注
ロード テストを CI/CD プロセスの一部として実行する場合は、関連するシークレット ストアを使用することもできます。 「CI/CD シークレット ストアを使用する」に進んでください。
Azure Key Vault でシークレットを作成する
キー コンテナーにシークレット値を追加します (まだ行っていない場合)。
Von Bedeutung
ファイアウォールまたは仮想ネットワークによって Azure Key Vault へのアクセスを制限した場合は、次の手順に従って 、信頼された Azure サービスへのアクセスを許可します。
シークレットのキー コンテナーのシークレット識別子を取得します。 このシークレット識別子を使用して、ロード テストを構成します。
シークレット識別子は、Azure Key Vault 内のシークレットの完全な URI です。 必要に応じて、バージョン番号を含めることもできます。 たとえば、
https://myvault.vault.azure.net/secrets/mysecret/またはhttps://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678です。
ロード テストにシークレットを追加する
ロード テスト構成でシークレットを参照します。
テスト スクリプトで参照する各シークレットのロード テスト シークレット パラメーターを定義します。 パラメーター名は、テスト スクリプトで使用するシークレット名と一致する必要があります。 パラメーター値はキー コンテナーのセキュリティ識別子です。
次のいずれかを実行して、シークレット パラメーターを指定できます。
Azure portal で、ロード テストを選択し、[構成] を選択し、[パラメーター] タブを選択して、パラメーターの詳細を入力します。
CI/CD ワークフローを構成し、Azure Key Vault を使う場合は、YAML 構成ファイルで
secretsプロパティを使ってシークレットを指定できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。
Azure Load Testing が Azure Key Vault 内のシークレットにアクセスするために使う ID を指定します。
ID は、ロード テスト リソースのシステム割り当て ID、またはユーザー割り当て ID のいずれかを指定できます。 必ず以前にアクセスを許可したものと同じ ID を使ってください。
キー コンテナーの参照 ID は、次のいずれかの方法で指定できます。
Azure portal でロード テストを選び、[構成] を選び、[パラメーター] タブを選び、Key Vault の参照 ID を構成します。
CI/CD ワークフローを構成し、Azure Key Vault を使う場合は、YAML 構成ファイルで
keyVaultReferenceIdentityプロパティを使って参照 ID を指定できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。
Azure Key Vault へのアクセスを許可する
ロード テスト シークレットまたは証明書を Azure Key Vault に格納すると、ロード テスト リソースでは、キー コンテナーにアクセスするためにマネージド IDが使用されます。 マネージド ID を構成したら、ロード テスト リソースのマネージド ID に、キー コンテナーからこれらの値を読み取るアクセス許可を付与する必要があります。
Azure Key Vault からシークレットまたは証明書を読み取るアクセス許可を Azure ロード テスト リソースに付与するには:
Azure portal で、Azure Key Vault リソースに移動します。
キー コンテナーがない場合は、「Azure Key Vault のクイックスタート」の手順に従って作成します。
左側のウィンドウで、[アクセス ポリシー] を選択し、[+ 作成] を選択します。
[アクセス許可] タブの [シークレットのアクセス許可] で、[取得] を選択し、[次へ] を選択します。
注
Azure Load Testing では、証明書の秘密キーが使用可能であることを確認するために、証明書がシークレットとして取得されます。
[プリンシパル] タブで、ロード テスト リソースのマネージド ID を検索して選択し、[次へ] を選択します。
システム割り当てマネージド ID を使用している場合、マネージド ID 名は Azure ロード テスト リソースの名前と一致します。
[次へ] をもう一度選択します。
テストの実行時に、ロード テスト リソースに関連付けられているマネージド ID で、キー コンテナーからロード テストのシークレットまたは証明書が読み取れるようになりました。
Azure Key Vault にシークレットを追加し、ロード テスト用のシークレットを構成したので、「Apache JMeter でシークレットを使用する」に進むことができます。
CI/CD シークレット ストアを使ってロード テストのシークレットを保存する
CI/CD ワークフローで Azure Load Testing を使用している場合は、関連付けられているシークレット ストアを使用することもできます。 たとえば、GitHub リポジトリ シークレットまたは Azure Pipelines のシークレット変数を使用できます。
注
既にキーコンテナーを使用している場合は、それを使用してロード テストのシークレットを格納することもできます。 「Azure キー コンテナーを使用する」に進んでください。
CI/CD シークレット ストア内のシークレットを使い、それを CI/CD でロード テストに渡すには:
まだ存在しない場合は、CI/CD シークレット ストアにシークレット値を追加します。
Azure Pipelines では、パイプラインを編集して変数を追加できます。
GitHub では、gitHub リポジトリ シークレット 使用できます。
注
値としてキー コンテナー シークレット識別子ではなく、実際のシークレット値を使用してください。
シークレットを入力パラメーターとして CI/CD ワークフローのロード テスト タスク/アクションに渡します。
次の YAML スニペットは、Load Testing GitHub アクションにシークレットを渡す方法を示しています。
- name: 'Azure Load Testing' uses: azure/load-testing@v1 with: loadtestConfigFile: 'SampleApp.yaml' loadtestResource: 'MyTest' resourceGroup: 'loadtests-rg' secrets: | [ { "name": "appToken", "value": "${{ secrets.MY_SECRET }}" } ]次の YAML スニペットは、Azure Pipelines タスクにシークレットを渡す方法を示しています。
- task: AzureLoadTest@1 inputs: azureSubscription: 'MyAzureLoadTestingRG' loadTestConfigFile: 'SampleApp.yaml' loadTestResource: 'MyTest' resourceGroup: 'loadtests-rg' secrets: | [ { "name": "appToken", "value": "$(mySecret)" } ]Von Bedeutung
シークレット入力パラメーターの名前は、Apache JMeter スクリプトで使用される名前と一致する必要があります。
これで、CI/CD シークレット ストアにシークレットを指定し、Azure Load Testing に参照を渡す手順を完了しました。 これで、Apache JMeter スクリプトでシークレットを使用できるようになりました。
テスト スクリプトでシークレットを使用する
次に、前に指定したシークレットを使用するようにテスト スクリプトを更新します。
最初に、シークレット値を取得するユーザー定義変数を作成します。 次に、この変数をテスト内で使います (たとえば、HTTP 要求ヘッダーで API トークンを渡すため)。
JMX ファイルにユーザー定義変数を作成し、
GetSecretカスタム関数を使用してシークレット値を割り当てます。GetSecret(<my-secret-name>)関数は、シークレット名を引数として受け取ります。 この同じ名前は、後の手順でロード テストを構成するときに使用します。次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。
または、次のコード スニペット例に示すように、JMX ファイルを直接編集することもできます。
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="appToken" elementType="Argument"> <stringProp name="Argument.name">udv_appToken</stringProp> <stringProp name="Argument.value">${__GetSecret(appToken)}</stringProp> <stringProp name="Argument.desc">Value for x-secret header </stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments>テスト スクリプトでユーザー定義変数を参照します。
${}構文を使用して、スクリプト内の変数を参照できます。 次の例では、udv_appToken変数を使用して HTTP ヘッダーを設定します。<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> <collectionProp name="HeaderManager.headers"> <elementProp name="" elementType="Header"> <stringProp name="Header.name">api-key</stringProp> <stringProp name="Header.value">${udv_appToken}</stringProp> </elementProp> </collectionProp> </HeaderManager>
環境変数を使用してロード テストを構成する
このセクションでは、環境変数を使用して、ロード テストにパラメーターを渡します。
環境変数を使用するように Apache JMeter スクリプトを更新します (たとえば、アプリケーション エンドポイントのホスト名を構成します)。
ロード テストを構成し、環境変数をテスト スクリプトに渡します。
Apache JMeter で環境変数を使用する
このセクションでは、環境変数を使用してスクリプトの動作を制御するように Apache JMeter スクリプトを更新します。
まず、環境変数を読み取るユーザー定義変数を定義します。次に、この変数をテストの実行で使用できます (たとえば、HTTP ドメインを更新します)。
JMX ファイルにユーザー定義変数を作成し、
System.getenv関数を使用して環境変数の値を割り当てます。System.getenv("<my-variable-name>")関数は、環境変数の名前を引数として受け取ります。 ロード テストを構成するときに、この同じ名前を使用します。次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。
または、次のコード スニペット例に示すように、JMX ファイルを直接編集することもできます。
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="appToken" elementType="Argument"> <stringProp name="Argument.name">udv_webapp</stringProp> <stringProp name="Argument.value">${__BeanShell( System.getenv("webapp") )}</stringProp> <stringProp name="Argument.desc">Web app URL</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments>テスト スクリプトでユーザー定義変数を参照します。
${}構文を使用して、スクリプト内の変数を参照できます。 次の例では、udv_webapp変数を使用して、アプリケーション エンドポイントの URL を構成します。<stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
Azure Load Testing で環境変数を構成する
環境変数をテスト スクリプトに渡すには、Azure portal、YAML テスト構成ファイル、または CI/CD ワークフローで直接ロード テストを構成できます。
Von Bedeutung
ロード テストの環境変数を定義する場合、その名前はテスト スクリプトで使用した変数名と一致する必要があります。
Azure portal を使用してロード テストに環境変数を指定するには、次の手順を実行します。
テスト構成ページで、[パラメーター] タブを選択します。
[環境変数] セクションで、環境変数の [名前] と [値] を入力し、[適用] を選択します。
CI/CD ワークフローでロード テストを実行する場合は、YAML テスト構成ファイルで環境変数を定義できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。
または、CI/CD ワークフロー定義で環境変数を直接指定することもできます。 Azure Load Testing アクションまたは Azure Pipelines タスクの入力パラメーターを使用して、環境変数をテスト スクリプトに渡します。
次の YAML スニペットは、GitHub Actions の例を示しています。
- name: 'Azure Load Testing'
uses: azure/load-testing
with:
loadtestConfigFile: 'SampleApp.yaml'
loadtestResource: 'MyTest'
resourceGroup: 'loadtests-rg'
env: |
[
{
"name": "webapp",
"value": "myapplication.contoso.com"
}
]
次の YAML スニペットは、Azure Pipelines の例を示しています。
- task: AzureLoadTest@1
inputs:
azureSubscription: 'MyAzureLoadTestingRG'
loadTestConfigFile: 'SampleApp.yaml'
loadTestResource: 'MyTest'
resourceGroup: 'loadtests-rg'
env: |
[
{
"name": "webapp",
"value": "myapplication.contoso.com"
}
]
FAQ
Azure Load Testing サービスにシークレット値は格納されますか?
いいえ。 Azure Load Testing サービスにはシークレットの値は格納されません。 キー コンテナーのシークレット URI を使用する場合、サービスではシークレット URI のみが格納され、テスト実行ごとにシークレットの値が取り込まれます。 シークレットの値を CI/CD ワークフローで指定する場合、シークレットの値はテストの実行後に使用できません。 これらの値はテストの実行ごとに指定します。
YAML 構成ファイルと CI/CD ワークフローの両方にパラメーターがある場合は、どうなるでしょうか。
YAML 構成ファイルと Azure Load Testing アクションまたは Azure Pipelines タスクの両方にパラメーターが存在する場合は、CI/CD ワークフローの値がテストの実行に使用されます。
Azure Load Testing のタスクまたはアクションを使用してパラメーターを渡すことによって、CI/CD ワークフローからテストを作成して実行しました。 同じパラメーターを使用して、Azure portal からこのテストを実行できますか?
パラメーターの値は、CI/CD ワークフローから渡された場合は格納されません。 Azure portal からテストを実行するときに、パラメーター値を再度指定する必要があります。 不足している値を入力するように求めるメッセージが表示されます。 シークレット値については、キー コンテナーのシークレット URI を入力します。 テストの実行または再実行のページで入力した値は、そのテストの実行についてのみ有効です。 テスト レベルで変更を行う場合は、[Configure Test]\(テストの構成 \) に移動し、パラメーター値を入力します。
関連コンテンツ
- シークレットを使用して、セキュリティで保護されたエンドポイントをロード テストします。
- CSV ファイルの読み取りについて詳しくは、ロード テストでの CSV ファイルの読み取りに関する記事を参照してください。