メインコンテンツまでスキップ

「IoT」タグの記事が11件件あります

全てのタグを見る

· 約3分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

AWS IoTのフリートプロビジョニング機能が面白そうだなぁと思ってAWS IoT Device SDK for PythonのGitHubのREADMEを眺めていると ## New Version Available の文字が!!!

AWS IoT SDK for Python v2が出てました。 https://github.com/aws/aws-iot-device-sdk-python-v2 (呼び方はAWS IoT SDK for Python v2なのかaws-iot-device-sdk-python-v2なのかAWS IoT Client SDK for Pythonなのかよくわかりません)

READMEによると

This SDK is built on the AWS Common Runtime, a collection of libraries written in C to be cross-platform, high-performance, secure, and reliable.

だそうです。

さらにv2はフリートプロビジョニングのAPIにもすでに対応しており、サンプルも含まれています。 今後はv2が主流でしょうか。

AWSのブログで紹介されていたサンプルと同じ内容をv2で試してみました。

フリートプロビジョニングを用いて、IoTデバイスとAWS IoT Coreの初期セットアップを自動化する方法

環境

Mac Python 3.8.2

AWS IoT SDK for Python v2のインストール

git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
pip install ./aws-iot-device-sdk-python-v2

ブートストラップ証明書の配置

証明書は以下の場所に配置しました。

console
.
├── aws-iot-device-sdk-python-v2
└── certs
├── bootstrap-certificate.pem.crt
├── bootstrap-private.pem.key
└── root.ca.pem

サンプルの実行

templateNametemplateParametersはいい感じに修正ください。

cd aws-iot-device-sdk-python-v2/samples/

python fleetprovisioning.py \
--endpoint xxxxxxxxxx.iot.ap-northeast-1.amazonaws.com \
--root-ca ../../certs/root.ca.pem \
--cert ../../certs/bootstrap-certificate.pem.crt \
--key ../../certs/bootstrap-private.pem.key \
--templateName production_template \
--templateParameters '{"SerialNumber": 9999, "hasValidAccount": false}'

実行結果(ところどころ伏せたり端折ったりしてます)

Connecting to xxxxxxxxxx.iot.ap-northeast-1.amazonaws.com with client ID 'samples-client-id'...
Connected!
Subscribing to CreateKeysAndCertificate Accepted topic...
Subscribing to CreateKeysAndCertificate Rejected topic...
Subscribing to RegisterThing Accepted topic...
Subscribing to RegisterThing Rejected topic...
Publishing to CreateKeysAndCertificate...
Waiting... CreateKeysAndCertificateResponse: null
Published CreateKeysAndCertificate request..
Received a new message awsiot.iotidentity.CreateKeysAndCertificateResponse(certificate_id='xxxxxxxxxx', certificate_ownership_token='xxxxxxxxxx', certificate_pem='-----BEGIN CERTIFICATE-----\nxxxxxxxxxx\n-----END CERTIFICATE-----\n', private_key='-----BEGIN RSA PRIVATE KEY-----\nxxxxxxxxxx\n-----END RSA PRIVATE KEY-----\n')
Publishing to RegisterThing topic...
Waiting... RegisterThingResponse: null
Published RegisterThing request..
Received a new message awsiot.iotidentity.RegisterThingResponse(device_configuration={}, thing_name='born_9999')
Exiting Sample: success
Disconnecting...
Disconnected.

参考サイト

https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/provision-wo-cert.html https://aws.amazon.com/jp/about-aws/whats-new/2020/04/announcing-general-availability-of-aws-iot-core-fleet-provisioning/ https://aws.amazon.com/jp/blogs/news/how-to-automate-onboarding-of-iot-devices-to-aws-iot-core-at-scale-with-fleet-provisioning/ https://qiita.com/tatsuhiroiida/items/46ef5035f99b304d3d6f

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

