Amazon Web Services ブログ

AWS DeepLens プロジェクトの出力をラップトップでカスタマイズして表示する

AWS DeepLens は、ディープラーニング対応の開発者ツールキットを搭載したビデオカメラです。コンピュータビジョンのハンズオンチュートリアル、事前構築されたモデルを使用して Machine Learning スキルを開発し、拡張することができます。事前構築されたモデルの例としては、TV モニター、人物、ボトルなど室内の様々な物体を認識および検出するための物体検出、さらに歯磨きをする、口紅を塗る、ドラムを打つ、バイオリンを弾く、バスケットボールをするなどの様々な動作を認識するための動作認識が挙げられます。

AWS DeepLens では、デバイスのカメラからのストリームと、IoT コンソールおよびローカルデバイスからのモデルの出力を表示できます。各方法の詳細については、関連ドキュメントを参照してください。このブログでは、AWS DeepLens からのプロジェクト出力をカスタマイズして HTML ページに表示する方法について説明します。

以下のサービスを使用します。

  • Amazon Cognito: IoT WebSockets を介して HTML ページから AWS DeepLens MQTT メッセージにアクセスできるようにします。
  • AWS IoT: データのサブスクリプションと発行を処理します。
  • Amazon S3: 出力表示用の HTML ファイルを保存します。

AWS CLI または AWS マネジメントコンソールを使用して AWS DeepLens のプロジェクト出力をカスタマイズできます。CLI およびコンソールの使用手順について以下に詳しく説明します。

前提条件

手順に従って AWS DeepLens をカスタマイズする前に、以下の準備が必要です。

  • AWS DeepLens デバイスを所有する
  • デバイスを登録する
  • プロジェクトを作成してデバイスにデプロイする

詳細については、関連ドキュメントを参照してください。AWS DeepLens デバイスを所有していない場合は、サインアップして待ちリストに登録してください。

AWS CLI を使用して開始する手順

開始するには、AWS CLI を使用して、以下の手順に従ってください。

ステップ 1: Cognito ID プールを作成する

AWS DeepLens デバイスを登録するたびに、サービスは一意の MQTT トピックを作成します。このトピックでは、デプロイ済みのモデルの出力を AWS IoT コンソールに表示します。たとえば、AWS DeepLens にデプロイしたプロジェクトで周囲のオブジェクトが検出された場合、検出されたオブジェクトの名前を MQTT トピックを使用して IoT コンソールに発行できます。このブログ投稿では、カスタマイズした HTML ページに MQTT メッセージを表示します。そのために Amazon Cognito を使用します。

Amazon Cognito では、AWS 認証情報をソースコードやウェブページに含めなくても、一時認証情報を使用して安全な方法で AWS リソースに簡単にアクセスできます。

そのために、まず ID プールを作成する必要があります。後で、この IdentityPoolId を HTML ページに渡し、一時認証情報を使用して MQTT トピックへの受信登録ができるようにします。

AWS CLI で、以下のコマンドを貼り付けます。ステップを実行する前に、ID の作成先が目的の AWS リージョンであることを確認してください。

> aws cognito-identity create-identity-pool \ 
  --identity-pool-name DeepLens_Console  \
  --allow-unauthenticated-identities --region us-east-1

レスポンスは次の形式になります。

{
    "IdentityPoolId": "us-east-1:XXXXXXX-1cd1-4c3a-9a39-dac267545277",
    "AllowUnauthenticatedIdentities": true,
    "IdentityPoolName": "DeepLensConsole"
}

IdentityPoolId に注目してください (黄色でハイライトされています)。後で、これを HTML ページへのパラメータとして使います。

注意: この ID プールを使用すると、未認証ユーザーは AWS リソースにアクセスする一部の権限を取得できます。これらの権限については、以降のステップで定義します。これは HTML ページを簡単に扱うための便宜的な方法です。ページのセキュリティを強化する場合は、未認証ユーザーに対するサポートを完全に削除するか、ページへのアクセスを一部の機能に制限できます。ページにサインアップ機能を追加して様々なログインプロバイダーを使用してユーザーを認証することもできます。

ステップ 2: IAM ロールを作成して AWS IoT MQTT のサブスクリプションを許可する

AWS DeepLens デバイスは、MQTT トピックおよびメッセージを使用して IoT サブスクリプション経由でクラウドと通信します。これらのチャネルは、IoT 環境の安全で信頼できる通信用に最適化されています。これらのメッセージを受信して HTML ページで表示するには、以下の IAM ロールとアクセス許可を定義する必要があります。

まず、IAM ロールのポリシードキュメントを作成します。そのために、CLI コマンドを実行している同じディレクトリで、DeepLensConsoleUnauthName.json というファイルに以下のコンテンツを保存します。IdentityPoolId は、前のステップで取得したものに置き換えてください。

このステップでは、AWS リソースにアクセスする未認証ユーザーのための信頼ポリシーを定義します。現時点では、ロールにアクセス許可がありませんが、Amazon Cognito でアクセス許可を引き受けられるようにします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:XXXXX-1cd1-4c3a-9a39-dac267545277"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}

次に、IAM ロールを作成し、このロールに先ほど作成したポリシーをアタッチします。前のステップで作成した同じパスとファイル名を使用する必要があります。ロール名を書き留めておきます。以降のステップで必要になります。

> aws iam create-role --role-name DeepLensConsoleUnauthName \  
  --assume-role-policy-document file://DeepLensConsoleUnauthName.json

次に、先ほど作成したロールに AWSIoTDataAccess ポリシーをアタッチします。この管理ポリシーのアタッチにより、このロールで IoT エンドポイントのすべてのトピックに対してメッセージの読み取りと書き込みができるようになります。より厳しいポリシーを作成してトピックとコマンドの許可を制限したり、逆にロールにアクセス許可を追加したりできます。たとえば、次の policy-arn を使用してラベルの読み上げを Amazon Polly に許可できます。arn:aws:iam::aws:policy/AmazonPollyReadOnlyAccess.

> attach-role-policy \
  --role-name DeepLensConsoleUnauthName \
  --policy-arn arn:aws:iam::aws:policy/AWSIoTDataAccess

ステップ 3: ID プールと IAM ロールを関連付ける

次に Cognito ID プールを IAM ロールに関連付ける必要があります。この関連付けを行うには、次のコマンドを使用します。

> aws cognito-identity set-identity-pool-roles \ 
--identity-pool-id "us-east-1:XXXXX-1cd1-4c3a-9a39-dac267545277" \ 
--roles unauthenticated=DeepLensConsoleUnauthName

ステップ 4: アカウントの IoT エンドポイントを見つける

AWS CLI を使用し、以下の手順に従います。

次のコマンドを入力します。

aws iot describe-endpoint

これで、IoT エンドポイントが返されます。

{
       "endpointAddress": "XXXXXXXXXXXXX.iot.us-east-1.amazonaws.com"
}

ステップ 5: HTML ページを開いてプロジェクト出力を表示する

次に、前に定義したパラメータを渡して、静的な HTML ページを Amazon S3 で開くことができます。

https://s3-us-west-2.amazonaws.com/im-examples/console/index.html?region=us-east-1&host=IoTEndpoint&id-pool=IdentityPoolId

たとえば、このガイドでの値を使用したリンクは以下のとおりです。

https://s3-us-west-2.amazonaws.com/im-examples/console/index.html?region=us-east-1&host=XXXXXXXXX.iot.us-east-1.amazonaws.com&id-pool=us-east-1:XXXXXXXX-XXXX-4a79-8dd4-568590df9298

