初めてのAmazon Pinpoint①~概要編~

はじめに

現代の営業活動においては、毎日たくさんのデジタルメッセージを顧客に送る必要があります。
しかしそれらの多くはビジネスに繋がらず、顧客の受信フォルダの山に埋もれてしまうでしょう。

ほとんどのメッセージは適切な顧客に、適切なメッセージを、適切なタイミングで、適切なチャネルによって送信されていないからです。

この全ての問題を一つのAWSサービスによって解決できます。
そう、Amazon Pinpointならね。

本記事のターゲットとゴール

  • ターゲット
    • Amazon Pinpointについて初めて学ぶ方
  • ゴール
    • 概要を大まかに理解し、軽くサービスを動かしてみる

Amazon Pinpointは悪用を防ぐためデフォルトで送信制限が設定されています。
そのため今回の送信実験では受信箱にメールは届きません。

Amazon Pinpointとは何か?

Amazon Pinpointとはメッセージの一斉送信、顧客管理、レスポンス分析のできるサービスのことです。
このサービスを導入することで顧客中心のエンゲージメント高めることを可能にします。

エンゲージメント
→→→広告などのマーケティング手段によって顧客の注意や興味を引きつけながら、企業と顧客のつながりを強固にすること

Amazon Pinpointのできること(強み)

Amazon Pinpointのできることを大別するとエンゲージメントチャネル作成、エンゲージメント管理、分析になります。

チャネル
→→→流通経路のこと

1.エンゲージメントチャネル作成(発信能力が高い)

メッセージを送る媒体は多数存在しますが、
Amazon PinpointではEメール、音声、プッシュ通知、SMSといった様々な媒体が使用できます。
(既存のアプリケーション内のメッセージチャネルと統合することも可能)
alt
Amazon Pinpointではこれらのメッセージメディアごとにエンゲージメントチャネル作成し、好みのチャネルを使用して顧客に対応することができます。

またAmazon Pinpointではあらゆる規模で、大量のメッセージを、指定したタイミングで、迷惑メールに振り分けられずに、送信することができます!

2.エンゲージメント管理(狙い撃ちできる)

Amazon Pinpointはエンゲージメント管理システムが整っているので、適切な相手に必要なメッセージを送信できます。
alt
例えば顧客リストを属性、好み、状態などの項目ごとにセグメント化(分類)できます。
ユーザーはセグメント別にアプローチを変えて、適切なメッセージを送信できます。
これにより顧客は適切な時に、適切なメッセージを受け取り、エンゲージメントエクスペリエンスを高めることが期待できます。

3.分析(マーケティングを洗練できる)

Amazon Pinpointを使用して、データの集約、可視化、カスタマイズを行えます。
例えばメッセージの開封率から、どんなメッセージがどの時間にどんな人だと読んでもらいやすいかなどを可視化できます。

これにより顧客について、製品の使われ方、ユーザーのアプローチに顧客がどんな反応をしたかについて深く知ることができます。

分析例

  • 顧客の好み
  • 顧客の最近の行動
  • 顧客のニーズ
  • 離反予測
  • 設定したイベントを追跡分析(顧客がどの動画を再生したかなど)
  • 最も効果的なチャネルを把握
  • 訴求力の強いメッセージの特定
  • 開封率の高い時間帯を特定

料金

Amazon Pinpointは使った分だけ課金される従量課金制です。

1.送信メッセージ数

alt
料金例
[月に1万件のメールを全て違うデバイスに送信した時]
100円(送信メッセージ)+1200円(対象デバイス)=月額1300円(1USD=100円とする)

2.毎月の送信先デバイス数

  • 1か月あたり5000までは無料です。
  • その後は、1000万までは1つあたり0.0012USDかかります。
  • 1000万以上はこのURLにお問い合わせください。:aws-mobilemessaging-custom-pricing@amazon.com

3.イベント収集

アプリケーションの使用データを収集する場合、1か月あたりに収集されたアプリケーションイベントの数に対して課金されます。

  • 1か月あたりに収集されたイベントが1億件までは無料です。
  • その後は収集されたイベントあたり0.000001USDかかります。

Amazon Pinpointのネック

1.顧客データの整形が必要(formatが細かい)

顧客リスト例(csv)
alt

2.個人で試しにくい

  • 初めてPinpoint使用開始する時は、デフォルトでメッセージ送信制限がかかっています。(サンドボックス)
  • 複数人に送信する際は、事前にAWSサポートに制限解除の申請が必要があります。
  • 申請の際、使用目的やトラブルシューティングなど細かく答える必要があります。
  • そのため個人使用を開始するには敷居が高いです。
  • 参考URL:https://docs.aws.amazon.com/ja_jp/pinpoint/latest/userguide/channels-email-setup-production-access.html

3.ドキュメントがまだ少ない

  • 2020年4月現在、ローンチされたばかりなのか記事は少ないように見受けられました。
  • また日本語のドキュメントはさらに少ないように見受けられました。
  • 自力解決は難しいことが多いので、時々AWSサポートで質問する必要があるかもしれません。
  • 参考URL:https://aws.amazon.com/jp/premiumsupport/tech-support-guidelines/

Amazon SESとの比較

Amazon Pinpointの類似サービスとして、Amazon SESというAWSのメール送信サービスが存在します。
以下では、Amazon Pinpointの特徴をより深く知るために比較していきます。
参考URL:https://aws.amazon.com/jp/ses/
alt

1.一斉送信機能

Amazon Pinpoint >> Amazon SES
Amazon SESでは一度に送信できるメールは50通までです。

2.対応送信チャネル

Amazon Pinpoint >> Amazon SES
Amazon SESではEmailのみ送信することができます。

3.分析力

Amazon Pinpoint > Amazon SES
Amazon SESでもメールの開封率などを可視化できます。しかし高度な分析をする場合は、Amazon Pinpointの方が良いでしょう。

4.料金

Amazon Pinpoint < Amazon SES
基本料金は1万通につき1ドルと変わりませんが、Amazon SESでは1月ごとに最初の6万通は無料で送信できます。

