シークレットと環境変数を使用して構成可能なロード テストを作成する

Apache JMeter スクリプトを編集せずに、ロード テストの動作を変更する方法について説明します。 Azure Load Testing では、パラメーターを使用して構成可能なテスト スクリプトを作成できます。 たとえば、アプリケーション エンドポイントをパラメーターにすると、複数の環境でテスト スクリプトを再利用できます。

Azure Load Testing サービスでは、次の 2 種類のパラメーターがサポートされています。

  • シークレット: 機密情報が含まれ、ロード テスト エンジンに安全に渡されます。 たとえば、シークレットをテスト スクリプトにハードコーディングするのではなく、Web サービスの資格情報が提供されます。 詳細については、「シークレットを使用してロード テストを構成する」を参照してください。

  • 環境変数: 機密性の高くない情報が含まれており、ロード テスト エンジンで環境変数として使用できます。 たとえば、環境変数を使用すると、アプリケーション エンドポイントの URL が構成可能になります。 詳細については、「環境変数を使用してロード テストを構成する」を参照してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

  • Azure Load Testing リソース。 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 でシークレットを使うには、次の手順を実行します。

  1. シークレット値をシークレット ストア (Azure Key Vault または CI/CD シークレット ストア) に格納します。
  2. Apache JMeter テスト スクリプトにシークレットへの参照を渡します。
  3. カスタム関数 GetSecret を使って、Apache JMeter テスト スクリプト内でシークレット値を使います。

Azure Key Vault を使ってロード テストのシークレットを格納する

Azure Key Vault を使って、Azure Load Testing のテスト スクリプトにシークレット値を渡すことができます。 Azure Load Testing の構成にシークレットへの参照を追加します。 次に、Azure Load Testing はこの参照を使って、Apache JMeter スクリプトのシークレット値を取得します。

また、シークレット値を取得するために、Azure Load Testing に Azure キー コンテナーへのアクセス権を付与する必要があります。

注意

ロード テストを CI/CD プロセスの一部として実行する場合は、関連するシークレット ストアを使用することもできます。 「CI/CD シークレット ストアを使用する」に進んでください。

  1. キー コンテナーにシークレット値を追加します (まだ行っていない場合)。

  2. シークレットのキー コンテナー シークレット識別子を取得します。 このシークレット識別子を使用して、ロード テストを構成します。

    Azure キーコンテナーのシークレットを示すスクリーンショット。

    シークレット識別子は Azure キー コンテナー内のシークレットの完全な URI です。 必要に応じて、バージョン番号を含めることもできます。 たとえば、https://myvault.vault.azure.net/secrets/mysecret/ または https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678 です。

  3. Azure Load Testing リソースにキー コンテナーへのアクセス権を付与します。

    Azure キー コンテナーからシークレットを取得するには、Azure Load Testing リソースに読み取りアクセス許可を付与する必要があります。 これを有効にするには、まずロード テスト リソースの ID を指定する必要があります。 Azure Load Testing から、システム割り当てまたはユーザー割り当ての ID を使用できます。

    Azure Load Testing にキー コンテナーへのアクセス権を付与するには、「Azure Load Testing に対してマネージド ID を使用する」を参照してください。

  4. ロード テスト構成でシークレットを参照します。

    Apache JMeter スクリプトで参照する各シークレットに対して、ロード テストのシークレット パラメーターを定義します。 このパラメーター名は、Apache JMeter テスト スクリプトで使用するシークレット名と一致する必要があります。 パラメーター値はキー コンテナーのセキュリティ識別子です。

    次のいずれかを実行して、シークレット パラメーターを指定できます。

    • Azure portal で、ロード テストを選択し、[構成] を選択し、[パラメーター] タブを選択して、パラメーターの詳細を入力します。

      Azure portal 内でロード テストにシークレットの詳細を追加する場所を示すスクリーンショット。

    • CI/CD ワークフローを構成し、Azure Key Vault を使う場合は、YAML 構成ファイルで secrets プロパティを使ってシークレットを指定できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。

  5. Azure Load Testing が Azure Key Vault 内のシークレットにアクセスするために使う ID を指定します。

    ID は、ロード テスト リソースのシステム割り当て ID、またはユーザー割り当て ID のいずれかを指定できます。 必ず以前にアクセスを許可したものと同じ ID を使ってください。

    キー コンテナーの参照 ID は、次のいずれかの方法で指定できます。

    • Azure portal でロード テストを選び、[構成] を選び、[パラメーター] タブを選び、Key Vault の参照 ID を構成します。

    キー コンテナー参照 ID を選択する方法を示すスクリーンショット。

    • CI/CD ワークフローを構成し、Azure Key Vault を使う場合は、YAML 構成ファイルで keyVaultReferenceIdentity プロパティを使って参照 ID を指定できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。

これで、Azure Key Vault でシークレットを指定し、その値を取得するように Azure Load Testing リソースを構成する手順を完了しました。 Apache JMeter でのシークレットの使用に移行できるようになりました。

CI/CD シークレット ストアを使ってロード テストのシークレットを保存する

Azure Key Vault を使って、Azure Load Testing のテスト スクリプトにシークレット値を渡すことができます。 Azure Load Testing の構成にシークレットへの参照を追加します。 次に、Azure Load Testing はこの参照を使って、Apache JMeter スクリプトのシークレット値を取得します。