プロジェクトで表示される結果に応じて、この HTML ページの境界ボックスに MQTT メッセージ、イメージ、およびビデオストリームを表示できます。

AWS マネジメントコンソールでの開始手順

AWS マネジメントコンソールを使用して開始するには、以下に手順に従います。

ステップ 1: Cognito ID プールを作成する

AWS DeepLens デバイスを登録するたびに、サービスは一意の MQTT トピックを作成します。このトピックでは、デプロイ済みのモデルの出力を AWS IoT コンソールに表示します。たとえば、AWS DeepLens にデプロイしたプロジェクトで周囲のオブジェクトが検出された場合、検出されたオブジェクトの名前を MQTT トピックを使用して IoT コンソールに発行できます。このブログ投稿では、カスタマイズした HTML ページに MQTT メッセージを表示します。そのために Amazon Cognito を使用します。

Amazon Cognito では、AWS 認証情報をソースコードやウェブページに含めなくても、一時認証情報を使用して安全な方法で AWS リソースに簡単にアクセスできます。

そのために、まず ID プールを作成する必要があります。後で、この IdentityPoolId を HTML ページに渡し、一時認証情報を使用して MQTT トピックへの受信登録ができるようにします。

Amazon Cognito コンソールで、[Manage Federated Identities] と [Create new identity pool] を選択します。名前 (「DeepLens_Console」など) を付けて、オプションの [Enable access to unauthenticated identities] チェックボックスをオンにします。

注意: この ID プールを使用すると、未認証ユーザーは AWS リソースにアクセスする一部の権限を取得できます。これらの権限については、以降のステップで定義します。これは HTML ページを簡単に扱うための便宜的な方法です。ページのセキュリティを強化する場合は、未認証ユーザーに対するサポートを完全に削除するか、ページへのアクセスを一部の機能に制限できます。ページにサインアップ機能を追加して様々なログインプロバイダーを使用してユーザーを認証することもできます。

ユーザーに代わって Amazon Cognito でロールを引き受けることを許可します。

次の画面で、モバイルおよびウェブインターフェイスで IdentityPoolId を使用する方法の手順とコード例が表示されます。ここでは、[Edit identity pool] ボタンを選択し、未認証アイデンティの IdentityPoolId とロール名を書き留めます。

ステップ 2: IAM ロールを編集して AWS IoT MQTT のサブスクリプションを許可する

AWS DeepLens デバイスは、MQTT トピックおよびメッセージを使用して IoT サブスクリプション経由でクラウドと通信します。これらのチャネルは、IoT 環境の安全で信頼できる通信用に最適化されています。これらのメッセージを受信してローカル HTMP ページで表示するには、IoT リソースにアクセスする権限を持つ IAM ロールを定義します。

IAM コンソールに移動し、未認証ロールの名前を検索します。Unauth_Role サフィックスが付いたロール (リストの 2 番目) を選択します。

[Attach policy] をクリックしてロールにポリシーを追加し、IoT 管理ポリシーを探して、[AWSIoTDataAccess] を選択します。

[Attach policy] を選択します。

この管理ポリシーのアタッチにより、このロールで IoT エンドポイントのすべてのトピックに対してメッセージの読み取りと書き込みができるようになります。より厳しいポリシーを作成してトピックとコマンドの許可を制限したり、逆にロールにアクセス許可を追加したりできます。たとえば、次の policy:arn を使用してラベルの読み上げを Amazon Polly に許可できますarn:aws:iam::aws:policy/AmazonPollyReadOnlyAccess ).

ステップ 3: アカウントの IoT エンドポイントを見つける

AWS IoT コンソールを使用して、[Settings] オプションを選択します。

ステップ 4: HTML ページを開いてプロジェクト出力を表示する

次に、前に定義したパラメータを渡して、静的な HTML ページを Amazon S3 で開くことができます。

https://s3-us-west-2.amazonaws.com/im-examples/console/index.html?region=us-east-1&host=IoTEndpoint&id-pool=IdentityPoolId

たとえば、このブログ投稿での値を使用したリンクは以下のとおりです。

https://s3-us-west-2.amazonaws.com/im-examples/console/index.html?region=us-east-1&host=XXXXXXXXX.iot.us-east-1.amazonaws.com&id-pool=us-east-1:XXXXXXXX-XXXX-4a79-8dd4-568590df9298

プロジェクトで表示される結果に応じて、この HTML ページの境界ボックスに MQTT メッセージ、イメージ、およびビデオストリームを表示できます。

デバイスのイメージを送信してプロジェクト出力ページで表示する

エッジ AWS Lambda 関数のシンプルな機能は、テキストメッセージを IoT トピックに発行することです。これらのメッセージはプロジェクト出力ページで表示できます (または AWS IoT コンソールの [test] タブで表示できます)。

最初の拡張は、イメージをモデル推定の前または後に (境界ボックスと共に) 表示することです。この例では、イメージを Amazon S3 にアップロードし、イメージ URL を IoT トピックにアップロードします。

S3 へのイメージのアップロード

まず、イメージを Amazon S3 にアップロードするには、Python 関数をエッジ Lambda 関数に追加します。

# Function to write to S3
# The function is creating an S3 client every time to use temporary credentials
# from the GG session over TES 
def write_image_to_s3(img):
    session = Session()
    s3 = session.create_client('s3')
    file_name = 'DeepLens/image-'+time.strftime("%Y%m%d-%H%M%S")+'.jpg'
    # You can contorl the size and quality of the image
    encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),90]
    _, jpg_data = cv2.imencode('.jpg', img, encode_param)
    response = s3.put_object(ACL='public-read', Body=jpg_data.tostring(),Bucket='<BUCKET_NAME>',Key=file_name)

    image_url = 'https://s3.amazonaws.com/<BUCKET_NAME>/'+file_name
    return image_url

次に、推定 Python 関数から、この関数を呼び出します。

    ...
    # Upload to S3 to allow viewing the image in the browser
    image_url = write_image_to_s3(frame_with_bb)

さらに出力メッセージに追加します。

    client.publish(topic=iotTopic, payload='{{"img":"{}"}}'.format(image_url))

イメージへの別の追加は、モデルからの出力 (「ssd」型) 時に境界ボックスを表示することです。

# Adding top n bounding boxes results
def apply_bounding_box(img, topn_results):
        '''
        cv2.rectangle(img, (x1, y1), (x2, y2), RGB(255,0,0), 2)
        x1,y1 ------
        |          |
        --------x2,y2
        '''
        for obj in topn_results:
            class_id = obj['label']
            class_prob = obj['prob']
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            cv2.rectangle(img, (int(obj['xmin']), int(obj['ymin'])), (int(obj['xmax']), int(obj['ymax'])), (255,0,0), 2)
        return img

次のコードを使用して top n (5 など) の結果を取得してイメージに適用します。

     ...
     results = model.parseResult('ssd',results)
     tops = results['ssd'][0:5]
     frame_with_bb = apply_bounding_box(frame_resize,tops)

まとめ

このような出力ページには他にも多くを追加できます。一部は今後のブログ投稿で紹介します。一部の例としては、MQTT メッセージでビデオをストリーミングし、出力ページでストリームを再構築します。または、Amazon CloudWatch グラフやダッシュボードなどを埋め込みます。