5.受信機能

Amazon Pinpoint <<< Amazon SES
Amazon SESには受信機能があります。この機能はサイトのユーザー登録の際、メールアドレスの検証をする時などに役立ちます。受信したメッセージはAmazon S3に保存することも可能です。

結論

Amazon SESは購入確認、出荷通知、注文状況の更新など受動的な場面で役立ちます。
Amazon Pinpointは営業メールなど主体的なアクションを起こす場面で役立ちます。

終わりに

次回はいよいよ実装をしていきます。
https://recipe.kc-cloud.jp/archives/16727


AWS Launch Wizard で SAP のデプロイを加速させる

はじめに

2019年から「AWS Launch Wizard for SQL Server」というサービスが AWS から発表されました。
今回もそのブログ内容と利用方法をご紹介させて頂きます!
2020-04-20_15h30_32.png

AWS Launch Wizard for SAP について

  • ※エンタープライズワークロード向けの AWS に、高可用性 SQL ソリューションをデプロイ
  • 迅速、簡単、柔軟、安全、コスト効率が高い
  • AWS CloudFormation と AWS Systems Manager を使用
  • 基盤となる AWS リソースのプロビジョニングを調整することで、SAP アプリケーションを AWS にデプロイするのに役立つ
  • AWS に新しい SAP ワークロードをデプロイするか、既存のオンプレミスの SAP ワークロードを AWS に移行する利用者向けに設計されている

※ミッションクリティカルなアプリケーションを稼働するプラットフォームを
「エンタープライズ ワークロード」と定義し、高性能・高信頼・高セキュリティなクラウド基盤を提供している

SAP ってなぁに

「SAP社」が製造する「ERP」製品のことです。(英: Enterprise Resource Planning)

  • 全部門共通システムと呼ばれたりする
  • 企業全体の資源(人・もの・金・情報)を管理するシステム
  • 企業内で発生する、様々なデータを一元的に管理することによって、業務の最適化につなげていくという考え
  • システムを統合することのメリットを、強く意識して生み出されたのが「ERP」という概念
  • 個別に機能していたシステムを、会社全体で1つのシステムに統合する

Launch Wizard を使う利点

AWS の数千の利用者様が、AWS Quick Start と Amazon Elastic Compute Cloud (EC2) を使用して、SAP ワークロードを構築および移行しました。
これには、x1、x1e、ハイメモリインスタンスが含まれます。
さらに、AWS Partner Network (APN) for SAP を利用して、自分に合ったソリューションを見つけています。
SAP の利用者様は、AWS リソースを最大限に活用して SAP システムをデプロイするために、
利用者に一つずつ質問や設定項目を提示して、選択や入力を促し処理を進める、直感的な操作方式を求めています。

■デプロイ効率

  • SAP ワークロード要件に適合する、 Amazon EC2 インスタンスを推奨
  • 推奨設定と最小限の手動入力で SAP システム向けの AWS のサービスの起動を自動化
  • プロビジョニング評価の時間を短縮、SAP アプリケーションのデプロイを 2 倍高速化

■規範的ガイダンス

数千の SAP on AWS のデプロイのベストプラクティスに基づいて、SAP システム用の AWS のサービスの正しいサイジングとプロビジョニングを提供

■学習曲線の高速化

SAP のデプロイパターンに合わせた、ガイド付きのデプロイの手順を提供し、SAP 用語を使用して
SAP ユーザーになじみのあるサービス体験を提供

SAP 環境を迅速に起動できることで、新しいビジネスの取組みの俊敏性が向上します。

スタートガイドを試してみた

なるべく分かりやすいように、ページを日本語に翻訳しています。

ステップ1 アプリケーションの選択

Launch Wizard コンソールで、[デプロイの作成] ボタンをクリックし、SAP アプリケーションを選択します。
image.png
image.png
[次へ] ボタンをクリックすると、デプロイ名とインフラストラクチャ設定を指定できます。
インフラストラクチャ設定は、インフラストラクチャを使用してデプロイを分類する方法に基づいて保存できます。
これらの設定は、同じインフラ設定を共有する SAP システムのデプロイに再利用できます。
[Verify connectivity]にチェックをいれます。
2020-04-20_15h38_56.png
2020-04-20_15h41_43.png
キーペアを割り当て、SAP インスタンスをデプロイする VPC を選択します。
アベイラビリティーゾーンおよびプライベートサブネットを選択した後に、SAP アプリケーションを実行する EC2 インスタンスにセキュリティグループを割り当てることができます。
image.png
image.png
2020-04-20_16h02_56.png
SAP システム管理者 ID を設定したら、Amazon Simple Notification Service (SNS) のトピックを設定して、SAP デプロイに関するアラートを取得できます。
image.png
[次へ] ボタンをクリックすると、アプリケーションの設定に移動できます。
インフラストラクチャ設定を保存すると、次回のデプロイに適用するために再利用できます。
image.png

ステップ2 インフラストラクチャを定義する

アプリケーション設定を構成すると、AWS Launch Wizard for SAP は、2 種類の SAP アプリケーションをサポートします。
image.png
SAPHANA データベースデプロイとHANA データベースデプロイの NetWeaver スタックです。
SAP HANA インストールで使用されるSAPSID、HANASID、およびインスタンス番号を指定し、これらの入力に基づいて AWS リソースを設定できます。
image.png
「SAP HANA Data and Log」 の 2 つの EBS ボリュームタイプをサポートします。
HANA データおよびログ – 汎用 SSD (gp2) および プロビジョンド IOPS SSD (io1) です。
オプションで、SLES/RHE を使用して高可用性を実現するために設定された HANA をデプロイするために、S3 バケットでホストされる HANA ソフトウェアを選択できます。
2020-04-20_16h23_49.png
次に、SUSE Linux や RedHat Enterprise などの SAP がサポートするオペレーティングシステムを使用して、単一インスタンス、分散インスタンス、マルチ AZ の高可用性パターンにおけるデプロイモデルを設定できます。
2020-04-21_10h21_16.png
2020-04-21_10h21_40.png
インフラストラクチャ要件を定義するときは、推奨ガイドを使用して vCPU/Memory を提供するか、
SAP コンポーネント (ASCS、ERS、APP、または HANA DB) の SAP がサポートする EC2 インスタンスのリストからインスタンスを手動で選択して、その上に SAP コンポーネントをデプロイできます。
特定のデプロイのためにプロビジョニングされる AWS リソース (Amazon EC2、EBS、および EFS ボリューム) のコストの見積もりを確認できます。
2020-04-21_10h22_10.png

