1.21.2 から 1.22.0 への更新。

Genvid SDK Prefab for Unity

連番可能なオブジェクトを提供する場合は、 SubmitGameData ではなく、 Streams プレハブ関数 SubmitGameDataJSON を呼び出す必要があります。文字列やバイト配列などの連番化されたペイロードや raw のペイロードが既にある場合は、 SubmitGameData メソッドを呼び出す必要があります。」object 」 型の SubmitGameData オーバーロードは非推奨となりました。

具体的な使い方については samples/unity/package/Assets/Genvid/Scripts/GenvidStreams.cs を参照してください。

Unity Sample の構築と設定

Unity Sample build.cs ファイルを更新し、Assets および ProjectSettings と同レベルの Build ディレクトリにプロジェクトを生成するようにしました。以前のバージョンの config/game.hcl を使用している場合、 unity.binary.unity.path を更新して、新しいプロジェクトの場所を反映させる必要があります。

例: \app\*Build*\ProjectName.exe

SDK.upload_images* メソッドのデフォルト値の変更

upload_images() および upload_images_sdk() メソッドの update_config パラメータを変更し、デフォルトでは設定を更新 しない ようにしました。同じ処理を update_images_config() で行うこともできます。

コマンドラインの動作では、デフォルトで設定が更新されます。

Terraform 0.12 アップグレード

Terraform をバージョン 0.12 にアップグレードしましたが、以前のバージョンの Terraform モジュールとの下位互換性はありません。Genvid SDK のストックモジュールも新バージョンと互換性のあるものに更新しました。

重要

既存のクラスタはデフォルトでは新しいモジュールを使用しないため、クラスタ上で実行される Terraform コマンドが失敗します。クラスタを新規作成しないで既存のクラスタを使用する場合は、Terraform 0.12 と互換性のあるストックモジュールやカスタムモジュールを使用するように更新を行う必要があります。

Genvid のストックモジュールを使用して既存のクラスタを更新する方法については、 upgrade procedure を参照してください。アップグレード手順を適用するまでは、Bastion-UI Terraform クラスタ設定ページの読み込みに失敗するのでご注意ください。

カスタムモジュールを使用している場合は、Terraform 0.12 と互換性を保つためアップグレードを行う必要があります。

詳細は Terraform の公式解説書を参照してください。

カスタムモジュールのアップグレード

重要

カスタムモジュールのアップグレードは試行錯誤を繰り返すプロセスであり、実際に使用するクラスタでは実行すべきではありません。Terraform モジュールをアップグレードしている間に、実際に使用するクラスタのコピーを作成して作業することをお勧めします。すべてが期待通りに動作している場合にのみ、アップグレードされたモジュールを実際に使用するクラスタで使用してください。以下の手順では、開発用クラスタを使って作業する例を説明しています。

Terraform モジュール定義を含むリポジトリの一覧は、 Bastion-UI で確認できます。

  1. Bastion UI のページを開きます。

  2. Settings をクリックします。

  3. Modules をクリックします。

    注釈

    フォーマット SDK-#.##.# を使用したモジュール名は、Genvid のストックモジュールであり、このバージョンの SDK でアップグレードされたものです。使用しているカスタムモジュールのみ、手動でアップグレードする必要があります。

  4. アップグレードするカスタムモジュールを選択します。

  5. モジュールのローカルフォルダのパスをコピーします。

    フォルダパスがローカルでない場合は、モジュールをローカルディレクトリにコピーしてアップグレードを実行する必要があります。

  6. Windows エクスプローラでローカルフォルダを開きます。

  7. バックアップとしてモジュールリポジトリを別の場所にコピーします。

    アップグレード処理により、モジュールの定義が変更されます。アップグレードで問題が発生した場合に備えて、オリジナルのコピーを作成することをお勧めします。

  8. コマンドプロンプトを開きます。

  9. レポジトリフォルダに移動します。

  10. Terraform モジュールをアップグレードします。

    Terraform モジュールファイル (.tf) を含むレポジトリの各フォルダに対して:

    1. コマンドプロンプトでフォルダを開きます。

    2. アップグレードコマンドを実行します。

      コマンドはローカルの Genvid SDK インストールディレクトリにあるため、Terraform のパスを適宜調整します。たとえば、インストールディレクトが C:\genvid の場合:

      C:\genvid\bin\terraform init
      C:\genvid\bin\terraform 0.12upgrade
      

      アップグレードコマンドの出力でエラーが返ってくることがあります。必要に応じて修正してコマンドを再実行してください。

    3. コマンドで作成された .terraform フォルダを削除します。

    Terraform 0.12 用にアップグレードされたモジュールは、冗長でない構文となります。例えば:

    • 文字列補間をせずに直接変数を使用したもの。変数のみを含む文字列の場合、Terraform 0.12 で警告がでます:

      $"{var.value1}" => var.value1

    • コレクションのインデックスの値へのアクセスが変更されました:

      values.0.resource => values[0].resource

  11. モジュールがローカルに保存されていなかった場合は、アップグレードされたファイルを元の場所にプッシュされます。

  12. Bastion-UI Modules ページに戻ります。

  13. Refresh をクリックします。

    これにより、更新されたファイルが bastion に送られ、クラスタで使用できるようになります。

  14. Terraform ページに移動します。

  15. アップグレードするクラスタを選択します。

  16. REIMPORT MODULE をクリックします。

  17. 正しいモジュールが選択されていることを確認します。

  18. IMPORT MODULE をクリックします。

  19. Terraform 出力で報告されたエラーを解決します。

    コマンドは、モジュールを Terraform 0.12 と互換性のあるものにするために必要な変更をすべて網羅しているわけではありません。エラーメッセージを参照して、モジュールファイルに必要な変更を行ってください。

    Genvid のストックモジュールに手動で変更を加える必要があるものには、以下のようなものがあります:

    • 配列を返す式についている不要な角括弧 [] を削除する。
    • モジュールはこれまで ignore_changes = true という設定を使用していましたが、これはブール値ではなくプロパティの配列を取るようになりました。キーワード all は、代替として使用する必要がありましたが、構成されたプロバイダのバージョンではサポートされていませんでした。 aws プロバイダのバージョンは、 vpc モジュールと同様に最新バージョンに更新されました。
    • formatlist メソッドを使用するには、文字列のリストをリストに適切にキャストする必要がありました。

    カスタムモジュールが Genvid モジュールをベースにしている場合は、アップグレードされたバージョンを参照して、新しい Terraform バージョン用にどのような変更されているかを確認してください。

  20. エラーの対応後、 Refresh をクリックして再度インポートしてみてください。

  21. PLAN APPLY をクリックします。

  22. 出力をチェックして、クラスタの変更が必要かどうかを確認します。

    • ほとんどの場合、 No changes. Infrastructure is up to date. で終了します。
    • 変更が必要な場合は、慎重に確認してください。リストされた変更が正しいと思われる場合は、 APPLY をクリックします。
    • エラーが発生している場合は、 Terraform モジュールの修正が必要です。ソースファイルで修正してから、もう一度試してみてください。