AWS DeepLens は、教育用プロジェクトと本番稼働用プロジェクトの両方を構築するためのオープンプラットフォームとして設計されています。組み込みプロジェクトを自由に拡張してください。たとえば、新しいディープラーニングモデル、新しい Lambda エッジ関数、新しいクラウドロジックの機能、プロジェクトの出力を制御および表示するための新しいヒューマンインターフェイスなどを構築できます。
このブログ投稿では、デバイスおよびデバイス上で実行されているプロジェクトに安全に接続できるシンプルな HTML ベースのページと、プロジェクトの推定の出力を紹介しました。より高度なインターフェイスやユースケースを構築するための参考や基礎としてご利用いただければ幸いです。AWS DeepLens に関するアイデアをお寄せください。また、コミュニティで共有してください。


その他の参考資料

AWS DeepLens を拡張して AWS Lambda で SMS 通知を送信する方法も参考にしてください。


今回のブログの投稿者について

Guy Ernest 氏は Amazon AI のプリンシパルソリューションアーキテクトです。マインドシェア構築の戦略に携わり、Amazon の AI、Machine Learning、ディープラーニングのユースケースのクラウドコンピューティングプラットフォームを幅広く使用しています。時間がある時は家族との時間を楽しみ、面白くちょっと恥ずかしい話しを集めたり、Amazon や AI の今後について話し合ったりしています。

Sunil Mallya は AWS Deep Learning チームのシニアソリューションズアーキテクトです。彼は、お客様のビジネスを拡大するために Machine Learning とディープラーニングのソリューション構築を支援しています。プライベートな時間には、料理、セーリング、RC 自動運転カーの製作を楽しんでいます。

AWS DeepLens を拡張し AWS Lambda で SMS 通知を送信

AWS DeepLens は、ディープラーニング対応の開発者ツールキットを搭載したビデオカメラです。コンピュータビジョンのハンズオンチュートリアル、事前構築されたモデルを使用して Machine Learning スキルを開発し、拡張することができます。

このブログでは、AWS IoT ルールエンジンと Lambda 関数を使用し、クラウド機能で DeepLens のローカルな機能を拡張する方法について説明します。このシンプルな機能は、たとえば DeepLens デバイスでホットドッグを見た後に、あなたの電話番号に SMS 通知を送信することができます。Amazon Elasticsearch Service (タイムラインやフレームで検出されたすべてのオブジェクトや顔を対象にするダッシュボードや検索インターフェイスの構築)、Amazon Kinesis Analytics (店の前を通り過ぎる人数の異常検出モデルの構築)、Amazon Rekognition (有名人の認識や顔検出の API を使用して近辺にいる VIP を識別) や、その他の AWS クラウドサービスでこの機能を拡張するために上級ユーザーが今後この機能を利用していくだろうと我々は予測しています。

次の図はカメラの前のオブジェクトからポケットの中にあるモバイルデバイスまでに渡るシステム内のデータフローを示しています。

Lambda 関数の作成

まず、クラウドで実行が可能で DeepLens デバイスからのホットドッグの確率が高い (>0.5) メッセージをフィルターできる AWS Lambda 関数を作成します。このプロセス中に、AWS Greengrass を使用するデバイスでデプロイした Lambda 関数からメッセージを取得できるように、AWS IoT ルールエンジンでルールを作成します。

  • AWS Lambda コンソールで [Create Function] にアクセスします。
  • 「iot-button-email」がある設計図をフィルターに掛け、それを設計図のテンプレートに選びます。
  • Lambda 関数の名前を入力します。たとえば「Hotdog_Notifier」といったようなものをお使いください。
  • Role フィールドは [Create a new Role from template(s)] のままにします。
  • 新しいロールに名前を指定します。たとえば「Hotdog_Notifier_Role」といったようなものをお使いください。
  • 「SNS Publish policy」ポリシーのポリシーテンプレートを追加します。
  • [aws-iot] セクションで [Custom IoT Rule] を使用するように切り替えます。
    • [Create a new rule] を選択します。
  • 名前を指定し (たとえば「search_hotdogs」など)、説明を追加します。
  • ルールクエリステートメントに [SELECT] クエリを選びます。[/$aws/deeplens/KJHFD-DKJO87-LJLKD/inference] から [Hotdog] を選択します。このクエリは次の JSON 形式で DeepLens デバイスからメッセージをキャッチできます。 { "Hotdog" : 0.5438 }
  • 次のチェックボックスでトリガーを有効にします。
  • 次のステップで Lambda 関数のコードを変更します。
  • 環境パラメーターを [email] から [phone_number] に変更し、自分の電話番号を値として入力します。この際、電話番号には国コードを忘れずに入れてください (たとえば米国の場合は +15555555555)。SMS の海外サポートについては AWS SNS に関するよくある質問をご覧ください: https://aws.amazon.com/sns/faqs/#sms-related-questions
  • [Create Function] ボタンを選択します。
  • 先ほど作成した Lambda 関数の [Configuration] に切り替えます。[Configuration] タブは左側にあります (設定、トリガー、モニタリング)。
  • Lambda 関数のコードで findExistingSubscription、createSubscriptioncreateTopic といった通常の SNS サブスクリプションで必要とされるヘルパー機能をすべて削除することができます。[use strict] まで、すべてのコードを削除します。SMS を直に送信するため、コードも変更します。
    'use strict';
    
    /**
     * This is a sample Lambda function that sends an SMS Notification When your
     * Deep Lens device detects a Hot Dog
     * 
     * Follow these steps to complete the configuration of your function:
     *
     * Update the phone number environment variable with your phone number.
     */
    
    const AWS = require('aws-sdk');
    
    const phone_number = process.env.phone_number;
    const SNS = new AWS.SNS({ apiVersion: '2010-03-31' });
    
    exports.handler = (event, context, callback) => {
        console.log('Received event:', event);
    
        // publish message
        const params = {
            Message: `Your DeepLens device just identified a Hot Dog. Congratulations!`,
            PhoneNumber: phone_number
        };
        if (event.Hotdog > 0.5)
            SNS.publish(params, callback);
    };
  • [Save] を選択します。この画面からでも Lambda 関数をテストすることができますが、DeepLens デバイスからのメッセージフローをシミュレートするため、ここでは IoT ルールエンジンを介してテストを行います。

設定をテストする

  • IoT コンソールで [Test] オプションを選択します。
  • 次のメッセージの前にルールで定義したトピックに [Publish to a Topic] を選択します。 { "Hotdog": 0.68725 }.
  • 「DeepLens デバイスが先ほど… (Your DeepLens device just….)」といった SNS 通知が届きます。これは Lambda 関数で定義したものです。
  • では、DeepLens デバイスに何らかのオブジェクトとホットドッグを見せてみましょう。上手くいくといいですね!
  • デバイスの前にホットドッグを見せてもメッセージが届かない場合は、上記の図に戻り色に合わせた値が設定されているか確認してください。また、国コードを含む正確な電話番号を提供しているかどうかもご確認ください。

まとめ

Amazon DeepLens は教育そしてイノベーションを目的とするオープンプラットフォームとして設計されています。実社会での問題解決に繋がる様々なアイデアを開発者が持ち寄ることを期待しています。店の近辺を行き交う人々の分析や、車庫のドアを自動で開いたり、レストランのテーブルが汚れていることを知らせたり、客がサービスを必要としていることを知らせることができます。これは、このブログで紹介したようなシンプルな拡張方法を使用して AWS DeepLens で構築できるシステムの簡単なサンプルです。


その他の参考資料