確認してみる

すべての設定を確認したら、[デプロイ] ボタンをクリックするだけでデプロイできます。
2020-04-21_10h22_33.png
選択したデプロイに応じて、1~3 時間かかります。
デプロイされた SAP システム、デプロイに使用されたインフラストラクチャ設定、デプロイされた SAP のコンポーネント、 EC2 インスタンスへの SAP コンポーネントのマッピングを確認できます。
2020-04-21_10h23_02.png
AWS Launch Wizard のご使用には追加料金はかかりません。
作成したリソースに対してのみ、料金が発生します。

所感

「ERP」製品自体あまり触れたことがないので、イメージはしづらいですが、
一括で、基盤となる AWS リソースのプロビジョニングを調整することができるので確かに簡単、迅速であることを実感できました!
AWS リソースを最大限に活用して SAP システムをデプロイするために、是非活用してみてはいかがでしょうか。

公式サイト

Amazon Web Services ブログ
AWS Launch Wizard


在宅勤務なら AWS のサービスを活用しよう!

はじめに

コロナウイルスの影響で、在宅ワークをせざるを得ない状況となりました。
皆様が少しでも良い環境で、在宅ワークを行えるように
AWS の公式ブログ、そのサービスの内容をご紹介したいと思います!

在宅勤務について

たった数週間で多くのことが変わりました。
これまでのスタイルの生活、仕事、会議、挨拶、コミュニケーションは、しばらく姿を消しています。
友好的な握手と温かいハグは、現時点では健康的でなく、社会的にも受け入れられないものとなっています。

自分たちは、多くの人々が仕事、学校、コミュニティ環境の変化に対応するべきことを認識しています。
AWS では、お客様、コミュニティ、従業員が状況に合わせて対応できるようにするための措置を講じています。

現在、多くの都市や国々において、人々は、在宅勤務や自宅学習を求められています。
AWS のいくつかのサービスをご利用いただくことで、オフィスや教室から自宅への移行を少しだけ簡単にすることができます。

ソリューションの概要

Amazon WorkSpaces

仮想 Windows デスクトップ仮装 Linux デスクトップを起動でき、あらゆるデバイスでどこからでもアクセスできます。
これらのデスクトップは、リモートワーク、リモートトレーニングなどに使用できます。

Amazon WorkDocs

他のユーザーとの共同作業を簡単にします。
場所とデバイスを問わないのは同様です。コンテンツを作成、編集、共有、および確認することができ、すべて AWS に一元的に保存されます。

Amazon Chime

最大 100 人 (今月後半に 250 人に増加) が参加するオンライン会議 (チャットやビデオ通話など) をサポートします。
すべて単一のアプリケーションから行えます。

Amazon Connect

着信コールやメッセージを何万人ものエージェントにルーティングする機能を使用して、コールセンターまたはコンタクトセンターをクラウドにセットアップできます。
これを使用して、エージェントが在宅勤務をしていても、緊急情報や個別のカスタマーサービスを提供できます。

Amazon AppStream

デスクトップアプリケーションを任意のコンピューターに配信できます。
計算や 3D レンダリングに GPU を使用するものなど、エンタープライズ、教育、または遠隔医療のアプリを大規模に配信できます。

AWS Client VPN

どこからでも AWS およびオンプレミスネットワークへの安全な接続をセットアップできます。
従業員、学生、または研究者に、既存のネットワークに「ダイヤルイン」(過去に私たちが使っていた言葉と同じ意味です) する機能を提供できます。

料金体系について

これらのサービスの一部には、無料で簡単に開始できます。
その他は、AWS 無料利用枠で既に利用可能となっています。
詳細については、各公式サービスのホームページと、新しい Remote Working & Learning ページをご覧ください。

在宅ワークに役立つコンテンツ

AWS では、これらのサービスと在宅勤務を可能な限り効率的に使用するのに役立つ AWS 関連コンテンツの取りまとめを開始しています。
特別な機器はいらない Twitch で Meetup をライブストリーミングする
Amazon Connect でリモートコンタクトセンターエージェントをすばやくセットアップ
Amazon Kendra、Amazon Comprehend、Amazon Translate などを使用して、学生を大規模に参加させ、教育するオンライン学習プラットフォームを構築する
Jitsi 入門 – オープンソースウェブ会議ソリューション
Amazon Chime を使用したリモートワークのベストプラクティス
Amazon WorkSpaces および Amazon WorkDocs で在宅勤務を可能にする新しいオファー

終わりに

今後、様々な状況により在宅勤務が長引いたり
もしくは在宅ワークのほうが、効率的に業務を進められるという気づきがあって
本格的に、永続的に在宅ワークが主流になった場合に備えても、これらのサービスはとても役立つと思います。
何事も備えておきたい。是非今すぐご活用ください!


[新5分で分かる]S3について

はじめに

Amazon S3(以下S3)とは?
・Amazon Simple Storage Serviceの略です。
・容量が無制限なAWSのストレージサービスです。
(ただし一つのファイルにつき5TBまで)
本記事ではS3の強み料金体制近年の変化などを紹介していきます。

S3の強みとは?

1、耐久性

S3は99.999999999%の耐久性能を持っています。

  • 全てのデータを3つのAZ(アベイラビリティーゾーン)で保管する
  • 別々の変電所からAZに電力供給する
  • 他のAZやネットへ接続するには複数のファイバーケーブルを使用する

これらにより1つのAZが完全に損失しても耐久可能な性能を持ちます!

