Amazon Web Services ブログ
AWS Greengrass – 接続されたデバイスでの AWS Lambda 関数の実行
私が re:Invent 中に公開した投稿 (「AWS Greengrass – ユビキタスなリアルワールドコンピューティング」) で、初めて AWS Greengrass についてご紹介しました。その時点で限定プレビューの Greengrass の提供を開始し、関心をお持ちの場合はぜひサインアップしていただくよう皆様にお願いしました。そのときに説明したように、AWS の多くのお客様はフィールドでのデータの収集と処理を希望していますが、フィールドでの接続は低速で、中断したり信頼性が低くなったりすることが少なくありません。Greengrass では、AWS のプログラミングモデルを小型でシンプルなフィールドベースのデバイスに拡張することができます。これは AWS IoT と AWS Lambda 上に構築されていて、AWS Cloud で利用できる、増え続けるさまざまなサービスへのアクセスがサポートされます。Greengrass では、フィールドで実行され、AWS リージョンへ継続的な高帯域幅接続に依存しないコンピューティング、メッセージング、データキャッシュ、および同期の各サービスにアクセスできます。Python 2.7 で Lambda 関数を記述し、デバイスシャドウを使用して状態を維持しながら、クラウドから Greengrass デバイスにデプロイできます。デバイスと周辺機器は、クラウドを経由しないローカルメッセージングを使用して相互に通信できます。
一般提供を開始
本日、AWS は US East (Northern Virginia) および US West (Oregon) リージョンで Greengrass の一般提供を開始しました。プレビュー中に AWS のお客様は Greengrass を実際に体験し、アプリケーションやビジネスの構築を開始できました。これらの初期的な成功のいくつかは、この投稿の後半でお知らせします。Greengrass Core コードは各デバイスで実行されます。デバイスに Lambda アプリケーションをデプロイして実行し、セキュアなネットワークでローカル MQTT メッセージングをサポートして、デバイスとクラウド間の対話がセキュアな接続で行われるようにします。Greengrass Core は、Lambda 関数を含む、セキュアな無線によるソフトウェア更新もサポートします。これには、メッセージブローカー、Lambda ランタイム、Thing Shadows の実装、およびデプロイエージェントが含まれます。Greengrass Core および (オプションで) その他のデバイスにより、Greengrass グループが構成されます。グループには設定データ、Greengrass Core のデバイスと ID のリスト、Lambda 関数のリスト、およびメッセージの送信先を定義するサブスクリプションのセットが含まれます。このすべての情報は、デプロイプロセス中に Greengrass コアデバイスにコピーされます。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 検出サービスやルート CA のダウンロードのサポートなど、いくつか追加の機能があります。
AWS Greengrass Core SDK – この SDK は、他の Lambda 関数のローカル呼び出し、メッセージの発行、Thing Shadows との連携が可能な API を提供します。Greengrass Core は、OverlayFS およびユーザー名前空間の機能を有効にしたバージョン 4.4.11 (またはそれ以降) の Linux カーネルを持つ x86 および ARM デバイスで実行できます。Greengrass のほとんどのデプロイは専門的な工業用ハードウェアを対象としていますが、デプロイおよびテスト目的で Raspberry Pi または EC2 インスタンスで Greengrass Core を実行することもできます。この投稿では、WiFi 経由で私の自宅のホームネットワークに接続された BrickPi に Raspberry Pi をアタッチして使用しました。
Raspberry Pi、BrickPi、ケース、およびその他すべてのパーツは、BrickPi 3 Starter Kit に用意されています。これらをすべて組み合わせて使用するには、Linux コマンドラインの関するいくらかの専門知識と、手動の巧みな操作がほどほど必要になりますが、私ができるのであれば、お客様も確実にできるでしょう。
Greengrass の実行
Greengrass はコンソール、API、または CLI からアクセスできます。私はコンソールを使用します。Greengrass コンソールの [Intro] ページでは、グループの定義、Greengrass Core の追加、およびグループへのデバイスの追加ができます。
[Get Started] をクリックし、[Use easy creation] をクリックします。
次に、グループに名前を付けます。
最初の Greengrass Core に名前を付けます。
準備ができたので、[Create Group and Core] をクリックします。
これは数秒間実行されてから、Greengrass Core とともに、ダウンロードできるセキュリティリソース (2 つのキーと証明書) が表示されます。
セキュリティリソースをダウンロードし、安全な場所に配置します。次に、目的のバージョンの Greengrass Core ソフトウェア (私の Raspberry Pi の場合は ARMv7l) を選択してダウンロードし、[Finish] をクリックします。次に、Pi を起動し、セキュリティリソースとソフトウェアを Pi にコピーします (S3 バケットに配置し、 wget
でダウンロードしました)。この時点でのシェル履歴は次のとおりです。
重要な更新: AWS セキュリティチームの鋭い同僚の 1 人が指摘したように、これはシークレットをデバイスに配布するための良い方法ではありません。AWS CLI を使用して、暗号化されたバケットからこれらをダウンロードするか、カットアンドペーストでコピーするか、USB キーを使用することができました。ユーザーガイドの指示に従って、新しいユーザーとグループを作成し、 rpi-update
スクリプトを実行して、 sqlite3
と openssl
を含むいくつかのパッケージをインストールします。数回の再起動後に、続行する準備ができました。次に、引き続き指示に従って Greengrass Core ソフトウェアを展開し、セキュリティリソースを最終的な場所 (/greengrass/configuration/certs
) に移動して、その過程で一般的な名前を付けます。ディレクトリは次のようになります。
次のステップは、AWS IoT Thing とコアの関連付けです。コンソールに戻り、クリックしてグループと Greengrass Core に移動して、Thing ARN を見つけます。
証明書と Thing ARN の名前を config.json
ファイルに挿入し、 iotHost
と ggHost
の不足しているセクションを入力します。
Greengrass デーモンを開始します (これは 2 回目の試行です。1 回目はパス名の 1 つで入力ミスがありました)。
コマンドラインでの時間を楽しんだ後 (Unix v7 や BSD 4.2 を使用していたころを思い出しました)、再びビジュアルに戻ります。AWS IoT ダッシュボードに移動すると、Greengrass Core が IoT への接続を実行していることがわかります。
Lambda コンソールに移動し、Python 2.7 ランタイムを使用して Lambda 関数を作成します (ここでは IAM ロールは関係ありません)。
通常の方法で関数を発行し、Greengrass コンソールに移動してグループをクリックし、Lambda 関数の追加を選択します。
次に、デプロイするバージョンを選択します。
また、関数をオンデマンドではなく長期間使用するよう設定します。
コードにより AWS IoT にメッセージが発行されるため、ソースとターゲットを指定してサブスクリプションを作成します。
サブスクリプションでトピックのフィルター (hello/world) も設定します。
設定を確認し、サブスクリプションを保存します。これで、コードをデプロイする準備ができました。再びグループにアクセスし、[Deployments] をクリックして、[Actions] メニューから [Deploy] を選択します。
[Automatic detection] を選択して続行します。
これが最初のデプロイである場合は、他の AWS のサービスにアクセスする権限を Greengrass に与えるサービスレベルロールを作成する必要があります。[Grant permission] をクリックします。
各デプロイの状態を確認できます。
コードは現在、Pi で実行されています。コードはトピック hello/world にメッセージを発行します。これは IoT コンソールに移動し、[Test] をクリックして、トピックにサブスクライブすることで表示されます。
メッセージは次のとおりです。
すべての設定作業を行ったら、新しいバージョンのコードをアップロード、発行、デプロイして反復性のある開発を行うことができます。私は BrickPi を使用して LEGO Technic モーターを制御し、一部のセンサーから収集したデータを公開する計画です。この投稿をお楽しみに。Greengrass の料金表 Greengrass Core は、AWS 無料利用枠の一部として、1 年間 3 つのデバイスで無料で実行できます。次のレベル (3~10,000 デバイス) では、2 つのオプションを利用できます。
- 従量制 – 1 か月、1 デバイスあたり 0.16 USD。
- 年間契約 – 1 年、1 デバイスあたり 1.49 USD (17.5% の節約)。
10,000 以上のデバイスで Greengrass Core を実行するか、より長期的を希望される場合は、当社までお問い合わせください。
すべての料金モデルの詳細は、Greengrass 料金表ページでご覧いただけます。
— Jeff;