HTML ページで AWS DeepLens を使用してプロジェクト出力のカスタマイズや表示する方法をご覧ください。


今回のブログの投稿者について

Guy Ernest 氏は Amazon AI のプリンシパルソリューションアーキテクトです。マインドシェア構築の戦略に携わり、Amazon の AI、Machine Learning、ディープラーニングのユースケースのクラウドコンピューティングプラットフォームを幅広く使用しています。時間がある時は家族との時間を楽しみ、面白くちょっと恥ずかしい話しを集めたり、Amazon や AI の今後について話し合ったりしています。

AWS サーバーレスアプリケーションのリポジトリの準備を整えてください

サーバーレスアプリケーションは、私が想像していたよりも早く主流になりました。毎日毎秒、数えきれないほどの AWS Lambda 関数が必要に応じて誕生し、重要なビジネス機能を処理して完了しています。ユーザーの皆様からは、このモデルの柔軟性、スケーラビリティ、コスト効率に優れた点において良い評価を頂いています。

当社は、AWS のすべてのお客様がサーバーレスな未来に向かって前進していただきたいと考えています。Lambda の発表後、当社はサーバーレスアプリケーションモデル (SAM) に従って、サーバーレスアプリケーションを AWS にデプロイおよび管理するプロセスをさらに簡略化しました。また、ウェブアプリモバイルバックエンドイメージ認識と処理リアルタイムのファイル処理IoTMapReduceリアルタイムのストリーム処理、およびチャットボットのイメージモデレーション用に、サーバーレスリファレンスアーキテクチャも公開しました。

今日は、次の一歩についてお話したいと思います。当社は、AWS のお客様によるサーバーレスアプリの発見とデプロイを可能な限り簡単にしたいと考えています。また、Lambda、SAM、サーバーレスアプリのオープンソースコミュニティを強化し、誰もが共有、参加して利点を得られる余地を作りたいと考えています。

AWS サーバーレスアプリケーションのレポジトリ
近日中に公開予定である AWS サーバーレスアプリケーションのレポジトリを少しだけご紹介します。サーバーレスアプリのプロデューサーとコンシューマー向けに設計されたこの AWS コンソールコンポーネントは、公開、検出、およびデプロイをサポートします。

プロデューサー (開発者、ISV、SaaS プロバイダ、AWS パートナー) は、レポジトリへの公開を簡単に行うことができます。アプリは SAM 形式である必要があり、SPDX ライセンス ID が付属し、グローバルな共有 (すべての AWS のお客様) またはプライベートな共有 (個人とチーム用のアクセスコントロール) のオプションがあります。ソースコードとその他のアプリケーションコンポーネントは、GitHub またはその他のソースコードレポジトリに保存し、参照により含めることができます。この場合も共有のコントロールが可能です。

お客様からの提出をお待ちしております。これは、他社 (Datadog、Here、Splunk、SignalFx) が作成中のレポジトリに加わります。

発行者向け
既に SAM を使用してサーバーレスアプリを構築している場合、提出の受け付け準備が間もなく整います。簡単に復習すると、SAM では、API アクションによってトリガーされ、S3 にアップロードされる Amazon API Gateway API、Amazon DynamoDB テーブル、および AWS Lambda 関数を定義できます。サーバーレスアプリは、Open Source Initiative (OSI) によって承認されたオープンソースライセンスに従って利用できる限り、サードパーティーライブラリを使用できます。リソースベースの IAM ポリシーを使用してアプリへのアクセスを制御できます。プライベートにするか、非常に選択的な基準に基づいてクロスアカウントアクセスを許可するか、一般公開できます。

コンシューマー向け
アプリは Lambda コンソールで見つけ、使用を開始できます。

また、各アプリのステータスを確認できます。

乞うご期待
この機能のすべては、AWS マネジメントコンソールAWS コマンドラインインターフェイス (CLI)、および API の豊富なセットからアクセス可能です。利用可能になり次第、詳細情報をお伝えします。

使用開始を希望される場合は、プレビューにサインアップしていただけます。

Jeff;

Amazon Kinesis を用いた Databaseの継続的な変更

Emmanuel Espina は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。

このブログ記事では、Amazon Kinesis を使用して変更をストリーミングすることによって、中央リレーショナルデータベース を他のシステムと統合する方法について説明します。

次の図は、分散システムにおける一般的なアーキテクチャ設計を示しています。これには、「」と呼ばれる中央ストレージと、この中央ストレージを消費するいくつかの派生「衛星」システムが含まれます。

この設計アーキテクチャを使用して、リレーショナルデータベースを中央データストアとして使用し、このシステムのトランザクション機能を利用してデータの整合性を維持することができます。このコンテキストにおける派生システムは、この変化の事実の単一ソースを観察し、それらの変更を変換し、フィルタリングし、最終的にはその内部インデックスを更新する全文検索システムとすることができます。もう 1 つの例は、OLAP クエリに適した列形式ストレージです。一般に、中央リレーショナルシステムの個々の行を変更する際にアクションを取る必要のあるシステムは、派生データストアに適した候補となります。

これらの種類のアーキテクチャの単純な実装では、変更された行を検索するために派生システムが定期的にクエリを発行し、本質的に SELECT ベースのクエリで中央データベースをポーリングします。

このアーキテクチャのより優れた実装となるのが、非同期の更新ストリームを使用するアーキテクチャです。データベースには通常、行のすべての変更が格納されるトランザクションログがあるため、この変更のストリームが外部オブザーバシステムに公開されている場合、これらのシステムにこれらのストリームを添付して行の変更を処理およびフィルタリングできます。ここでは、中央データベースとして MySQL、メッセージバスとして Amazon Kinesis を使用して、このスキーマの基本的な実装をご紹介します。

通常、MYSQL バイナリログは、マスター上のすべての変更を読み取ってローカルに適用する読取りレプリカに公開されます。この記事では、変更をローカルデータベースに適用するのではなく、Amazon Kinesis ストリームに変更を公開する、一般化されたリードレプリカを作成します。

このメソッドの重要な点の 1 つは、コンシューマーが SQL クエリを受け取らないことです。SQL クエリは公開される可能性もありますが、一般的なオブザーバーは、SQL 互換のデータレプリカを維持しない限り、SQL にはあまり関心がありません。代わりに、変更されたエンティティ (行) を 1 つずつ受け取ります。このアプローチの利点は、コンシューマーが SQL を理解する必要はなく、事実の単一ソースは誰が変更を消費するのかを知る必要はないということにあります。これは、さまざまなチームが、必要なデータ形式で調整することなく作業できることを意味します。さらに都合がいいことに、Amazon Kinesis クライアントはが特定の時点から読む機能を備えているため、各コンシューマーは独自のペースでメッセージを処理します。これが、メッセージバスがシステムを統合するための結合されていない方法の 1 つとなる理由です。

この記事で使用されている例では、行フェッチャーは中央データベースに接続する通常の Python プロセスであり、リードレプリカをシミュレートします。

データベースは、Amazon RDS または MySQL の任意のインストールのいずれかになります。RDS の場合、フェッチャープロセスは RDS インスタンスホストにカスタムソフトウェアをインストールすることができないため、別のホスト (たとえば EC2) にインストールする必要があります。外部インストールの場合、フェッチャープロセスはデータベースと同じホストにインストールできます。

マスター MySQL インスタンスの準備

MySQL マスター (真実の単一のソース) は、それが通常のレプリケーションのマスターであるかのように設定する必要があります。個々の変更された行を受け取るには、Binlog を有効にして ROW 形式で作業する必要があります。(そうしないと、SQL クエリだけになってしまいます。)詳細については、MySQL サイトの「バイナリログ」を参照してください。