2、セキュリティ

  • 異なる3種の暗号形式で保護
  • AWS Clowd Trailなど監査に対応したツールがある
  • AWS Macieにより機密データを自動検出し保護できる
  • 複数のセキュリティ基準、コンプライアンス認証がサポートされている
  • S3 Block Public Accessにより全てのパブリックアクセスをプロックできる

S3は自社のデータセンターより運用上の安全性が高いと考える企業があるほど
堅牢なセキュリティを誇ります。

3、管理能力

  • AWS Lambdaにより専用のコンピューターリソースなしでワークフローの開発ができる
  • 柔軟性に優れた管理機能、分類機能が使用できる

S3は手元のデータへの適切な判断やコストの自動的削減に役立ちます。

4、インプレースのクエリ機能

S3は外部の分析プラットフォームに移動させる必要なく、S3のオブジェクト全体で高度なビッグデータ分析を実行できます。
また自動でスケーリングが実行されるので、データ量が増えてもパフォーマンスは変わりません。

5、パートナーネットワーク

Amazon S3のエコシステムには数万社を超えるパートナー企業が登録しており、
AWS Marketplaceから多様なAWS 統合ソリューションを使用できます。

料金体制について

1、S3の課金対象

  • S3に保存されるデータ容量
  • リクエストとデータ取り出し​
  • データ転送量​

2、ストレージタイプ

上記の料金は使用するストレージタイプにより変動します。
以下ではそれらの特徴について簡単に説明します。

  • S3 標準
    →アクセス頻度の高いデータ向け
  • S3 標準-低頻度アクセス​
    →長期保存、バックアップ等の保存向け
  • S3 1 ゾーン-低頻度アクセス​
    →バックアップ等の保存向け、1つのAZにデータを保存するためコストを削減できる
  • S3 Glacier
    →アーカイブのように使用でき、データの取り出し時間がかかる分、保存コストが安い
  • S3 Intelligent-Tiering​
    →アクセスパターンによって保存するストレージを移動させ、コストを最小限に抑える。長期間使用するデータの保存向け

近年の変化

1、リクエストレートのパフォーマンス向上(2018年)

2018年7月より、追加料金なしで処理時間を大幅に節約できるようになりました。
→従来は800リクエスト/秒を超えるGETリクエストが5,500リクエスト/秒と大幅に引き上げ、
PUT/LIST/DELETEリクエストのしきい値も300リクエスト/秒だったところ3,500リクエスト/秒と変わりました。

2、SigV2の廃止(2020年)

2020年6月24日以降に作成された新しいバケットに対して、初期の署名モデルであったSigV2署名付きリクエストはサポートされなくなりました。
(SigV4をS3で利用しているか判定するには、CloudTrailを使用する必要があります。)

おわりに

AWSサービスは日々劇的に進歩しています。
以下に公式ページのS3解説が掲載されています。
https://aws.amazon.com/jp/s3/
ぜひアクセスしてみてください!


[5分で分かる]AWS基本知識

はじめに

本記事は初めてAWSに触れる人が押さえておくべき具体的なサービスと用語が何となく分かる。
そんな初心者入門の記事となっております。

AWS基本

リージョンとアベイラビリティーゾーン

・ AWSは世界22の箇所にあるデータセンター群から構成されています。
(2020年4月時点)
・ それらデータセンターをリージョンと呼びます。
(例:東京リージョン、オレゴンリージョンなど)
・ リージョンはさらにアベイラビリティーゾーンに分割されます。
・ 私たちがAWSを使う際は、どのリージョンのアベイラビリティーゾーンを使用するかを決める必要があります。

参考URL

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

VPC

・ Virtual Private Cloudの略です。
・ AWSサーバー上に構築された固有のサーバー領域をVPCと呼びます。
・ ここに各ユーザーはインフラやシステムを構築、配置します。

参考URL

https://aws.amazon.com/jp/vpc/

EC2

・ Elastic Compute Cloudの略です。
・ 誰でも簡単に仮想サーバーを立ち上げることができるサービスです。
・ 基本的に使った分だけ課金される従量課金制が採用されています。

参考URL

https://aws.amazon.com/jp/ec2/features/

EBS

・ Elastic Block Storeの略です。
・ EC2に付属している外付け記憶領域のことです。
・ 通常EC2にもメモリがありますが、これはサーバーを停止すると消えてしまいます。
・ EBSはサーバーを停止した時などに、データを保守するのに必要となります。
・ アクセスすることが多いデータの保存に向いています。

参考URL

https://aws.amazon.com/jp/ebs/?ebs-whats-new.sort-by=item.additionalFields.postDateTime&ebs-whats-new.sort-order=desc

IAM

・ Identity and Access Managementの略です。
・ AWSサーバーへのアクセスを安全に管理するためのサービスです。
・ サーバーへのアクセス範囲、方法を制限できます。

参考URL

https://aws.amazon.com/jp/iam/

S3

・ Simple Storage Serviceの略です。
・ 最大の特徴は容量が無制限なこと(ただし一つのファイルにつき5TBまで)です。
・ EBSよりも安く、バックアップデータを置くことに向いています。

参考URL

https://aws.amazon.com/jp/s3/

ELB

・ Elastic Load Balancingの略です。
・ AWSサーバーへのアクセス負荷を分散するサービスです。
・ 用途に合わせて三つの分散処理システムが用意されています。
・ 使用することで突発的なアクセス増加に強いシステム構築ができます。

参考URL

https://aws.amazon.com/jp/elasticloadbalancing/

Route53

・ AWSのドメインネームシステム(DNS)ウェブサービスです。
・ 最大の特徴はとにかく落ちづらいことです。

参考URL

https://aws.amazon.com/jp/route53/

Cloud Watch

・ AWS上でシステム運用するためのサービスです。
・ AWSの各サービスに関するメトリクスを収集することで、システム上のリソースやアプリケーションを最適化することができます。

参考URL

https://aws.amazon.com/jp/cloudwatch/

まとめ

