AWS
lambda
lex
Sumerian

Amazon SumerianでEC2を起動してくれるおじさんを作る

Amazon Sumerianのプレビュー版を触ってみての雑記です。

Sumerianとは

Unityのような何かという印象を受けました。
特徴としては、
・すべての操作がブラウザ上で可能
・他のAWSサービスとの連携
になるかと思います。
Lex,Lambdaと連携して音声入力でEC2を起動してくれるシーンを作成したので、
おおまかな手順を記します。

構築手順

基本的にはSumerianのチュートリアルを参考に作成しました。
https://docs.sumerian.amazonaws.com/tutorials/create/beginner/dialogue-component/
チュートリアルに記載されているもの以外に必要な手順のみを説明します。

1.Lambdaを作成する

Node.js 6.10で作成します。

index.js
'use strict';

const INSTANCE_ID = 'x-xxxxxxxxxxxxxxxxx';

var AWS = require('aws-sdk'); 
AWS.config.region = 'eu-west-1';

function ec2Start(cb){
    var ec2 = new AWS.EC2();
    var params = {
        InstanceIds: [
            INSTANCE_ID
        ]
    };

    ec2.startInstances(params, function(err, data) {
        if (!!err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
            cb();
        }
    });
}
exports.handler = function(event, context, callback) {
    //EC2インスタンスを起動する
    console.log('start');
    ec2Start(function() {
        context.done(null, 'Started Instance');
    });
    //メッセージを返す
    var message = 'Server Start!';
    var response = {
        sessionAttributes: event.sessionAttributes,
        dialogAction: {
            type: 'Close',
            fulfillmentState: 'Fulfilled',
            message: {
                contentType: 'PlainText',
                content: message
            }
        }
    };
    callback(null, response);
};

2.LexとLambdaを連携する

※チュートリアルではBookTripで作成していますが、
 今回はCustom botで作成してください。

Lexを作成したらIntentsとSample utterancesを作成します。
その後、Fulfillmentで「AWS Lambda function」にチェックを入れ、
Lambda functionは先ほど作成したLambdaの名前を選択します。
ビルドした後、TestBotでLambdaが正常に働く事を確認します。

3.作成したSumerianからLambdaが働く事を確認する

完成したらチュートリアルのチャットボットテストと同じように話しかけます。
返答とEC2の起動が確認できれば成功です。

まとめ

Sumerianを1週間程度触ってみての所感です。

まず、すべての操作がブラウザ上で完結するというのはローカルの環境を汚すことがないので
良いと思います。しかし、PCのスペックや回線の速度によっては快適な動作は損なわれてしまいます。
回線が込み合う状況では実行するのに数分待たされることもあり、エディターとしてはいまいちな印象を受けました。

他のAWSサービスとの連携しやすさは素晴らしいと思います。
今回はEC2の起動を試しましたが、おそらくLambdaで書ける処理であれば、なんでもできるのではないかと思います。

Sumerian単体ではUnityで良いのではという印象ですが、
他のAWSサービスと連携して何かサービスを考えるのが楽しいと思います。