いきなりですがまとめです。

  • OTA更新は/greengrass/ggc/core/greengrassdではなく/greengrass/ota/ota_agent/ggc-otaが起動している必要がある
  • 更新モジュールはS3からとってきている
  • マネジメントコンソールでGreengrass Core 更新ジョブを作成する(APIも存在する)
  • Greengrass Core ソフトウェアだけでなくGreengrass Core OTA エージェントの更新も可能(別々に実施する必要がある)
  • ジョブ作成後、即座に反映される
  • 更新の前後に自前のスクリプトを実施させることが可能。
    更新前にsystemctl stopして、更新後にsystemctl startするんだと思う。
    ただし、OTAエージェントの更新前にstopすると、OTAエージェントの更新が途中で止まってしまったので、こっちは何もしなくて良さそう。
  • 2020/6/6に試したところ、OTA エージェントのバージョンを更新すると、ダウングレードする気がする

検証内容

環境

Docker上で検証(Docker Desktop 2.2.0.4 on Mac)

Greengrass(更新前) v1.10.0 OTAエージェント v1.2.0

Docker関連

FROM amazon/aws-iot-greengrass:1.10.0-amazonlinux

RUN yum install -y procps sysvinit-tools wget

OTA更新時に必要なものがあるので、追加インストールします。

docker-compose.yml
version: '3'
services:
greengrass:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./greengrass/certs:/greengrass/certs
- ./greengrass/config:/greengrass/config
- ./greengrass/deployment:/greengrass/ggc/deployment
- ./greengrass/log:/greengrass/ggc/var/log
- ./greengrass/usr:/greengrass/usr
- ./greengrass/var/log/greengrass:/var/log/greengrass
- ./workspace:/workspace
restart: always
privileged: true
command: /sbin/init
environment:
TZ: Asia/Tokyo
tty: true

volumesでcertsconfigをマウント。その他はログを見たりするためにマウントしました。

