Greengrass Development Kit CLI(GDK CLI)の新バージョン v1.1.0 を試してみた
以前「Greengrass Development Kit CLI」をご紹介したことがありますが、この記事を書いたすぐ後に新バージョンが出ていました。
GitHub のリポジトリも特に Watch しておらず約 2 ヶ月遅れで気がついたのですが、今回簡単に触ってみたので紹介したいと思います。
変更点
今回のリリースでは 次の 5 つの新機能といくつかのバグの修正と改善が行われました。
- Gradle によるビルドシステムのサポート
- Windows デバイスでの Maven によるビルドシステムのサポート
--bucket
オプションの追加- GDK CLI がアーティファクトをアップロードする S3 バケットを指定可能になりました。
--name
オプションの追加- GDK CLI で初期化するディレクトリを指定可能になりました。
- S3バケットには存在するが、ローカルコンポーネントビルドフォルダーには存在しないコンポーネントアーティファクトのサポートを追加
また今回のバージョンから Python のバージョン要件が 3.8 から 3.6 に下がりました。
新機能を試す
今回は 5 つの新機能のうち、新たに追加されたオプションを試してみたいと思います。
GDK CLI のバージョンアップ
試す前に、GDK CLI をバージョンアップしておきましょう。
現在は、1.0.0
がインストールされています。
$ gdk --version gdk 1.0.0
下記のコマンドでバージョンを指定してアップデートします。
$ python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.1.0
最新バージョンになりました。
$ gdk --version gdk 1.1.0
--name
オプションを試す
これまでは、事前に作業ディレクトリを作成しておく必要がありましたが、初期化の際に--name
オプションを付けることで、自動的に指定ディレクトリが作成されて初期化までできるようになりました。
$ gdk component init \ -l python \ --name MyTest \ -t HelloWorld
これで Python のHelloWorld
テンプレートを使ってディレクトリが初期化されました。
なお、ビルド時にこのディレクトリ名でアーティファクトが作成される点は変わりません。
(ビルドシステムに zip を指定していれば、MyTest.zip
というアーティファクトがローカルに作成されます。)
ビルド準備
コンポーネントをビルドするために、前回の記事のように各ファイルを編集していきます。
gdk-config.json
の編集
下記の内容に編集します。
{ "component": { "com.example.MyTest": { "author": "CM-ICHIDA", "version": "NEXT_PATCH", "build": { "build_system": "zip" }, "publish": { "bucket": "gdk-mytest", "region": "ap-northeast-1" } } }, "gdk_version": "1.0.0" }
recipe.yaml
の編集
レシピファイルも次のように修正します。
Artifacts
のURI
に指定するアーティファクトのファイル名は、後で実行するビルド作業時に生成されるファイル(MyTest.zip
)に合わせておきましょう。
--- RecipeFormatVersion: "2020-01-25" ComponentName: "{COMPONENT_NAME}" ComponentVersion: "{COMPONENT_VERSION}" ComponentDescription: "This is GDK v1.1.0 Test component written in Python." ComponentPublisher: "{COMPONENT_AUTHOR}" ComponentConfiguration: DefaultConfiguration: Message: "GDK v1.1.0" Manifests: - Platform: os: all Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/MyTest.zip" Unarchive: ZIP Lifecycle: Run: "python3 -u {artifacts:decompressedPath}/MyTest/main.py {configuration:/Message}"
main.py
の編集
既存のままでもいいですが、前回同様に次のような内容にしました。
import sys import datetime import time message = "Hello, %s! Current time: %s." % (sys.argv[1], datetime.datetime.now()) while(True): # Print the message to stdout. print(message) # Append the message to the log file. with open('/tmp/Greengrass_MyTest.log', 'a') as f: print(message, file=f) time.sleep(5)
build
準備ができたのでビルドします。
$ gdk component build
publish で--bucket
オプションを試す
これまではgdk-config.json
で S3バケットを指定すると、次のような書式の名前で S3 バケットが作成されて、アーティファクトがアップロードされていました。
(「バケットプレフィックス」と「リージョン」はgdk-config.json
で定義したものになります。)
[バケットプレフィックス]-[リージョン]-[アカウントID]
今回の--bucket
オプションで S3 バケットを指定すると、指定した名前の通りのバケットが作成されるので、これまでのような「リージョン」や「アカウントID」などが入らないバケット名で作成されます。
(S3 バケットは全アカウントで一意である必要があるので、以前よりも一意性に留意した名前を付けるよう気をつける必要はあります)
では--bucket
オプションを使って publish してみましょう。
試しにdetarame
(でたらめ)という名前のバケットを指定してみたいと思います。
$ gdk component publish --bucket detarame
ログに下記のようなメッセージが出ており、オプションで指定した名前の S3 バケットが作成されていました。
[2022-04-14 15:18:00] INFO - Successfully created the artifacts bucket 'detarame' in region 'ap-northeast-1'
S3 のコンソールでもdetarame
バケットが作成されていて、アーティファクトがアップロードされていることが確認できました。
Greengrass V2 のコンソールでもコンポーネントが作成されていることが確認できました。
また、この画面の一番下にあるアーティファクトの表示でも、対象のバケットdetareme
にあるアーティファクトが参照されていることが分かります。
なお、--bucket
オプションを指定しなければ従来のようにgdk-config.json
の設定に基づいた下記のようなバケット名が作成されます。
[バケットプレフィックス]-[リージョン]-[アカウントID]
今回のgdk-config.json
の内容であれば、gdk-mytest-ap-northeast-1-123456789123
といったバケットが作成されます。
なお、--bucket
オプションを指定した場合はオプションが優先されるので、gdk-config.json
で指定したバケット名は使われません。
また、デフォルトでは GDK CLI で作成される S3 バケットは、下記の画像のように「パブリックアクセスのブロック」が無効になっているので必要に応じて変更して下さい。
「パブリックアクセスのブロック」が有効でも Greengrass へのコンポーネント登録や、デバイスへのコンポーネントのデプロイに影響はありません。
最後に
軽微なアップデートですが、バケット名が指定できるようになったのでコンポーネント作成の CI/CD のパイプライン設定が少し楽になったのではないかと思っています。
この点については、改めて検証してみたいと思います。
以上です。