バイナリログを有効にするには、my.cnf 設定ファイルに次の 2 行を追加します。

log_bin=<path to binlog>
binlog_format=ROW

すべての接続 (たとえば、init_connect または JDBC などのデータベース API を使用) のグローバルまたはセッションレベルで、トランザクション分離レベルをコミット済み読み取りに設定することによって、行ベースのロギングを取得できます。

RDS (MySql 5.6+) を使用している場合は、簡単です。定期的なバックアップを有効にして (バックアップが有効になっていなければバイナリログは無効になります)、パラメータグループ変数 binlog_format を ROW に更新することによって、必要な設定を作成できます。(これは、パラメータグループの RDS ダッシュボードから行うことができます。)

アクセス権限の追加

RDS で作成されたデフォルトのユーザーを使用している場合は、既にこれらのアクセス許可がある可能性があります。そうでない場合は、REPLICATION SLAVE 権限を持つユーザーを作成する必要があります。詳細については、「レプリケーション用のユーザーの作成」を参照してください。

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';

Amazon Kinesis ストリームの作成

Amazon Kinesis ストリームと boto3 クライアントの認証情報が必要です。クライアントの認証情報の詳細については、「Boto 3 ドキュメント」を参照してください。

Amazon Kinesis コンソールを開き、[ストリームの作成] を選択します。

使用するストリームの名前とシャード数を入力します。この例では、1 つのシャードがあります。

数分後、ストリームで行の変更を受け入れる準備が整います。

CLI ユーザーに権限を割り当てる

AWS Identity and Access Management (IAM) を使用して、このストリームにアクセスする CLI ユーザに権限を与えることができます。

この例では、そのユーザーは KinesisRDSIntegration です。ユーザーを作成したり、既存のユーザーを使用することはできますが、Amazon Kinesis ストリームへの書き込み権限を追加する必要があります。

ストリームに固有のポリシーを作成できます。この例では、Amazon Kinesis に完全にアクセスできるスタンダードポリシーを使用しています。

マスターに接続して変更を公開する

Python パブリッシャーが必要とするライブラリをインストールするには、次のコマンドを実行します。

pip install mysql-replication boto3

詳細な手順については、次を参照してください。

https://github.com/noplay/python-mysql-replication

https://boto3.readthedocs.io/en/latest/guide/quickstart.html

ここに、マジックを実行する Python スクリプトがあります。<HOST>、<PORT>、<USER>、<PASSWORD>、および <STREAM_NAME> の各変数を設定値に置き換えることを忘れないでください。

Python

 

import json

import boto3



from pymysqlreplication import BinLogStreamReader

from pymysqlreplication.row_event import (

  DeleteRowsEvent,

  UpdateRowsEvent,

  WriteRowsEvent,

)



def main():

  kinesis = boto3.client("kinesis")



  stream = BinLogStreamReader(

    connection_settings= {

      "host": "<HOST>",

      "port": <PORT>,

      "user": "<USER>",

      "passwd": "<PASSWORD>"},

    server_id=100,

    blocking=True,

    resume_stream=True,

    only_events=[DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent])



  for binlogevent in stream:

    for row in binlogevent.rows:

      event = {"schema": binlogevent.schema,

      "table": binlogevent.table,

      "type": type(binlogevent).__name__,

      "row": row

      }



      kinesis.put_record(StreamName="<STREAM_NAME>", Data=json.dumps(event), PartitionKey="default")

      print json.dumps(event)



if __name__ == "__main__":

   main()

このスクリプトは、変更された各行を JSON 形式でシリアル化された Amazon Kinesis レコードとして公開します。

メッセージを使用する

これで、変更されたレコードを使用する準備が整いました。あらゆるコンシューマーコードが動作します。この記事のコードを使用すると、次の形式でメッセージが表示されます。

{"table": "Users", "row": {"values": {"Name": "Foo User", "idUsers": 123}}, "type": "WriteRowsEvent", "schema": "kinesistest"}
{"table": "Users", "row": {"values": {"Name": "Bar user", "idUsers": 124}}, "type": "WriteRowsEvent", "schema": "kinesistest"}
{"table": "Users", "row": {"before_values": {"Name": "Foo User", "idUsers": 123}, "after_values": {"Name": "Bar User", "idUsers": 123}}, "type": "UpdateRowsEvent", "schema": "kinesistest"}

まとめ

このブログ記事では、擬似リードレプリカと Amazon Kinesis を使用して、変更ストリームをデータベースのレコードに公開する方法を説明しました。多くのデータ指向の企業が、これに類似したアーキテクチャを使用しています。この記事で提供されている例は、実際の本番環境には対応していませんが、この統合スタイルを試して、エンタープライズアーキテクチャの拡張機能を改善するために使用できます。最も複雑な部分は、おそらく Amazon Kinesis の背後で既に解決されているものでしょう。接着剤の役割を果たすものを提供する必要があります。

その他のリソース

すべてのソフトウェアエンジニアがリアルタイムデータの統合抽象化について知っておくべきこと

Databus に搭載されているすべてのもの: LinkedIn のスケーラブルで一貫性のある変更データキャプチャプラットフォーム

 

Alexa for Business: ワークプレイスでAmazon Alexaデバイスの利用

私の日常生活にはAlexaよりも多くのものが統合されています。私は、Echoデバイスと利用可能なAlexa スキルを家のライトをつけたり、ドアベルを鳴らしてる人を確認するためにEcho Showにビデオをながしたり、1週間単位で多くのTo Doの状態を確認したり、音楽を再生したするなど多くのことを行ってます。私は家族のメンバーに、今では生きていけないと思われないあらゆる種類の活動のために、自分のEchoデバイスでAlexaスキルを有効にすることさえできます。ずっと古い世代にいる母(私が言ったことは内緒にしてください)は、母のEchoデバイスと私がベーキングレシピを保管するために作ったカスタムAlexaスキルを使ってます。彼女は、また、最新の健康や美食情報のスキルを探すことを楽しんでいます。私は仕事に行くときに何かが欠けているように感じてます。例えば、単にカレンダーから次のアポをAlexaに聞くこともできないのです。

Alexaを仕事のためのアシスタントとして利用したい人のために、エキサイティングなニュースがあります。ビジネス及び組織に皆様が知っており、好きなAlexaをスケーラブルな形で職場に持ち込むことができる新しいサービス、Alexa for Businessサービスを発表できることを嬉しく思います。Alexa for Businessサービスは、Alexaを仕事場に持ち込み業務の効率化をはかりたいだけでなく、Echoデバイスやプライベートスキルの有効化及び企業ユーザ管理をするためのツールとリソースを提供いたします。

Alexa for Buisnessで職場をよりスマートに

Alexa for Businessは、皆様が知っており、好きなAlexaを仕事場にもちこみ、すべてタイプの人たちの生産性をサポート、共有されたEchoデバイス及び個人保有のEchoデバイスの管理を支援します。仕事場では、共有されたデバイスは、誰もが利用するために共有の場所に設置することができ、ユーザは、職場でも家でもパーソナルデバイス利用することができます。

エンドユーザは、共有のデバイス、または、個人のデバイスを利用することができます。以下がそれぞれのデバイスでできることです。