OTAエージェントのログは、Greengrass Coreのログとは別に/var/log/greengrassに出力されます。(Greengrass Coreのログは/greengrass/ggc/var/log

systemdを使用したいのでprivileged: truecommand: /sbin/initを追加しました。

systemd関連

[Unit]
Description=Greengrass Daemon

[Service]
Type=forking
PIDFile=/var/run/greengrassd.pid
Restart=on-failure
ExecStart=/greengrass/ggc/core/greengrassd start
ExecReload=/greengrass/ggc/core/greengrassd restart
ExecStop=/greengrass/ggc/core/greengrassd stop

[Install]
WantedBy=multi-user.target
[Unit]
Description=Greengrass OTA Agent

[Service]
Type=forking
PIDFile=/var/run/ggc-ota.pid
Restart=on-failure
KillMode=mixed
ExecStart=/greengrass/ota/ota_agent/ggc-ota
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
bash-4.2# systemctl enable greengrass.service
bash-4.2# systemctl enable greengrass_ota.service

bash-4.2# systemctl start greengrass.service
bash-4.2# systemctl start greengrass_ota.service

Greengrass設定

config.json
{

"coreThing": {

},
"runtime": {

},
"managedRespawn": true

}
/greengrass/usr/scripts/ggc_pre_update.sh
systemctl stop greengrass.service
systemctl start greengrass.service

ota_pre_update.shota_post_update.shも配置できるので、同様にstopしてみたのですが、OTAエージェントの更新が途中で止まってしまいました。OTAエージェントは事前のstopも事後のstartも不要な感じです。

検証

OTA更新前の状態

bash-4.2# ls -l /greengrass/ggc/packages/
total 4
drwxr-xr-x 1 root root 4096 Jun 6 21:13 1.10.0

bash-4.2# ls -l /greengrass/ota/
total 4
lrwxrwxrwx 1 root root 16 Nov 26 2019 ota_agent -> ota_agent_v1.2.0
drwxr-xr-x 1 root root 4096 Jun 6 21:13 ota_agent_v1.2.0

bash-4.2#

OTA更新後の状態

bash-4.2# ls -l /greengrass/ggc/packages/
total 4
drwxr-xr-x 8 root root 4096 Jun 6 21:57 1.10.1_1

bash-4.2# ls -l /greengrass/ota/
total 4
lrwxrwxrwx 1 root root 21 Jun 6 21:55 ota_agent -> ./ota_agent_v1.0.0_1/
drwxr-xr-x 4 root root 4096 Jun 6 21:55 ota_agent_v1.0.0_1

bash-4.2#

OTAエージェントがバージョンダウンしてるよね?

参考にしたサイト

 https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/core-ota-update.html  https://qiita.com/mikene_koko/items/4c71c969f55e3fe24190  https://qiita.com/snaka/items/48c0998ffa1e34975a6f  https://qiita.com/a_yasui/items/f2d8b57aa616e523ede4

· 約5分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

とうとうAmazon FreeRTOSにも手を出しました。

環境

デバイス

  • ESP32-DevKitC

開発環境

  • Ubuntu 18.04 (on VirtualBox)

チュートリアルやってみました

基本的にはドキュメントのとおりです。

Getting Started with the Espressif ESP32-DevKitC and the ESP-WROVER-KIT https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html

IAMユーザーの準備

手順の途中でIoTのThingを作ったり証明書を作ったりする手順があります。これらの手順は便利ツールが用意されているのでかんたんにできますが、便利ツールの実行に内部ではAWS CLIが使われているため、IAMユーザー(アクセスキー、シークレットアクセスキー)が必要です。必要な権限は

  • AmazonFreeRTOSFullAccess
  • AWSIoTFullAccess

開発環境の準備

ツールチェインの導入

Linuxの場合はこちらの手順です。

https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/linux-setup.html

sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache
mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

パスの設定をする。~/.profileに以下を追記

export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
alias get_esp32='export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"'

sudoなしで/dev/ttyUSB0にアクセスする権限を追加

sudo usermod -a -G dialout $USER

CMakeの導入

https://cmake.org/download/ からcmake-3.16.2-Linux-x86_64.shをダウンロードします。 その後インストール。インストール先は~/cmake-3.16.2-Linux-x86_64にしました。

chmod +x cmake-3.16.2-Linux-x86_64.sh
./cmake-3.16.2-Linux-x86_64.sh

パスの設定をする。~/.profileに以下を追記

export PATH="$HOME/cmake-3.16.2-Linux-x86_64/bin/:$PATH"

Amazon FreeRTOSのダウンロード

releaseブランチをclone

git clone https://github.com/aws/amazon-freertos.git --recurse-submodules -b release

AWS CLIのインストール

pipでインストールできるのは知ってましたが、他のインストール方法もドキュメント上あったのご参考までに。

https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

aws configureして、アクセスキー、シークレットアクセスキー、リージョンを設定する。

pythonの必要ライブラリーをインストール

pip install tornado nose --user
pip install boto3 --user

<amazon-freertos>/tools/aws_config_quick_start/configure.jsonに設定を書き込む。 afr_source_dirにはデフォルト値が入ってるのでそのまま(相対パス指定)で問題ありませんでした。 その後、以下のコマンド

cd <amazon-freertos>/tools/aws_config_quick_start
python SetupAWS.py setup

ビルドしてフラッシュ

さていよいよビルドしてフラッシュです。

ビルド

cd <amazon-freertos>
cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -S . -B build

ドキュメント上、your-build-directoryとありますが、後続のコメントはこれがbuildである前提で書かれてますのでご注意ください。

cd build
make all -j4

消して、書いて、モニターする。

cd <amazon-freertos>
./vendors/espressif/esp-idf/tools/idf.py erase_flash flash monitor -B build

ドキュメント中は-p /dev/ttyUSB1とあって、私の環境では、/dev/ttyUSB0でした。更にこの-pオプションがなかっても検出してくれるようなので、指定なしでも動きました。

めでたしめでたし。

デモをGreengrass接続のものに変更

ここに書いてある方法でできます。 https://docs.aws.amazon.com/freertos/latest/userguide/gg-demo.html

  • AWS IoTのマネジメントコンソール画面で、モノの中にあるFreeRTOSデバイスにアタッチした証明書にアタッチしているポリシーポリシードキュメントに、greengrassへのアクセス許可を追加
  • GreengrassグループのロールにAmazonS3FullAccess AWSIoTFullAccessを追加。
  • FreeRTOSのモノを、Greengrassグループのデバイスに追加。
  • GreengrassグループのサブスクリプションでソースをFreeRTOS、ターゲットをIoT Cloudにする
  • ソースコードの修正
<amazon-freertos>/vendors/espressif/boards/esp32/aws_demos/config_files/aws_demo_config.h
#define CONFIG_MQTT_DEMO_ENABLED
define CONFIG_GREENGRASS_DISCOVERY_DEMO_ENABLED

Greengrass接続のデモを、センサー値収集に変更

鋭意作成中 動作未確認

demos/greengrass_connectivity/aws_greengrass_discovery_demo.c
+ include "esp_adc_cal.h"

-#define ggdDEMO_MQTT_MSG_DISCOVERY "{\"message\":\"Hello #%lu from Amazon FreeRTOS to Greengrass Core.\"}"
+#define ggdDEMO_MQTT_MSG_DISCOVERY "{\"value\":\"%lu\"}"

+ esp_adc_cal_characteristics_t *adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
+ esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, ESP_ADC_CAL_VAL_DEFAULT_VREF, adc_chars);
+
+ uint32_t voltage;
+ IotLogInfo( "%lu", ( long unsigned int )voltage);
+ esp_adc_cal_get_voltage(ADC1_CHANNEL_6, adc_chars, &voltage);