また、シークレット値を取得するために、Azure Load Testing に Azure キー コンテナーへのアクセス権を付与する必要があります。

CI/CD ワークフローで Azure Load Testing を使用している場合は、関連付けられているシークレット ストアを使用することもできます。 たとえば、GitHub リポジトリ シークレットまたは Azure Pipelines のシークレット変数を使用できます。

まず CI/CD シークレット ストアにシークレットを追加します。 次に、CI/CD ワークフローで Azure Load Testing タスクまたはアクションにシークレット値を渡します。

注意

既にキーコンテナーを使用している場合は、それを使用してロード テストのシークレットを格納することもできます。 「Azure キー コンテナーを使用する」に進んでください。

  1. まだ存在しない場合は、CI/CD シークレット ストアにシークレット値を追加します。

    Azure Pipelines では、パイプラインを編集して変数を追加できます。

    Azure Pipelines に変数を追加する方法を示すスクリーンショット。

    GitHub では、GitHub リポジトリ シークレットを使用できます。

    GitHub リポジトリ シークレットを追加する方法を示すスクリーンショット。

    注意

    値としてキー コンテナー シークレット識別子ではなく、実際のシークレット値を使用してください。

  2. CI/CD ワークフローの Load Testing タスクまたはアクションの入力パラメーターとしてシークレットを渡します。

    次の 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)"
              }
          ]
    

    重要

    シークレット入力パラメーターの名前は、Apache JMeter スクリプトで使用される名前と一致する必要があります。

これで、CI/CD シークレット ストアにシークレットを指定し、Azure Load Testing に参照を渡す手順を完了しました。 Apache JMeter スクリプトでシークレットを使用できるようになりました。

Apache JMeter でシークレットを使用する

このセクションでは、先ほど指定したシークレットを使うように Apache JMeter スクリプトを更新します。

まず、シークレット値を取得するユーザー定義変数を作成します。 次に、この変数をテスト内で使います (たとえば、HTTP 要求ヘッダーで API トークンを渡すため)。

  1. JMX ファイルにユーザー定義変数を作成し、GetSecret カスタム関数を使用してシークレット値をこれに割り当てます。

    GetSecret(<my-secret-name>) 関数は、引数としてシークレット名を受け取ります。 この名前は、後の手順でロード テストを構成するときに使用します。

    次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。

    ユーザー定義変数を Apache JMeter スクリプトに追加する方法を示すスクリーンショット。

    または、次のコード スニペットの例に示すように、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>
    
  2. テスト スクリプト内のユーザー定義変数を参照します。

    ${} 構文を使用して、スクリプト内の変数を参照できます。 次の例では、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>
    

環境変数を使用してロード テストを構成する

このセクションでは、環境変数を使用して、ロード テストにパラメーターを渡します。

  1. 環境変数を使用するように Apache JMeter スクリプトを更新します (たとえば、アプリケーション エンドポイントのホスト名を構成します)。

  2. ロード テストを構成し、環境変数をテスト スクリプトに渡します。

Apache JMeter で環境変数を使用する

このセクションでは、環境変数を使用してスクリプトの動作を制御するように、Apache JMeter スクリプトを更新します。

まず、環境変数を読み取るユーザー定義変数を定義します。次に、この変数をテストの実行で使用できます (たとえば、HTTP ドメインを更新します)。

  1. JMX ファイルにユーザー定義変数を作成し、System.getenv 関数を使用して環境変数の値をこれに割り当てます。

    System.getenv("<my-variable-name>") 関数は、引数として環境変数名を受け取ります。 この名前は、ロード テストを構成するときに使用します。

    次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。

    環境変数のユーザー定義変数を JMeter スクリプトに追加する方法を示すスクリーンショット。

    または、次のコード スニペットの例に示すように、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>
    
  2. テスト スクリプト内のユーザー定義変数を参照します。

    ${} 構文を使用して、スクリプト内の変数を参照できます。 次の例では、udv_webapp 変数を使用して、アプリケーション エンドポイントの URL を構成します。

    <stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
    

Azure Load Testing で環境変数を構成する

環境変数を Apache JMeter スクリプトに渡すには、Azure portal、YAML テスト構成ファイル、または CI/CD ワークフローで直接、ロード テストを構成できます。

重要

ロード テストの環境変数を定義する場合、その名前は Apache JMeter スクリプトで使用した変数名と一致する必要があります。

Azure portal を使用してロード テストに環境変数を指定するには、次の手順を実行します。

  1. テスト構成ページで、[パラメーター] タブを選択します。

  2. [環境変数] セクションで、環境変数の [名前][値] を入力し、[適用] を選択します。

    Microsoft Azure portal でロードテストに環境変数を追加する方法を示すスクリーンショット。

CI/CD ワークフローでロード テストを実行する場合は、YAML テスト構成ファイルで環境変数を定義できます。 構文の詳細については、テスト構成 YAML リファレンスに関する記事を参照してください。

または、CI/CD ワークフロー定義で環境変数を直接指定することもできます。 Azure Load Testing アクションまたは Azure Pipelines タスクの入力パラメーターを使用して、環境変数を Apache JMeter スクリプトに渡します。

次の 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"
          }
      ]

よく寄せられる質問

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](テストの構成 ) に移動し、パラメーター値を入力します。

次のステップ