共有のデバイス

  1. 会議室からミーティングに参加:”Alexa、ミーティングを開始して”という言うだけです。Alexaは、ビデオ会議装置の電源をつけ、電話会議用電話番号にダイヤルし、ミーティングに参加できます。
  2. オフィス関連の手助け:カスタムスキルを利用することでオフィス関連の意思決定の手助け、空いている会議室を探す、設備の故障の報告、用品のオーダーができます。

個人のデバイス

  1. 電話とメッセージの利用が可能:Alexaは、ハンズフリーで電話をかけることやメッセージ送信ができます
  2. 自動的に会議にダイヤルイン:Alexaは、家、職場、または、外出先でも声によりミーティングに参加できます。
  3. インテリジェント アシスタント:Alexaが、クイックにカレンダーをチェックし、ミーティングのスケジュールを助け、To-Doリストを管理し、リマインダーをセットできます。
  4. 情報の検索:Alexaは、Salesforce、ConcurやSplunkのような人気のビジネスアプリケーション内の情報を見つけるのに役立ちします

管理者が利用できるコントロールの一部を次に示します:

  1. 共有のAlexaデバイスのプロビジョニングと管理:Alexa for Businessコンソールを使用して、職場の共有デバイスをプロビジョニングして管理できます。各デバイスごとに、会議室の指定などの場所を設定したり、デバイスのパブリックスキルとプライベートスキルを割り当てることができます。
  2. 会議室の設定を構成する:簡単な「Alexa、会議を開始して」を使用して会議を始めることができます。Alexa for Businessでは、会議室の設定を構成したあと、Alexaを使用して会議を開始し、会議室設備を制御したり、部屋のAmazon Echo デバイスから直接ダイヤルインすることができます。
  3. ユーザー管理:Alexa for Businessアカウントで個人のAlexaアカウントを登録するために、組織内のユーザーを招待することができます。ユーザーが登録されると、カスタム プライベート スキルを有効にして、個人用のAlexaアカウント、職場または自宅のいずれかのデバイスで使用することができます。
  4. スキルの管理:組織が作成したパブリックスキルとカスタムプライベートスキルを共有デバイスに割り当て、登録されたユーザーがプライベートスキルを利用できるようにすることができます。スキルグループを作成して、特定の共有デバイスに割り当てることができます。
  5. プライベートスキルを構築し、Alexa for Business APIsを使用する:Alexa Skill Kit を利用し、自分のスキルを作成します。Alexa Skills Storeに公開することなく、Alexa for Businessアカウントで共有デバイスや登録ユーザーが利用できるようにすることができます。 Alexa for Businessは追加のAPIを提供しています。このAPIを使用してスキルにコンテキストを追加し、管理タスクを自動化できます。

それでは、Alexa for Businessの流れをみてみましょう。まず、AWSコンソールにログインし、Alexa for Businessサービスにアクセスします。

 

ログインした直後、Alexa for Businessのダッシュボードをご覧いただけます。見ての通り、部屋や共有デバイス、ユーザ及びスキルの管理ができます。また、会議、カレンダー、およびユーザーの招待状を制御する機能を提供します。

 

まず、私はAlexaデバイスをセットアップすることから始めます。 Alexa for Businessは、複数のデバイスを設定し、それらをWi-Fiネットワークに接続し、Alexa for Businessアカウントに登録するデバイス設定ツールを提供します。これは、個人的なAlexaデバイスの設定プロセスとはまったく異なります。 Alexa for Businessでは、一度に25台のデバイスをプロビジョニングできます。

私のデバイスがプロビジョニングされたら、私はこれらのデバイスを置く場所(私の会議室など)のロケーションプロファイルを作成できます。 Alexa for Businessコンソールでは、これらの場所を「部屋」と呼んでいます。私は部屋のプロフィールメニューに行き、部屋のプロフィールを作成することができます。ルームプロファイルには、デバイスの起床ワード、アドレス、タイムゾーン、測定単位、および発信通話を有効にするかどうかなど、部屋のAlexaデバイスの一般的な設定が含まれています。

次のステップは、設定したデバイスのスキルを有効にすることです。私はAlexa Skills Storeのスキルを有効にするか、プライベートスキル 機能を使用して自分自身で構築し、Alexa for Businessアカウントで利用できるようにすることができます。共有デバイスのスキルを有効にするには、スキルメニューオプションにアクセスし、スキルを有効にします。スキルを有効にしたら、それらをスキルグループに追加して、スキルグループを自分の部屋に割り当てることができます。

ビジネスのためのAlexaについて私が本当に好きなものは、Alexaを使って電話会議にダイヤルすることです。これを有効にするには、[会議]メニューオプションに行き、[プロバイダーの追加]を選択します。 AmazonではAmazon Chimeを使用していますが、異なるプロバイダのリストから選択することもできますし、必要に応じて独自のプロバイダを追加することもできます。

私がこれを設定したら、 “Alexa、会議に参加する”と言うことができます。 Alexaは私のAmazon Chime会議IDを要求します。その後、私のEchoデバイスは自動的にAmazon Chime会議にダイヤルします。 Alexa for Businessは、会議をすばやく開始するインテリジェントな方法も提供します。私たちはすべて会議室に入り、会議IDまたは電話番号を見つけることができませんでした。ビジネス向けのAlexaを使用すると、社内カレンダーにリンクすることができます。Alexaは私の会議情報を把握し、自動的にダイヤルできます。会議IDは必要ありません。ここでそれを行う方法は次のとおりです。

Alexaは部屋のビデオ会議機器を制御することもできます。これを行うには、私が持っている設備のスキルを選択し、設備提供者を選択し、私の会議室で有効にするだけです。 Alexaに私の会議に参加するように頼んだら、Alexaは部屋の機器からダイヤルインし、何もせずにビデオ会議システムを起動します。

次に登録ユーザに切り替えましょう。

私のAlexa for Businessアカウントにユーザーを招待できるように、私の組織のユーザー招待状を設定することから始めます。ユーザーが組織内でAlexa for Businessを使用できるようにするには、管理コンソールから電子メールでユーザーの招待状を送信して、自分のAlexaアカウントにサービスを登録するよう招待します。私が選択すると、ユーザーの登録メールをカスタマイズして、追加のコンテンツを含めることができます。たとえば、組織のAlexaスキルに関する情報を追加できます。スキルは、招待を受け入れて登録プロセスを完了した後に有効にすることができます。私のユーザは、会議通話への自動ダイヤル、Microsoft Exchangeカレンダーのリンク、プライベートスキルの使用など、Alexa for Businessの機能を使用するために参加する必要があります。

ユーザー招待状をカスタマイズしたので、ダッシュボードの[ユーザー]メニューに移動して電子メールアドレスを入力することで、自分の組織のAlexa for Businessを利用するようにユーザーを招待します。これにより、私の組織に参加するためのリンクが記載されたメールが送信されます。ユーザーは、自分のAlexaデバイスが登録されているAmazonアカウントを使用して参加します。 Jeff Barrを私のAlexa for Businessに参加してもらいましょう。

Jeffは私のAlexa for Businessアカウントに登録した後、彼は、私が登録ユーザ向けに有効にしたプライベートスキルを見つけることができ、彼の仕事のスキルにアクセスでき、彼の自宅のオフィスにあるEcho含む彼個人のどのデバイスからでも会議に参加できます。

サマリ

Alexa for Businessのコンソールとサービスの機能について簡単に解説しました。 Alexa for BusinessのWebサイトを表示したり、AWSドキュメントの管理者ガイドとAPIガイドを読んだり、Alexa for BusinessコンソールのGetting Startedビデオを見たりすることで、Alexa for Businessの詳細を知ることができます。