- xPublishInfo.payloadLength = ( uint32_t ) sprintf( cBuffer, ggdDEMO_MQTT_MSG_DISCOVERY, ( long unsigned int ) ulMessageCounter ); /*lint !e586 sprintf can be used for specific demo. */
+ xPublishInfo.payloadLength = ( uint32_t ) sprintf( cBuffer, ggdDEMO_MQTT_MSG_DISCOVERY, ( long unsigned int ) voltage );

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

Greengrass Coreがv1.9.3でArmv6lをサポートしました。ラズパイZeroでもGreengrassが動作するようになりました。

https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/what-is-gg.html

久しぶりにGreengrassに触るので、Greengrassコネクタを使ってLチカをしてみました。 GreengrassコネクタにRaspberry Pi GPIOコネクタが用意されているので簡単です。

ラズパイZeroの準備

以下の公式ドキュメントに従って行います。

Raspberry Pi のセットアップ https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/setup-filter.rpi.html

モジュール 2: AWS IoT Greengrass Core ソフトウェアのインストール https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/module2.html

Greengrassの設定

リソースの追加

Raspberry Pi GPIOコネクタがGPIOにアクセスするため、リソースを設定します。

対象のGreengrassグループを選択し、リソースタブを表示し、ローカルリソースの追加ボタンを押します。

設定項目設定値
リソース名任意の名前
リソースタイプデバイス
デバイスパス/dev/gpiomem
グループ所有者のファイルアクセス許可リソースを所有するLinuxグループのOSグループアクセス許可を自動的に追加
Lambda関数の関連無指定でOK

コネクタの追加

Raspberry Pi GPIOコネクタを追加します。

対象のGreengrassグループを選択し、コネクタタブを表示し、コネクタの追加ボタンを押します。

Raspberry Pi GPIOを選択したあと、パラメータはこんな感じで指定しました。

設定項目設定値
Resource for /dev/gpiomem device作成したリソース
Input GPIO pins2 ※ボタンのGPIOピン番号
Input GPIO polling period50(millisecond)
Output GPIO pins17 ※LEDのGPIOピン番号

Lambdaの作成

ボタンが押された/離されたイベントで起動し、LEDのオン/オフを設定する処理を行います。試行錯誤したのであまりきれいではありませんが。。

