Amazon Web Services ブログ
AWS Greengrass – AWS Lambdaをネットワーク接続性のあるデバイス上で動かす
私が最初に AWS Greengrassについて投稿したのは、re:Invent期間中でした。(AWS Greengrass -ユビキタス, 現実世界におけるコンピューティング)
我々は、ご興味をお持ちいただいたお客様を招待制という限定プレビューのかたちでローンチさせていただきました。
そのときに私がお知らせしたように、多くのAWSの顧客は、接続が遅く、時には断続的、信頼できない場合がある、現場でデータを収集して処理したいと考えています。Greengrassでは、AWSプログラミングモデルを小型で簡単なフィールドベースのデバイスに拡張することができます。 AWS IoTとAWS Lambdaをベースに構築されており、AWS Cloudで利用可能な多様なサービスへのアクセスをサポートしています。
一般利用可能
今日、Greengrassは米国東部(バージニア)と米国西部(オレゴン)のリージョンで一般利用可能になっています。プレビュー中、AWSのお客様はGreengrassでの実践的な体験を得て、その周辺のアプリケーションやビジネスの構築を開始できました。これらの初期の成功のいくつかをこの記事の後半で共有します。
Greengrass Coreコードは各デバイスで実行されます。これにより、Lambdaアプリケーションをデバイスにデプロイして実行し、セキュアなネットワーク上でローカルMQTTメッセージングをサポートし、デバイスとクラウド間の通信がセキュアな接続を介して行われるようにします。 Greengrass Coreは、Lambda機能を含む安全な無線ソフトウェアアップデートもサポートしています。これには、メッセージブローカー、Lambdaランタイム、Thing Shadowsインプリメンテーション、およびデプロイメントエージェントが含まれます。 Greengrass Coreと(オプションで)他のデバイスがGreengrass Groupを構成します。グループには、構成データ、デバイスのリストとGreengrass CoreのID、Lambda関数のリスト、およびメッセージの送信先を定義するサブスクリプションのセットが含まれています。この情報はすべて、deploy中にGreengrass Core デバイスにコピーされます。
Lambda関数で3つの異なるSDKでAPIを使用できます:
- AWS SDK for Python –このSDKを使用すると、コードをAmazon Simple Storage Service(S3)、Amazon DynamoDB、Amazon Simple Queue Service(SQS)、その他のAWSサービスと対話できます。
- AWS IoT Device SDK – このSDK(Node.js、Python、Java、およびC ++で使用可能)は、ハードウェアデバイスをAWS IoTに接続するのに役立ちます。 C ++ SDKには、Greengrass Discovery ServiceへのアクセスやルートCAダウンロードのサポートなど、いくつかの追加機能があります。
- AWS Greengrass Core SDK – このSDKは、他のLambda関数のローカル呼び出しを可能にし、メッセージのpublish、Thing Shadowを扱うAPIを提供します。
GreenGrass Coreは、バージョン4.4.11(またはそれ以上)のLinuxカーネル x86デバイスおよびARMデバイス上で、OverlayFSおよびユーザーネームスペース機能を有効にすることで実行できます。 Greengrassのほとんどのデプロイメントは専門の工業用ハードウェアを対象にしていますが、Raspberry PiまたはEC2インスタンスで開発およびテスト目的でGreengrass Coreを実行することもできます。
この投稿に関しては、BrickPiに接続したRaspberry Piを使用しました。私のホームネットワークにWiFi経由で接続しました。
Raspberry Pi、BrickPi、ケース、および他のすべてのパーツは、BrickPi 3スターターキットで利用できます。これらには、幾つかのLinux コマンドラインの知識や、取り扱うための専門知識が必要となりますが、私でも出来ましたので、きっとあなたもできるはずです。
Greengrass の動作
コンソール、API、またはCLIからGreengrassにアクセスできます。 私はコンソールを使用します。 Greengrass Consoleのイントロページでは、グループの定義、Greengrassコアの追加、デバイスのグループへの追加ができます:
Get Startをクリックし、USE easy creationを選択します:
グループに名前をつけます:
そして、Greengrass Coreにも名前をつけます
次のスッテプへすすみます。Create Group and Coreをクリックします。
生成に数秒かかりますが、セキュリティリソース(2つの鍵と証明書)および、Greengrass Coreのダウンロード画面が表示されます。
セキュリティリソースをダウンロードして安全な場所に置いて、Greengrass Coreソフトウェア(今回は投稿では、Raspberry Pi用のARMv7l)の希望のバージョンを選択してダウンロードし、Finishをクリックします。
私のRaspberryPiの電源を入れ、セキュリティリソースとソフトウェアをコピーします(私はそれらをS3バケットに入れ、wgetでそれらを取得しました)。 その時点でのシェルのhistoryは次のとおりです。
ユーザーガイドの指示に従って、新しいユーザーとグループを作成し、rpi-updateスクリプトを実行し、sqlite3とopensslを含むいくつかのパッケージをインストールします。 数回の再起動後、私は続行する準備が整いました!
次にGreengrass Coreの解凍を行い、/greengrass/cofiguration/certsにセキュリティリソースを移動させ、一般的な方法で名前をつけました。私のディレクトリは以下のようになっています:
次の手順として、CoreとAWS IoTのThingとの関連付けを行います。コンソール上からGroup , Greengrass Coreを選択してThing ARNを確認します:
証明情報とThing ARNの名前を config.jsonファイルに挿入し、iotHostとggHostの情報についても追加します:
Greengrassのdeamonを起動します(最初の投稿でtypoが合ったので2度めの添付になります):
コマンドラインでこの楽しい時間を過ごした後(私のUnix v7とBSD 4.2)、もう一度ビジュアルに行く時間です! AWS IoTダッシュボードにアクセスして、Greengrass CoreがIoTと接続していることを確認します。
LambdaのコンソールでPython2.7のLambda関数を作成します(ここではIAMは気にしません):
通常どおりのLambda関数を作成し、Greengrassコンソールから自分のグループを選択しLambdaを追加します:
そして、deployするバージョンを選択します:
関数の設定として、on-demandではなく、log-livedを選択します。
私のコードがAWS IoTへpublishメッセージを送信することになるので、ソースと宛先を指定してサブスクリプションを作成します。
topic filterに (hello/world) を設定します:
自分の設定を確認してサブスクリプションを保存します。私は自分のコードをdeployする準備ができています。 グループに戻ってDeploymentsをクリックし、ActionsメニューからDeployを選択します:
Automatic detectionを選択します:
これが初めてのデプロイメントであるため、Greengrassに他のAWSサービスへのアクセス権を与えるサービスレベルのロールを作成する必要があります。 私は単に許可をクリックします:
それぞれのdeploy状況を確認することができます:
コードは今、私のraspberyy Piで実行されています! トピックhello / worldにメッセージをpublishします。 IoTコンソールに行き、Testをクリックして、トピックにサブスクライブすることでそれらを見ることができます:
ここにメッセージが表示されます:
セットアップ作業についての考慮がされており、新しいバージョンのコードをアップロード、公開、およびdeployすることで、反復開発を行うことができます。 私はBrickPiを使用していくつかのLEGO Technicモーターを制御し、一部のセンサーから収集したデータを公開する予定です。
Greengrassの価格
3デバイスまでは、Greengrass CoreをAWS Free Tierの一部として1年間無料で使用できます。 次のレベル(3〜10,000個のデバイス)では、2つのオプションを使用できます。
利用に応じた毎月のお支払 – デバイスあたり月額0.16ドル。
年間のご利用予約 – 1デバイスあたり年間$ 1.49、17.5%節約の節約が可能です。
1万台以上のデバイスでGreengrass Coreを稼働させたい、または長期的なコミットメントをしたい場合は、私たちに連絡してください。 すべての価格設定モデルに関する詳細はGreengrass Pricingページに記載されています。
– jeff (原文はこちら)
翻訳はSA小梁川が担当しました。