Amazon Web Services ブログ

AWS IoT SiteWise のリソースを環境を跨いで複製する方法

はじめに

AWS IoT SiteWise アプリケーションをスケーリングして本番環境に移行する際には、開発環境と QA 環境を本番環境から分離する一般的な CI/CD を採用することを検討します。この分離により、デプロイパイプラインを通じてこれらのアプリケーションのデプロイを自動化できます。また、共通のアセットモデルや階層を持つ複数の事業部門や産業拠点があり、それらを組織全体で共有して再利用したい場合もあります。このような場合、顧客は通常、開発環境と本番環境間あるいは異なる事業部門間において、別々の環境に異なる AWS アカウントを持っています。次の図は、開発環境が QA 環境や本番環境から切り離されている例を示しています。

AWS IoT SiteWise のリソースを環境間で複製できるようにするために、AWS IoT SiteWise ツールを作成しました。これは AWS IoT SiteWise のアセットモデル、アセットAWS IoT SiteWise モニターダッシュボードAWS CloudFormation テンプレートにエクスポートできるユーティリティセットです。エクスポートされたテンプレートを使用して、リソースを別の AWS 環境に再作成できます。このブログでは、AWS IoT SiteWise ツールを使用してモデルをエクスポートするサンプルの手順と、CI/CD パイプラインでエクスポートと複製のプロセスを自動化するためのサンプルアーキテクチャを紹介します。

アセットモデルエクスポートの概要

AWS IoT SiteWise ツールリポジトリのユーティリティは、特定のユースケースに必要なリソースのみを複製する柔軟性を提供します。 AWS IoT SiteWise アセットモデルのみをエクスポートするか、対応するアセットと AWS IoT SiteWise モニターダッシュボードもエクスポートするかを選択できます。 エクスポートツールは、コマンドラインから手動で使用できます (例: アセットモデルを別の環境に 1 回限りエクスポートする場合など) 。また、CI/CD デプロイシナリオの自動化パイプラインに統合することもできます。 このユーティリティは、同じアカウント内のマルチリージョンデプロイの AWS IoT SiteWise リソースをコピーするためにも使用できます。 AWS IoT SiteWise ツールリポジトリには、各ユーティリティの使用方法が詳細にドキュメント化されていますが、ツールの基本的なデモンストレーションとして、以下のように CNC マシン生産ラインの 2 つのアセットモデルを作成しました。 各モデルには、プロパティと 2 つのモデル間の階層関係が含まれています。

簡単にするために、モデルのみをエクスポートします。AWS IoT SiteWise エクスポートツールを使用して、オプションでエクスポートするリージョンを指定し、他のフラグを付けずにコマンドを実行します (アセットもモデルとともにエクスポートする場合は、単純に -a、—assetsフラグを追加します)。 コマンドの出力は次のようになります。

コマンドが成功すると、CloudFormation テンプレートがローカルディレクトリ内の cfnexport というフォルダに保存されます。 例の場合、CloudFormation は次のようになります:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "SiteWise Export",
    "Resources": {
        "CNCMachineResource": {
            "Type": "AWS::IoTSiteWise::AssetModel",
            "Properties": {
                "AssetModelName": "CNC Machine",
                "AssetModelProperties": [
                    {
                        "Name": "SpindleSpeed",
                        "DataType": "DOUBLE",
                        "Unit": "RPM",
                        "Type": {
                            "TypeName": "Measurement"
                        },
                        "LogicalId": "SpindleSpeed9f2e03dd"
                    }
                ],
                "AssetModelHierarchies": []
            }
        },
        "ProductionLineResource": {
            "Type": "AWS::IoTSiteWise::AssetModel",
            "Properties": {
                "AssetModelName": "Production Line",
                "AssetModelProperties": [
                    {
                        "Name": "Location",
                        "DataType": "STRING",
                        "Type": {
                            "TypeName": "Attribute",
                            "Attribute": {}
                        },
                        "LogicalId": "Locationafc85231"
                    }
                ],
                "AssetModelHierarchies": [
                    {
                        "Name": "CNC Machines",
                        "ChildAssetModelId": {
                            "Ref": "CNCMachineResource"
                        },
                        "LogicalId": "CNCMachines"
                    }
                ]
            }
        }
    }
}
JSON

この CloudFormation テンプレートを別のリージョンまたは別の AWS アカウントで展開して、上記で定義したのと同じアセットモデルを作成できます。

以上で、エクスポートユーティリティの仕組みを理解できました。次のセクションでは、ユーティリティを CI/CD パイプラインに統合するアーキテクチャの例を紹介します。

CI/CD アーキテクチャ例

このサンプルアーキテクチャでは、CloudFormation と AWS SDK を使用して AWS サービスをデプロイできる既存の CI/CD パイプラインがあることを前提としています。