import os
import greengrasssdk
import json
import sys
import logging

## Setup logging to stdout
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

iot_client = greengrasssdk.client('iot-data')

thingName = os.environ['AWS_IOT_THING_NAME']

def get_read_topic(gpio_num):
return '/'.join(['gpio', thingName, str(gpio_num), 'read'])

def get_write_topic(gpio_num):
return '/'.join(['gpio', thingName, str(gpio_num), 'write'])

def send_message_to_connector(topic, message=''):
iot_client.publish(topic=topic, payload=str(message))

def set_gpio_state(gpio, state):
send_message_to_connector(get_write_topic(gpio), str(state))

def read_gpio_state(gpio):
send_message_to_connector(get_read_topic(gpio))

def function_handler(event, context):
logger.info("Received message!")
logger.info(event)
logger.info(type(event))

# event
# 1 : button off
# 0 : button on

state = 0
if(event == 0):
state = 1
set_gpio_state(17, state)

return

LambdaにはAWS IoT Greengrass Core SDK for Pythonを含める必要があります。このあたりを参考にしました。

Lambda 関数の作成とパッケージ化 https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/create-lambda.html

Lambdaの追加

作成したLambdaをGreengrassに追加します。

対象のGreengrassグループを選択し、Lambdaタブを表示し、Lambdaの追加ボタンを押します。

設定項目設定値
Lambdaの追加既存の Lambda 関数の使用
Lambda の選択作成したLambda
Lambda バージョンの選択作成したLambdaのバージョン

サブスクリプションの追加

対象のGreengrassグループを選択し、サブスクリプションタブを表示し、サブスクリプションの追加ボタンを押します。

ボタンイベント -> Greengrassコネクタ -> Lambda呼び出し

ソースターゲットトピック
Raspberry Pi GPIOLambdagpio/+/ボタンのGPIOピン番号/state

Lambda -> Greengrassコネクタ -> LEDオンオフ

ソースターゲットトピック
LambdaRaspberry Pi GPIOgpio/+/LEDのGPIOピン番号/write

サブスクリプションをいじれば、クラウド経由でLチカも簡単です。

デプロイ

これで設定は完了です。デプロイしましょう。

· 約10分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

Ubuntu Core 18リリースのニュースを見たので、VirtualBoxで試してみました。

英Canonical、IoT向けとなる「Ubuntu Core 18」を公開。10年間のセキュリティアップデートを約束 https://mag.osdn.jp/19/01/23/163000

公式サイトにはKVMでのインストール手順がありましたが、VirtualBoxで試します。

Ubuntu Coreとは

上記サイトから引用すると以下の通りです。

Ubuntu Coreは、IoTや組み込み端末に向けたUbuntuベースのディストリビューション。コンテナでの利用にも適しているとしている。パッケージを最小構成にすることで260MBと軽量にし、セキュリティ、信頼性の向上も図っている。

試した環境

Mac : macOS High Sierra(10.13.6) VirtualBox : 6.0.4

インストール手順

KVMのインストール手順を参考に行います。

Install Ubuntu Core on KVM https://www.ubuntu.com/download/iot/kvm

Ubuntu SSOアカウントの作成

https://login.ubuntu.com/ からアカウントを作成します。

次に、SSHキーを作成します。

ssh-keygen -t rsa

いくつか質問されるので回答します。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxxxx/.ssh/id_rsa):[sshキーの名前。「/Users/xxxxxx/.ssh/ubuntu-sso_rsa」としました。]
Enter passphrase (empty for no passphrase):[パスフレーズ。空白も可]
Enter same passphrase again:[パスフレーズをもう一度]
Your identification has been saved in /Users/xxxxxx/.ssh/ubuntu-sso_rsa.
Your public key has been saved in /Users/xxxxxx/.ssh/ubuntu-sso_rsa.pub.

/Users/xxxxxx/.sshディレクトリーにubuntu-sso_rsaubuntu-sso_rsa.pubが作成されます。