“Alexa, Say Goodbye and Sign off the Blog Post.”

 

– Tara

翻訳はSA榎並が担当しました
原文:こちら

AWS CloudTrail にAWS Lambda 関数の実行ログ機能を追加

AWS CloudTrail Lambda データイベント機能を利用することで、AWS Lambda関数の実行ログを取得できます。今まではLambda管理イベントだけが記録されていましたが、この機能により、関数がいつ誰によって作成、変更、削除されたかという情報も提供します。そしてこれにより、Lambdaデータイベントを記録したり、どの関数が実行されたか、そしていつ誰がどのAPIコールを呼び出したのかという詳細情報も得ることができます。全てのLambdaデータイベントはAmazon S3バケットやAmazon CloudWatch Eventsに送られ、CloudTrailによってイベント記録されたときに応答させることが出来ます。例えば、過去3日間に実行されたLambda関数をすぐに特定することができ、また、それらのAPIコールのソースを特定することもできます。また、不適切なLambda実行を検出した際、不明なユーザーやロールによるAPIコールの制限を迅速に実施することも可能です。

AWS CloudTrailコンソールやAWS CLI、SDKを使うことで、AWS Lambdaデータイベント機能を有効にすることが可能です。新しいトレールを作成するか既存のトレールを編集することで、どのLambda関数のログを取得するかを表示したり選択したりすることが可能です。

AWS CloudTrail Lambdaデータイベントは現在、全てのパブリックリージョン、AWS GovCloud (米国)、中国(北京)で利用可能です。ぜひこちらにてサポートされる全リージョンをご確認ください。

 

AWS CloudTrail のさらなる詳細情報:
製品ページ(日本語)
サポートされるサービス(日本語)
ドキュメント(日本語)
リリースノート(英語)

原文: AWS CloudTrail Adds Logging of Execution Activity for AWS Lambda Functions  (Posted On: Nov 30, 2017)
翻訳担当: PSA市崎

Amazon EC2アップデート – スポットキャパシティー、スムーズな価格変更、インスタンスハイバネーションへの合理化されたアクセス

EC2スポットインスタンスは、AWSクラウドの余剰コンピューティングキャパシティへのアクセスを提供します。 我々のお客様は、オンデマンドインスタンスと比較して大幅な節約をもたらす価格で、CI/CD環境とトラフィックジェネレータ、Webサーバとマイクロサービスのホスト、動画のレンダリング、さまざまなタイプの解析ジョブを実行するためにスポットインスタンスを使用しています 。

新しい合理化されたアクセス

11/28、我々はスポットインスタンスのための新しい、合理化されたアクセスモデルを導入します。 スポットインスタンスを起動したい時、RunInstances関数やrun-instancesコマンド、またはAWSマネージメントコンソールを使用して希望内容をシンプルにサブミットするだけで、条件が満たされている限りそのリクエストを実行することができます。 余分な労力を費やすことなく、インスタンスタイプのオンデマンド価格を最大90%削減できるため、同じ予算でアプリケーションスループットを最大10倍向上できます。 この方法で起動するインスタンスは、終了するまで、またはEC2がオンデマンドリクエストのためにEC2スポットインスタンスをターミネートする必要がある場合まで実行されます。 その時点で、スポットインスタンスには通常2分前の警告が与えられる為、その後再生できるフォールトトレラントなアプリケーションに最適です。

スポットマーケット、入札、およびスタンドアロンの非同期APIへの呼び出しを理解する必要があった旧モデルとは異なり、新しいモデルは同期的でオンデマンドとして使いやすいものです。 あなたのコードまたはスクリプトは即座にインスタンスIDを受け取り、リクエストが処理され受け入れられたかどうかを確認する必要はありません。

私たちは可能な限りクリーンでシンプルにしました。現在の多くのスクリプトやアプリケーションを修正して、スポットリクエストで使用することが容易になると予想しています。 スポットインスタンスの予算をさらに管理したい場合は、スポットリクエスト時に最大価格を指定するオプションがあります。 スポットを使用してAmazon EMRAmazon ECSAWS Batchクラスタにパワーを注いでいる場合、またはAWS CloudFormationテンプレートまたはAuto Scaling Groupを使用してスポットインスタンスを起動した場合、変更を加えることなくこの新しいモデルのメリットが得られます 。

RequestSpotInstancesまたは RequestSpotFleetの周辺に構築されたアプリケーションは、変更なしでうまく動作できます。 しかしながらSpotPriceパラメータを含まない要求を行うことができます。

スムーズな価格変更
11/28発表の一環として、スポット価格の変化の仕様を変えて、需給の長期的なトレンドに基づいて価格がより緩やかに調整されるモデルに移行しています。 先ほどお話したように、On-Demand価格の平均70-90%を引き続き保持し、インスタンスの稼働中の期間に有効なスポット価格を引き続き支払えます。 スポットフリート機能をベースに構築されたアプリケーションは、フリートの作成時に指定した設定に基づいて、最も費用対効果の高いプールにスポットインスタンスの配置を自動的に多様化します。

スポット イン アクション
コマンドラインからスポットインスタンスを起動する際、 単にスポット市場を指定してください:

$ aws ec2 run-instances --instance-market-options '{"MarketType":"Spot"}' \
    --image-id ami-1a2b3c4d --count 1 --instance-type c3.large

インスタンスハイバネーション
メモリに多くの状態を保持するワークロードを実行する場合、この新しい機能が好ましいです!

インスタンスが再利用されたときにメモリ内の状態を保存するように手配し、ラップトップを閉じてから開くときと同じように、キャパシティが再び利用可能になったときに中断した場所とインスタンス上のアプリケーションを選択できます。 この機能は、Amazon Linux、Ubuntu、またはWindows Serverを実行しているC3、C4、および特定のサイズのR3、R4、およびM4インスタンスで動作し、EC2ハイバネーションエージェントでサポートされています。

メモリ内の状態は、インスタンスの起動時に設定された領域を使用してインスタンスのルートEBSボリュームに書き込まれます。 プライベートIPアドレスとElastic IPアドレスは、停止/開始サイクル全体にわたって保存されます。

Jeff;

翻訳担当 : SA小川

原文 : Amazon EC2 Update – Streamlined Access to Spot Capacity, Smooth Price Changes, Instance Hibernation

M5 – 次世代の汎用EC2インスタンス

私はいつも新規のEC2ユーザの方には、他のインスタンスタイプを見る前に、まずは汎用インスタンスから使い始め、負荷テストをしてみて、自分のアプリケーションのコンピュート・メモリ・ネットワーキングの利用具合をよく把握することをアドバイスしています。コンピュート、メモリ、ストレージ等に最適化した幅広いインスタンスの選択肢によって、我々のお客様は要件にフィットする最適なインスタンスタイプを選ぶ柔軟さを得ることができます。

私のEC2インスタンスの歴史の記事にあるように、汎用 (M) インスタンスは我々がm1.smallをローンチした2006年まで遡ります。我々はこの家系図の枝にそって進化を続け、M2 (2009年)、M3 (2012年)、そしてM4 (2015年) インスタンスをローンチしてきました。我々のお客様は、汎用インスタンスを使って、WEB & APPサーバを動かしたり、エンタープライズアプリケーションをホストしたり、オンラインゲームを支援したり、キャッシュのクラスタを構築しています。

新しいM5インスタンス