いかがでしたでしょうか?
現在(2020年4月時点)AWSでは175以上のサービスを展開しており、
この記事には紹介しきれなかった魅力的なサービスは他にも数多くあります。
興味を持って頂けましたら、ぜひAWSの最先端サービスを体験してみてください!!


Amazon Athena+AWS Glue のベストプラクティス を学ぼう #1

はじめに

本記事は、AWSの公式ドキュメントAthena と AWS Glue を併用する際のベストプラクティスを参考に、Athena、Glue間のデータ連携について検証する記事になります。

わかりにくいワードを記事最後尾にまとめております。記事の目次から各ワードの解説へ飛べます。
読んでいる途中でわからないワードがあったら、目次から探してみてください。

本記事は数部にわたり、投稿してまいります。
投稿した記事を順次、以下に追記してまいります。
今回はまず、ベストプラクティスを学ぶ前にGlueとAthenaを触ってみる回になります。ベストプラクティスについては#2で学んでまいります。

Amazon Athenaとは

AWSの提供するインタラクティブなクエリサービスです。Amazon S3 内のデータを標準 SQL を使用して簡単に分析できます。

AWS Glueとは

AWSの提供するフルマネージド型のETLサービスで、分析用データの準備とロードを簡単にします。
AWS に保存されたデータを指定するだけで AWS Glue によるデータ検索が行われ、テーブル定義やスキーマなどの関連するメタデータが AWS Glue データカタログに保存されます。
カタログに保存されると、データはすぐに検索かつクエリ可能になり、ETL に使用できるようになります。

なぜAthena、Glueを併用するのか

Athena と AWS Glue データカタログを併用すると、AWS Glue で作成したデータベースとテーブル (スキーマ) を Athena でクエリしたり、Athena で作成したスキーマを AWS Glue や関連サービスで使用したりできます。

AWS Glue データカタログにメタデータを登録

SIGNATEに掲載されているお弁当需要予測のtrain.csvを利用して、AWS Glueデータカタログにメタデータを登録します。
まず、任意のS3バケットにcsvファイルをアップロードします。
私は以下のパスにアップロードしました。

[crayon-5f00e8fb32bc6573643814/]

次にクローラを追加します。
AWSコンソール上でAWS Glueを開き、左の項目からクローラをクリックします。

image.png

クローラの追加をクリックします。
image.png

クローラに名前を付けます。
任意の名前を入力して、次へをクリックします。
私は、test-obento と入力しました。

image.png

クローラのデータソースを指定します。
今回はデータストア(S3)を利用するので、Data storesを選択して、次へをクリックします。

image.png

データソースの詳細設定をします。
データストアはS3で自分のアカウントで指定されたパスを選択します。
インクルードパスには、アップロードしたcsvファイルのあるフォルダを選択します。
私の場合はs3://バケット名/test/となります。

image.png

他に追加したいデータストアがある場合は追加できます。
今回はいいえを選択し、次へをクリックします。

image.png

IAMロールの選択、作成を行います。
今回、私はIAMロールを作成しました。
IAMロールに任意の名前を入力して次へをクリックします。

image.png

次にクローラのスケジュールを設定します。
実際に業務で使う場合は、メタデータの更新、追加があるので定期的にクローラを実行しメタデータの更新を反映します。
今回は一度読み込むだけなので、オンデマンドで実行を選択し、次へをクリックします。

image.png

次にクローラの出力設定をします。
データベースは作成していないので、データベースの追加から新たにデータベースを作成します。

image.png

任意のデータベース名を入力してください。
私は、testとしました。

image.png

作成したデータベースが選択されていることを確認し、次へをクリックします。
image.png

内容を確認し、完了をクリックします。
image.png

クローラが作成されると画面上部に今すぐ実行しますかと出てくるので、クリックします。
image.png

クローラが実行され、完了すると以下のようにステータスがStoppingとなります。
image.png

左の項目から、テーブルを選択し、作成されたテーブルをクリックします。
image.png

すると以下のようにAWS Glueデータカタログに登録されたテーブルのメタデータが確認できます。
image.png

AWS Glueデータカタログに登録されたデータを元に Amazon Athena でクエリを実行

早速、データカタログに登録されたデータを利用して、Athenaでクエリを実行します。
まず、AWSコンソール上でAmazon Athenaを開きます。
最初に、クエリの実行結果の保存先を指定する必要があります。
画面右上の設定をクリックします。

image.png

出力先となるS3パスを入力します。

image.png

では試しに、登録したデータをクエリで抽出してみます。
以下のコードを実行します。
これでテーブルを全て抽出します。

[crayon-5f00e8fb32bee992182442/]

すると以下のように実行結果が返ってきます。
image.png

先ほど設定した出力先にも、クエリ結果が保存されているので確認してみてください。
image.png

正しく出力されていました。
image.png

終わりに

今回はベストプラクティスを学ぶ前段として、Athena、Glueを利用してみました。
次回からは、ベストプラクティスに沿ってAthena+Glueを学んでいきます。
どうぞよろしくお願いいたします。

用語解説

インタラクティブ
  • 双方向、対話型という意味
    例えば、スマホで何かを検索するとします。
    検索バーにワードを打ち込んで検索をかけると検索結果が返ってきます。
    これは、送信側である私たちのこれが調べたいというリクエストに対して、それを受信したブラウザが検索結果はこれですよと応答してくれています。 これが対話型、インタラクティブな通信といえます。
クエリ
  • データベースのデータを操作、抽出する際に送る処理要求(命令)
SQL
  • リレーショナルデータベースのデータを操作したり、定義するためのプログラミング言語
    SQLで書いた、SQL文がクエリにあたります。
リレーショナルデータベース(RDB)
  • 事前に定義された表形式のデータベース
    1個以上の列と0個以上の行によって構成される表形式のデータベースで、RDB上で行う様々な操作の結果も表形式で表現されます。
    RDBでは、個々の表は必要最小限の情報のみを保持するように設計し、SQLによって各表の選択結合等を行いデータを取り出します。
    例えば、以下のように商品と売り上げのテーブルをRDB上に定義するとします。

商品マスターテーブル