ビルド

アーキテクチャの構築段階では、CI/CD パイプラインがソース環境で Step Functions ワークフローを開始します。このワークフローでは、アセットモデル、アセット、ダッシュボードなどのリソースタイプごとに 1 つずつ、合計 3 つの Lambda 関数が実行されます。Lambda 関数を並行して実行し、エクスポートユーティリティを使用して AWS IoT SiteWise サービス API にクエリを実行し、複製するリソースに対応する CloudFormation テンプレートを生成できます。その後、Lambda 関数は生成されたファイルを Amazon S3 バケットに保存し、パイプラインのデプロイ段階で使用できるようにします。S3 バケットでは、すべての AWS 環境で共通の共有バケットを使用するか、S3 レプリケーションを使用して各環境ごとのバケット間でファイルを自動的にコピーできます。

デプロイ

デプロイ段階では、AWS IoT SiteWise リソースをターゲット環境で特定の順序 (アセットモデル、アセット、ダッシュボードの順) で作成または変更する必要があります。そのためには、AWS Step Functions ワークフローの状態をリソースタイプごとに定義し、適切な順序で実行するようにワークフローを設定します。各ワークフローのステートは、S3 内の対応する CloudFormation テンプレートを参照する Lambda 関数タスクを呼び出します。リソースはまず CI/CD パイプラインで作成する必要があるため、最初のワークフローデプロイタスクで CloudFormation スタックが作成されます。 スタックが作成されると、それ以降の CI/CD パイプラインからの更新では、ワークフローと AWS Step Functions を使用してそれらのスタックが更新され、AWS IoT SiteWise リソースが変更および更新されます。アセットとダッシュボードの状態は、前の状態が CloudFormation へのデプロイを完了するまで待ってから開始します。これは、リソースを作成する前にリソースが存在する必要があるためです。アーキテクチャ図は以下のようになります。

本番環境のワークロードでは、お客様はデプロイパイプラインで CloudFormation の変更セットを使用し、CloudFormation の更新が行われる前に手動の承認ゲートをセットして確認ができます。ダッシュボードがプラインでのデプロイ対象である場合は、ターゲット環境内に AWS IoT SiteWise Monitor ポータルをあらかじめ作成しておく必要があります。

まとめ

このブログ記事では、AWS IoT SiteWise リソースを AWS 環境間で複製するための AWS IoT SiteWise ツールを紹介し、それらをデプロイパイプラインに統合するアーキテクチャ例を示しました。IT インフラストラクチャとアプリケーションのデプロイに関しては、組織ごとに要件、手順、ツールが異なります。そのため、お客様の要件に合わせてアーキテクチャを柔軟に調整し、特定の自動化パイプラインに統合できるようにツールを設計しました。こちらのツールの改善や追加のために、お気軽にリポジトリにプルリクエストを送信してください。

About the Authors

Sebastian Salomon は、AWS のシニア IoT データアーキテクトです。IIoT、自動車、O&G、スマートホーム、スマートシティ、マイニング、データウェアハウス、ビッグデータプラットフォームなど、さまざまな分野の IoT アーキテクチャで 7 年以上の経験があります。最近では、スケーラブルな MLOps プラットフォームを通じて AI を IoT に取り込む活動に注力しています。AWS プロフェッショナルサービスのメンバーとして、さまざまな規模や業界のお客様と協力して、さまざまなエンドツーエンドの IoT ソリューションを設計および実装しています。
Ashok Padmanabhan は、製造分野におけるビッグデータ分析とインダストリー 4.0 ソリューションに焦点を当てた AWS プロフェッショナルサービスのシニア IoT データアーキテクトです。
Mihai Lucaciu は、16 年以上の経験を持つ AWS プロフェッショナルサービスのシニア IoT データアーキテクトとして、産業データ、エッジ分析、クラウドサービスに関するさまざまなプロジェクトのソリューションアーキテクチャ、設計、実装でお客様を支援しています。
Tim Wilson は、AWS の公共部門パートナー組織の IoT 支援スペシャリストです。AWS 公共部門のパートナーと協力して、彼らの AWS IoT サービスとソリューションの運用と活用をサポートしています。AWS の公共部門事業が比較的小規模だった 2012 年に、ソリューションアーキテクトとして AWS に入社しました。また、AWS で IoT プロトタイピングラボを管理したり、AWS エグゼクティブブリーフィングセンターでテクニカルプレゼンターを務めたこともあります。

この記事は Sebastian Salomon, Ashok Padmanabhan, Mihai Lucaciu, Tim Wilson によって書かれた How to replicate AWS IoT SiteWise resources across environments の日本語訳です。この記事は Solutions Architect の 西亀真之 が翻訳しました。