2017年11月29日、我々は新しいM5インスタンスをローンチすることで、次のステップに進みます。我々の継続的なイノベーションへのコミットによる成果を持ち、旧世代よりも良い費用対パフォーマンスまでも得られるインスタンスです。カスタムの2.5 GHz Intel® Xeon® Platinum 8175Mシリーズのプロセッサをベースに、M5インスタンスは過酷なワークロードのために設計されておりM4インスタンスよりもコア単価で14%の費用対パフォーマンスの向上が得られます。AVX-512命令を使っているアプリケーションでは、コア毎にさらに2倍のFLOPSを生み出します。我々はさらに新しいハイエンドなサイズを追加することで、更に多くの選択肢を提供しています。

こちらがM5インスタンス達です(全てVPCのみ、HVMのみで、EBS最適化です):

インスタンス名 vCPUs
RAM
ネットワーク帯域 EBS最適化帯域
m5.large 2 8 GiB 最大 10 Gbps 最大 2120 Mbps
m5.xlarge 4 16 GiB 最大 10 Gbps 最大 2120 Mbps
m5.2xlarge 8 32 GiB 最大 10 Gbps 最大 2120 Mbps
m5.4xlarge 16 64 GiB 最大 10 Gbps 2120 Mbps
m5.12xlarge 48 192 GiB 10 Gbps 5000 Mbps
m5.24xlarge 96 384 GiB 25 Gbps 10000 Mbps

一番下に並んでいる、m5.24xlargeはvCPUの数でいってXインスタンスの次にならぶサイズであり、さらなるスケールアップやワークロードの統合の余地を与えてくれます。これらは拡張ネットワークをサポートし、Placement Group内では最大25 Gpbsまで出すことができます。

専有のEBS最適化の帯域に加え、EBSストレージへのアクセスはNVMeを使うことで改良されています(古いAMIを利用している場合、適切なドライバをインストールする必要があります)。広い帯域とNVMeの組み合わせによりM5インスタンスが使うことができるデータの量を増加させることができます。

今すぐ起動してみましょう

今からUS East (バージニア北部)、US West (オレゴン)、そしてEU (アイルランド)リージョンで、オンデマンドとスポットの形式で起動することができます(リザーブドインスタンスも利用可能です)。そして追加のリージョンも作業中です。

1つ注意点です: 現在のNVMeドライバは高パフォーマンスのシーケンシャルワークロードには最適化されていないので、sc1st1のボリュームをM5インスタンスで使うことはお勧めしていません。この問題は把握済で、この重要なユースケースのためにドライバを最適化する作業を行っているところです。

Jeff;

原文: M5 – The Next Generation of General-Purpose EC2 Instances (翻訳: SA岩永)

H1インスタンス – ビッグデータアプリケーションのための高速・高密度なストレージ

AWSの規模と顧客基盤の多様性により、様々なタイプのワークロードに特化したEC2インスタンスタイプを作成する機会を得られました。例えば、多くの一般的な新ビッグデータの利用ケースは、数テラバイトのデータへの高速でシーケンシャルなアクセスに依存しています。お客様は巨大なMapReduceクラスタを構築して動かし、分散ファイルシステムをホストし、Apache Kafkaを利用して大量のログを処理したいと考えています。


新しいH1インスタンス

新しいH1インスタンスは、この利用ケースに特化して設計されています。既存のD2(高密度ストレージ)インスタンスに比べ、H1インスタンスはローカル磁気ストレージ1テラバイトあたり、より多くのvCPUとメモリを搭載し、ネットワーク帯域幅を拡張しています。リソースのバランスのとれた組み合わせによって、より複雑な課題に対処する能力を提供します。

H1インスタンスは Intel Xeon E5-2686 v4プロセッサ(2.3GHz)で動作し、以下の4つのインスタンスサイズを用意しました(全てVPCのみ、HVMのみ)

インスタンス名 vCPUs
RAM
ローカルストレージ ネットワーク帯域幅
h1.2xlarge 8 32 GiB 2TB 最大 10 Gbps
h1.4xlarge 16 64 GiB 4TB 最大 10 Gbps
h1.8xlarge 32 128 GiB 8TB 10Gbps
h1.16xlarge 64 256 GiB 16TB 25Gps

大きい2つのサイズでは、全コアのTurboで2.7GHz、シングルコアのTurboで3.0GHzのIntel TurboとCPUパワーマネージメントをサポートします。

ローカルストレージはシーケンシャルI/Oで高いスループットを出せるよう最適化されており、2MBのブロックサイズで最大1.15GB/s の転送が期待できます。ストレージは256ビットのXTS-AESとワンタイムキーにより暗号化されます。2つの最大サイズのインスタンスはIntel TurboおよびCPUパワーマネージメントをサポートし、all-core Turboは2.7GHz、single-core Turboは3.0GHzで動作します。

インスタンス間での大容量データの送受信は、拡張ネットワークを使うことで容易に行うことができ、プレースメントグループ内で最大25Gbpsのネットワーク帯域幅が得られます。

今すぐ起動してみましょう

H1インスタンスは米国東部(バージニア北部)、米国西部(オレゴン)、米国東部(オハイオ)、欧州(アイルランド)の各リージョンで本日(日本時間2017年11月30日)からオンデマンド型及びスポットでの利用が可能です。その他のリージョンでも準備中です。専用ホスト型、専用インスタンス、リザーブドインスタンス(1年および3年)も同じく利用可能です。

— Jeff;

原文: H1 Instances – Fast, Dense Storage for Big Data Applications (翻訳: SA有岡)

AWS Lambdaファンクション毎の同時実行数の上限設定

2017年11月30日、個別のAWS Lambdaファンクションに対して同時実行数の上限を設定することができるようになりました。実行数上限数の設定は、アカウントレベルの同時実行上限の一部を特定のファンクションに対して予約する事になります。この機能によって、特定のファンクションを事前に設定した最大同時実行数に到達した場合にスロットルさせることが出来ます。この機能は、Lambdaによって呼び出されるダウンストリームリソース(例えばデータベースのような)に対するトラフィックレートを制限したい場合や、プライベートVPCにアクセスするファンクションでのElastic Network Interface(ENI)とIPアドレスの消費を制御したい場合に役に立ちます。

あるファンクションの同時実行上限を数値で指定できます。こちらは、そのアカウント全体の同時実行上限($ACCOUNTで定義)から割り当てられます。1アカウントに対して、リージョンあたりの全てのファンクションのデフォルトの同時実行数は1000となっています。デフォルトでは、全てのファンクションの同時実行数が、このアカウントレベルの上限(つまり$ACCOUNT)に対してカウントされます。特定のファンクションに対して上限を設定すれば、同時実行上限の割当は、共有プールから取りされ、その特定のファンクションに割り当てられます。そのファンクションのその後全ての呼び出しは、ファンクションレベルの上限に対してのみカウントされます。個々のファンクションの同時実行数と、アカウントレベルの同時実行数は、この機能と同時に利用可能となった新しいAmazon CloudWatchメトリクスで追跡することが出来ます。

この機能についてより詳しく知りたい方はドキュメントをご参照ください。また、プロダクトページを訪れてさらなる情報を取得ください。

この機能は、 US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon), AWS GovCloud (US), Canada (Central), South America (São Paulo), EU (Frankfurt), EU (Ireland), EU (London), Asia Pacific (Mumbai), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), China (Beijing)のリージョンでご利用可能です。

 

翻訳はSA布目が担当しました。原文はこちら