商品番号 商品名 単価
0001 商品A ¥ 100
0002 商品B ¥ 200

売り上げテーブル

注文日 商品番号 個数
1/1 0001 2
1/2 0002 3

ここで、売り上げと商品情報を同時に得たいという場合には、SQLで結合、計算等を行うことで、以下のような出力が得られます。

商品番号 商品名 注文日 単価 個数 小計
0001 商品A 1/1 ¥ 100 2 ¥ 200
0002 商品B 1/2 ¥ 200 3 ¥ 600
フルマネージド型サービス
  • 事業者によって内容は異なりますが、その多くは対象のサービスの24時間365日監視や障害発生時の復旧作業を事業者が提供することを指す
ETL(Extract/Transform/Load)
  • データベースなどから、データを抽出(Extract)、必要に応じて変換(Transform)、変換済みのデータを格納先にロード(Load)することを指す
テーブル定義
  • テーブルの詳細情報のことで、どのようなカラムが存在して、各カラムの属性は何かを定義している情報
スキーマ
  • データベースの構造
    データベースによってスキーマの定義が違い、スキーマのないデータベースもあります。
メタデータ
  • データに関するデータ
    こちらも場合によって、定義が違います。
    よくある例としては、作成者、ユーザー名、編集者、作成日、更新日、保存場所、サイズのようなデータが該当します。
AWS Glue データカタログ
  • データの場所、スキーマ、およびランタイムメトリクスへのインデックス ETL ジョブを作成するために、Glueが参照するカタログでメタデータとして保存されています。
クローラ
  • 指定したデータ群のメタデータを調査してAWS Glueデータカタログに追加するもの

Amazon Translate、AWS Lambda を使った自動翻訳(後編)

はじめに

前回の記事でご紹介した、ドキュメント翻訳の自動化の実践の続きです。

batch-translation-6.gif

コンテンツを外国の言語に翻訳するには、バッチ翻訳ジョブを実行することで、容易かつコスト効率よく解決することができます。
しかし、一連のドキュメントを集めたり、そのドキュメントに対して定期的に非同期のバッチ API を呼び出したりすると時間がかかります。
ドキュメントが用意された時点で、すぐに翻訳処理を開始できたほうがいいですよね。

AWS Lambda と リアルタイム翻訳を使用する進んだアプローチ

イベント駆動型アーキテクチャを利用することで、簡単に、自然な翻訳を行えるようになります。

特定の S3 バケットにドキュメントがアップロードされたときに、そのバケットから AWS Lambda に通知が送信されるように設定を構成します。

実践の流れ

S3 バケットの通知により、AWS Lambda では、次のようなイベントのシーケンスのためのコードが実行されます。

1. ドキュメントを読み出し S3 バケットにアップロードします。
2. リアルタイム翻訳 API に渡せるように、要素をドキュメントから抽出します。
3. リアルタイム翻訳 API にこの要素を渡します。
さらに、リアルタイム翻訳 API からの出力を使って翻訳済みドキュメントを再構成します。
4. 指定したバケットに翻訳したドキュメントを保存します。

ステップ1.  CloudFormation を使ったアプリケーションの起動

コンソールを使い、 AWS CloudFormation スタックを起動します。

AWS CloudFormation コンソールで、新しくリソース (標準) を設定し、[Create stack]をクリックします。
2020-04-13_15h21_47.png

[Amazon S3 URL] を選択し、Amazon S3 URL の項目に
https://s3.amazonaws.com/aws-ml-blog/artifacts/serverless-document-translation/translate-lambda-cfn-stack.yml
をコピーします。次に [Next] をクリックします。
image.png

ステップ2. S3 バケットを作成して指定する

[Stack name] には、automated-document-translation のように、アカウント内で一意のスタック名を入力します。
[IAMRoleName] には、TranslationLambdaExecRole のように、アカウント内で一意の IAM ロール名を入力します。
2020-04-13_15h30_21.png

[LambdaFunctionName] には、trigger-translation のように、一意の AWS Lambda 関数名を入力します。
[InputBucketName] には、スタックが作成した Amazon S3 バケットのための、一意の名前を入力します。
入力のドキュメントは、翻訳処理前に、このバケットにアップロードされます。
新規の S3 バケットが作成されるため、既存バケットの名前は使わないようにします。
※ 名前が同じものがあると、スタックの構築が失敗します。

[OutputBucketName] には、出力バケットのための一意の名前を入力します。
翻訳済みの出力ドキュメントが、このバケットに保存されます。
入力バケットの場合と同様に一意の名前をつけてください。

[SourceLanguageCode] では、翻訳前のドキュメントの言語を、コードで入力します。
たとえば、英語を指定する場合は en とし、主として使われている言語を検出させる場合は auto とします。