SSHキーが作成できたら、ubuntu-sso_rsa.pubの内容をUbuntu SSOの管理画面に登録します。

Ubuntu Coreのダウンロード

arm64版のイメージをダウンロードします。 http://cdimage.ubuntu.com/ubuntu-core/18/stable/current/ubuntu-core-18-amd64.img.xz

xzフォーマットの展開にはThe Unarchiverを使いました。

HDDフォーマットの変換

ダウンロードしたイメージはRAWフォーマットのため、VirtualBoxで利用できるようにVDIフォーマットに変換します。

VBoxManage convertfromraw ubuntu-core-18-amd64.img ubuntu-core-18-amd64.vdi --format VMDK 

HDDのサイズも大きくしておきます

VBoxManage modifyhd ubuntu-core-18-amd64.vdi --resize 20480

仮想環境の構築

VirtualBoxの仮想環境を構築します。

ウィザードに従って作成しますが、HDDは先程作成したものを選択します。

スクリーンショット 2019-02-03 8.33.44.png

環境を作ったあと、設定を一部変更します。

[システム]->[アクセラレーション]の設定にある準仮想化インターフェイースを「なし」にします。 ここを変更しないとブートの途中で止まってしまいます。

スクリーンショット 2019-02-03 8.34.07.png

あとは、手順の最後にSSHしますのでネットワーク設定をブリッジアダプターにしておきましょう。

スクリーンショット 2019-02-03 8.34.18.png

起動、アカウント設定

しばらく、待つと以下の画面になります。のでEnterキーを押します。

スクリーンショット 2019-02-03 8.42.14.png

Enterキーを押します。

スクリーンショット 2019-02-03 8.42.25.png

ネットワーク設定の画面が出ますので、Doneを選択します。Tabキーで移動できます。

スクリーンショット 2019-02-03 8.42.37.png

Ubuntu SSOアカウントのメールアドレスを入力します。 英字キーボード設定なので、@Shiftキー+2です。

スクリーンショット 2019-02-03 8.42.56.png

これで終了です。

SSHでログイン

MacからSSHでログインします。

ssh [Ubuntu SSOのアカウント名]@[Ubuntu Coreの仮想環境のIPアドレス] -i [作成したSSHキー(ubuntu-sso_rsa)]

SSHキーが合っていれば、パスワード無しでログインできます。

つまずきポイント

  • ブートプロセスが途中で止まる → VirtualBoxで構築した環境の設定の準仮想化インターフェイースなしにします。
  • 初期設定中のメールアドレスが入力できない → 英字キーボードなので@Shiftキー+2です。
  • 初期セットアップ後にUbuntu SSOアカウントに登録したSSHキーを変更した → Ubuntu Coreの初期設定中にSSHキーが取得されるようなので、初期設定後にSSHキーを変更しても反映されないようです。はじめからやり直しましょう。(他の方法がわかりませんでした)

Ubuntu Core使ってみる

apt-getaptはなく、代わりにsnapをつかうようです。

$ apt-get update
-bash: apt-get: command not found
$ apt update
-bash: apt: command not found
$ snap --help
The snap command lets you install, configure, refresh and remove snaps.
Snaps are packages that work across many different Linux distributions,
enabling secure delivery and operation of the latest apps and utilities.

Usage: snap <command> [<options>...]

Commands can be classified as follows:

Basics: find, info, install, list, remove
...more: refresh, revert, switch, disable, enable
History: changes, tasks, abort, watch
Daemons: services, start, stop, restart, logs
Commands: alias, aliases, unalias, prefer
Configuration: get, set, wait
Account: login, logout, whoami
Permissions: interfaces, interface, connect, disconnect
Other: version, warnings, okay
Development: run, pack, try, ack, known, download

For more information about a command, run 'snap help <command>'.
For a short summary of all commands, run 'snap help --all'.

Docker → 動きそう