ConsulTemplateTool の API 変更点

ConsulTemplateTool の API 実装をより柔軟にするために、新しいクラス ConsulTemplate を追加しました。ただし、この変更には後方互換がありません。

一般的な使用方法をシンプルにすることを目的としています。

  • テンプレートが構成を Consul または Vault に保存されている場合は、必要に応じて use_consul=True または use_value=True パラメータを使用します。
  • env パラメータを使用すると、consul-template が実行される環境に環境変数を導入することができます。
  • 他のすべてのキーワードパラメータは、consul-template 実行ファイルのオプションです。
# This example assumes we are working in a class that is a subclass of
# ``ConsulTemplateTool``.

# Before
process = self.consul_template(template,
                               stdout=PIPE,
                               stderr=PIPE,
                               log_level="debug",
                               timeout=1,
                               env=env)

# After
output = self.consul_template_once(use_consul=True,
                                   use_vault=True,
                                   env=env,
                                   template=template,
                                   dry=True)

この例では、基礎となる consul-template コマンドの template および dry オプションを直接使用します。 template は、テンプレート化された構成へのパスです。 dry は、結果の構成をディスクに書き込むのではなく、output.configuration 内に配置することを指定します。

1.20.0 以前のリリースのサンプルファイルの問題

この API の変更により、1.20.0 リリースより前のサンプルスクリプトで問題が発生します。これらのスクリプトをプロジェクトのベースとして使用している場合は、更新された API で動作するように調整する必要があります。

具体的には、このコードブロックを置き換える必要があります。

try:
    process = self.consul_template(
        file_path,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        log_level="debug",
        cwd=self.base_dir,
        timeout=1,
        env=env)
except subprocess.SubprocessError as ex:
    error_message = ex.stderr.decode()
    self.logger.error("Consul template has return an error:\n" +
                        error_message)
    raise
output = process.stdout.decode()
return hcl.loads(output[1:])

以下を使用するために skd.load_config_template 関数を追加:

return self.sdk.load_config_template(file_path, env=env)

サブプロセスの高度な機能を使用していた場合

注釈

ConsulTemplateLegacyTool はバージョン 1.22.1 から利用可能です。Genvid SDK 1.22.0 を使用している場合、このクラスを使用するには 1.22.1 にアップグレードする必要があります。

以前の API で、subprocess.CompletedProcess のインスタンスリターンを使用していた場合は、コード内でクラスから以前の処理を直接使用することができます。

ConsulTemplateLegacyTool として以前のものを含めています。

使用するには、Python のコードに以下の変更を加えてください。

変更前:

from genvid.toolbox import (
   ConsulTemplateTool,
   SDK,
)

class TutorialSample(ConsulTemplateTool):

変更後:

from genvid.toolbox import (
   ConsulTemplateLegacyTool,
   SDK,
)

class TutorialSample(ConsulTemplateLegacyTool):