[TargetLanguageCode] には、翻訳後のドキュメントで使う言語を、コードで入力します。
日本語を指定する場合には ja とします。
(使用可能な言語コードの詳細についてはこちら
[Next] を選択します。
2020-04-13_15h30_53.png
[Configure Stack Options] ページで、スタック用のタグなど、追加のオプションパラメータを選択します。
(特に必要なければいじらなくてOK)
[Next] を選択します。
[I acknowledge that AWS CloudFormation might create IAM resources with custom names.] のチェックボックスをオンにします。
2020-04-13_16h07_18.png
[Create Stack] をクリックします。
スタックの作成が完了するまで、最大 1 分間ほどかかります。

ロール(権限)の内訳

Lambda 関数では、このロールが必要な Amazon S3 と Amazon Translate API にアクセスできることを想定しています。
この IAM ロールには、 2 つのポリシーがアタッチされています。

1 、入力および出力の S3 バケットに対する、読み出し/書き込みのアクセス権限
(GetObject と PutObject) を与えるカスタムポリシー。
2 、AWS が管理しているポリシー TranslateReadOnly
Amazon Translate への API を呼び出すためのもの。

ステップ3. アプリケーションの実行

AWS CloudFormation スタックの作成が終わると、このソリューションを利用開始できます。
デザインを表示させるとこんな構成が出来上がります。視覚的にわかりやすいですね。
2020-04-13_16h44_24.png
2020-04-14_15h03_19.png

入力側の S3 バケットに、翻訳対象のテキストファイルをアップロードします。
これによりワークフローが起動され、処理が完了すると、翻訳済みドキュメントが出力側の S3 バケットに自動的に保存されます。

翻訳済みドキュメントは、出力 S3 バケット内の次のようなパスに保存されます。
<TargetLanguageCode>/<original path of the source file>.

たとえば、入力ドキュメントのタイトルが test.txt となっていて、入力 S3 バケット内の in202040413 という名前の S3 フォルダーに保存されているとします。
2020-04-14_04h13_59.png

日本語に翻訳されたドキュメントの保存先は、出力バケット内の 「ja/out20200413/test.txt」 となります。
2020-04-14_04h14_29.png

出力 S3 バケットでドキュメントが見つからない場合は、Amazon CloudWatch Logs で対応する Lambda 関数をチェックし、失敗の原因となっている可能性のあるエラーを探します。

ここでは、UTF-8 形式のテキストドキュメントのみを処理しています。
Lambda 関数での最大実行時間 (timeout) に関する制限があります。

結果

今回は一つのファイルに英語の文章をまとめてから、アップロードしました。
2020-04-14_15h08_04.png
今回も違和感のないキレイな日本語になりました!

所感

1. 収集したドキュメントに、非同期のバッチ翻訳を行うシンプルな翻訳
2. AWS Lambda と Amazon のリアルタイム翻訳を使い、ドキュメントを入手する度に同期的に翻訳を行う、
より進んだ手法
今回この2つの手法を使ったドキュメント翻訳を行いましたが、1だとバケットを一度作ってしまえば Translate で操作して簡単に行なえますし
2を使えば S3 バケットを前もって作らなくても、自動的な翻訳が一度に一つのコンソール画面で処理できるので、面倒が少なくて済みます。
作業効率もあがりますし、文の長さを気にせず、質の高い翻訳が実現できるので積極的に使っていきたいです!

公式サイトリンク

AWS サービスブログ
Amazon Translate


Amazon Translate、AWS Lambda を使った自動翻訳(前編)

はじめに

今回も AWS 公式ブログから、気になる記事を見つけてきたのでご紹介します。

ビジネスや個人向けに、デジタルなテキストドキュメントをコピー&ペーストして、希望の言語に翻訳できるツールが複数存在します。(分量に限度があり)
しかし頻繁に行うとなれば、退屈で時間だけがかかる作業になります。

そこで、2 つのソリューションについて解説していきます。

1. 収集したドキュメントに、非同期のバッチ翻訳を行うシンプルな翻訳
2. AWS Lambda と Amazon のリアルタイム翻訳を使い、ドキュメントを入手する度に同期的に翻訳を行う、より進んだ手法

Amazon Translateとは

  • 現実的な価格で、迅速かつ高品質な翻訳を実現する、ニューラル機械翻訳サービス
  • ニューラル機械翻訳、深層学習モデルを応用した、自動翻訳の一形態
  • 従来の統計学や規則をベースにした翻訳アルゴリズムと比べて、正確かつ自然
  • 多様なコンテンツに適格に対応。異なるユースケースやドメイン間での、多様な文章を使ってトレーニングされている
  • 大量に集積したテキストや HTML ドキュメントの翻訳に使える、非同期のバッチ翻訳機能
  • 1 回の API 呼び出しのみで、ドキュメント一式を言語翻訳できる

非同期バッチ翻訳を使うことで、ドキュメントやチュートリアル素材、あるいはブログなどを、日ごとに希望の言語に翻訳することが可能です。
バッチ翻訳ジョブの進行状況をモニタリングしたり、指定した出力フォルダーから翻訳結果を取得することもできます。

同期バッチ翻訳を使うシンプルなアプローチ

Amazon Translate のバッチ翻訳を試すために、 3 つのテキストファイルを使用します。

[crayon-5f00e8fb337fe525153452/]

ステップ1 S3バケットを作成

us-east-1 に S3 バケットを作成し、一意の名前を付けます。
このバケット内に、「raw」という名前のフォルダーを作成します。
2020-04-10_14h59_04.png
フォルダー 「s3://作ったバケット名/raw/」 に、翻訳対象のテキストファイルをアップロードします。
このバケットが、バッチ翻訳の入力を保持することになります。

一意の名前で、保存先として、もう 1 つの S3 バケットを us-east-1 に作成します。
このバケット内に、「output」という名前のフォルダーを作成します。
バッチ翻訳からの出力は、「s3://2つ目のバケット名/output/」 の中に保存されます。

ステップ2 Amazon Translateでバッチ翻訳

Amazon Translate コンソールで、[Batch Translation] をクリックします。(バージニア北部を選択)
[Create job] をクリックします。
2020-04-10_15h27_44.png
[Name] に、「 MyTranslationJob 」と入力します。
[Source language] で、[English] を選択します。
[Target language] では、日本語を選択します。
[Input S3 location] に、s3://ファイルを入れたバケットの名前/raw/ と入力します。
[File Format] で、[txt] を選択します。
2020-04-10_15h54_21.png
[Output S3 location] に、s3://保存先のバケット名/output/ と入力します。
[Access permissions] では、[Create an IAM role] を選択します。
[IAM role] では、[Input and output S3 buckets] を選択します。
[Role name] に、translate-batch-role と入力します。
[Create job] をクリックします。
2020-04-10_16h52_21.png
ジョブの作成が完了すると、 Amazon Translate コンソール上で、その進行状況が確認できるようになります。
2020-04-10_16h52_42.png

ジョブが完了すると、上記の status が Completed に変わり、翻訳済みのドキュメントが出力用の S3 バケットに保存されます。
image.png

翻訳した結果

保存されたファイルをチェックしてみました。違和感の無い綺麗な日本語になりました!
2020-04-10_17h56_24.png

後編に続きます!

公式サイトリンク

AWS サービスブログ
Amazon Translate


Lambda@Edgeを使用してカスタムゲームコンテンツをプレーヤーに配信する方法

はじめに

AWS の「 Amazon Game Tech 」公式ブログで、ゲームコンテンツをいかにすればネット遅延なく、配信できるのか?という記事をご紹介します!
image.png

AWS を利用して構築されている某モバイルゲームなどをよくプレイしていると、画質は綺麗だし動きもまるでコンシューマーゲームと変わらないようなクオリティでプレイできます。
誰かがゲームをプレイするたびに、データがチェックされてダウンロードされています。
プレーヤーの場所に関係なく、どのようにして超高速配信を確実にしているのか、という疑問を説明していきます。

超高速配信の為に何をすべきか?

この問題には、 AWS のさまざまな解決策があります!
ほとんどは着信要求を調べ、プレイヤーのリクエストをみて、提供するどのファイルをレスポンスで返すかを決めるコードを実行する web 機能を実装します。

ただし、「電光石火の速さ」を必要とすることは少し問題があります。
プレイヤーが世界中にいる場合、ファイルが海中を走っているネット回線を介してダウンロードされているため、ゲームが読み込まれるのを待つ必要がないようにするにはどうすればよいか?
そのデータは CDN(コンテンツ配信ネットワーク)上にある必要があります。

コンテンツ配信システム

CDN

  • 世界中の複数のサーバーがコンテンツを配信するシステム
  • 「マスター」サーバーにチェックインすることで、常に最新のファイルを保持
  • 世界中にサーバーがあるので、サーバーがプレイヤーの近くにある可能性が高く、ダウンロードがはるかに高速になる

しかし、CDN だけでは問題は解決しません。
1つのURLがヒットしているため、実際に送信するファイルを決定するコードが必要です。
CDN でコードを実行することはできません。

Amazon CloudFront について

AWSは、Amazon CloudFront と呼ばれる、高速で安全性の高いコンテンツ配信ネットワーク(CDN)を提供しています。
CloudFront には、この問題の解決に役立つ 「Lambda@Edge」 と呼ばれる機能があります。
2020-04-07_15h35_14.png

AWS Lambda

サーバーをプロビジョニングまたは管理せずにコードを実行できるサービスです。
Lambda@Edge は、このサーバーレスなテクノロジーを CloudFront にもたらします。

Lambda@Edge 関数

  • プレーヤーにコンテンツを提供している近くの同じサーバーで実行される
  • データを取得するときに CloudFront がプレーヤーに送信するものを決定でき、コンテンツを送信する前に、追加の待機時間が起きるのを防ぐ
  • Lambda@Edge にはトリガーのタイプに関する制限があり(すべてCloudFrontを中心)、許可される実行時間が短いが、静的な CDN にはないレベルの実用性が CloudFront に追加される

オリジンとエッジの関係

まず「オリジンサーバー」と「エッジサーバー」とは何なんだと。

「オリジンサーバー」

  • ファイルの作成元であり、ファイルの最新バージョンが存在する場所
  • CloudFront にデータを取得するために、すべてのサーバーにデータをプッシュする必要がなく、代わりにオリジンサーバーにデータを配置する

「エッジサーバー」

  • プレーヤーにデータを提供する、複数のリージョン(地域)のすべてのサーバー
  • プレーヤーに送信する前に、常に元のサーバー(オリジン)に新しいデータがあるかどうかを確認し、そのデータもキャッシュする
  • データはプレーヤーのために常に準備されており、再びオリジンからそれを取得する必要がない

これが高速な理由です。

遠くから投げられたボールをキャッチするよりも、近くのボールをキャッチするほうが断然早いですよね。
デフォルトでは、キャッシュは24時間残りますが、必要に応じてキャッシュを長くしたり短くしたりできます。

所感

よく海外のWEBページの観覧や、ゲームをやっているとなかなか通信が重かったりします。
それは直接遠くにあるオリジンサーバーにアクセスして、大量の負荷がかかり、キャッシュより重いデータメモリにアクセスしているからなんだなと知ることができました。
CloudFront があるだけで、アクセス遅延によるユーザー離れも免れます。

公式サイトリンク

Amazon Game Techブログ
Lambda@Edge


【AWS Elastic BeansTalk】Python アプリを爆速で展開

はじめに

前前回の記事に引き続き
AWS の自動化サービスである Elastic BeansTalk を、今度はコンソール画面のみで展開してみました。
びっくりするくらい簡単なのですぐにお試しできます!

2020-03-06_13h39_26.png

1. プラットフォームを決める

今すぐ始めるをクリック。名前を決めて、基本設定の「プラットフォーム」のプルダウンで「事前設定済み」の「Python」を選択。
「アプリケーションコード」は「サンプルアプリケーション」を選択。
2020-03-18_13h31_49.png

2. 待つ

とくになにもせず数分待ちます。
2020-03-18_13h32_41.png
中では CloudFormation からスタックベースにアプリケーションのデプロイ環境がつくられており、VPC や EC2 インスタンス(セキュリティグループや Elastic IP)や データベース、S3 バケットがつくられ、後に設定をいじることもできます。
image.png

3. Pythonファイルをアップロードする

「最近のイベント」で更新状況が表示されます。モニタリングやアラームの設定を行うこともできます。
2020-03-18_13h53_26.png

開発者ガイドのサンプルアプリを使ってアプリケーションをアップロードします。
「実行バージョン」の「アップロードとデプロイ」をクリック。
image.png
2020-03-18_17h17_54.png

4. 確認する

数秒でアップロードされ、ヘルスチェックされて「最近のイベント」が更新されます。
2020-03-18_14h47_56.png
URLをクリックして確認するとこんな画面がでてきます。
image.png

所感

とっても簡単で、秒でデプロイできました!
これならCLIやコマンドの知識がなくてもすぐにアプリケーションを展開できますし、一つの画面ですべてのリソースをらくらく組み立てられます!
まさに、インフラストラクチャを気にせずにアプリ開発に集中できるとはこのことですね!

公式サイトリンク

Elastic BeansTalk
開発者ガイド