$ snap find docker
Name Version Publisher Notes Summary
docker 18.06.1-ce canonical✓ - Docker container runtime
docker-credential-pass v0.6.0 mvc-aaa - Keep Docker credentials safe.
img 0.4.6 bashfulrobot - Unprivileged Dockerfile & OCI compatible container img builder.
dry 0.9-beta.5 monch0 - A Docker manager for the terminal
convos 0.99.34 jhthorsen - Multiuser chat application that runs in your web browser
paradrop-agent 0.13.0 pd - Paradrop agent for managing an edge computing node
etcd 3.2.10 tvansteenburgh - Resilient key-value store by CoreOS
traefik-nacc 1.0.1 nacc - Træfik, a modern reverse proxy
j2 0.3.1-0 cmars - Command-line interface to Jinja2 for templating in shell scripts.
monexec v0.1.12-dirty reddec - Light supervisor with optional Consul autoregistration
$ sudo snap install docker
docker 18.06.1-ce from Canonical✓ installed
$ docker --version
Docker version 18.06.1-ce, build e68fc7a
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

AWS CLI → インストールできず

classic systemsってのが必要らしいですが、どうしていいかわからず

$ sudo snap install  aws-cli
error: snap "aws-cli" requires classic confinement which is only available on classic systems

classic環境ってのはまだstableではないらしい

$ snap info classic
name: classic
summary: Classic environment
publisher: Canonical✓
contact: snaps@canonical.com
license: Other Open Source
description: |
Classic environment
snap-id: QbSFwGGAgvG8zHl9nWLY7vEee8lhgFsp
channels:
stable: –
candidate: –
beta: 16.04 (26) 4kB devmode
edge: 16.04 (42) 12kB devmode
18/stable: –
18/candidate: –
18/beta: –
18/edge: 18.04-0.1 (37) 31MB devmode

--edge--devmode付きでclassic環境をインストール

$ sudo snap install classic --edge --devmode
classic (edge) 16.04 from Canonical✓ installed

それでもエラーは変わらず。

$ sudo snap install  aws-cli
error: snap "aws-cli" requires classic confinement which is only available on classic systems

classic環境ってのになると、apt-getができる模様

$ sudo classic 
(classic)xxxxx@localhost:~$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit:2 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Fetched 325 kB in 3s (101 kB/s)
Reading package lists... Done
(classic)xxxxx@localhost:~$

Ubuntu Coreの使い所がいまいち使い方がわからず。。 Greengrassがあると思ったんですが、まだなさそうです。

追記:普通のUbuntu 18.04の場合

普通のUbuntuでもsnapが使えて、更に、classicでのインストールができるようです。

ubuntu@ubuntu-VirtualBox:~$ snap info aws-cli
name: aws-cli
summary: Universal Command Line Interface for Amazon Web Services
publisher: aws
contact: https://console.aws.amazon.com/support
license: Apache-2.0
description: |
The AWS CLI is an open source tool built on top of the AWS SDK for Python
(Boto) that provides commands for interacting with AWS services. With
minimal configuration, you can start using all of the functionality
provided by the AWS Management Console from your favorite terminal program.
snap-id: CRrJViJiSuDcCkU31G0xpNRVNaj4P960
channels:
stable: 1.15.71 (135) 15MB classic
candidate: ↑
beta: ↑
edge: 1.16.18 (140) 21MB classic
ubuntu@ubuntu-VirtualBox:~$ sudo snap install aws-cli
[sudo] password for ubuntu:
error: This revision of snap "aws-cli" was published using classic confinement and thus may perform
arbitrary system changes outside of the security sandbox that snaps are usually confined to,
which may put your system at risk.

If you understand and want to proceed repeat the command including --classic.
ubuntu@ubuntu-VirtualBox:~$ sudo snap install aws-cli --classic
aws-cli 1.15.71 from 'aws' installed
ubuntu@ubuntu-VirtualBox:~$ aws --version
aws-cli/1.15.71 Python/3.5.2 Linux/4.15.0-29-generic botocore/1.10.70

参考サイト

https://kyrofa.com/posts/ubuntu-core-on-virtualbox