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
開発者ガイド


Databricks Community Edition で Notebook を立ち上げる

はじめに

Databricks Community Edition の登録から Notebook を立ち上げるまでの手順を示します。

概要

Databricks は、特に海外で破竹の勢いを見せるデータ分析基盤です。

  • データ分析のための統合プラットフォーム
  • 2000 以上のグローバル企業がビッグデータおよび機械学習パイプラインの設計に活用
  • 2020 Gartner Magic Quadrant では Leader に名を連ねた (データサイエンス及び機械学習プラットフォーム分野)
  • Apache Spark、Delta Lake、MLflow の開発者が作っている

Azure であれば Azure Databricks を活用すれば OK ですが、AWS で使う場合は EC2 で動かすことになります。
どちらにせよコストが発生してしまうので導入をためらう人もいるかと思います。そんな人のために Databricks Community Edition という AWS 上で稼働する無償プランが用意されています。有償版との違いはざっくりと以下の通り。

1.jpg

セキュリティやロール管理などを考慮すると仕事で使う場合にはアップグレード必須。無償版で使い勝手を検証 → 14日間トライアル → 本番運用という流れが良さそうです。

アカウント作成

Try Databricks にアクセスして、GET STARTED をクリック
2020-02-25_13h31_13.png

全ての項目を入力し、 Sign Up をクリック
2020-02-25_13h35_01.png

しばらくするとこちらの画面に遷移します。
image.png

メアドに届いたメールのリンクに遷移し、パスワードを設定します(初回登録でも Reset Password になるようです)。
2020-02-25_13h39_31.png

これで完了。すぐにコンソール画面が表示されます。
image.png

クラスタの作成

Home 画面より、New Cluster をクリック
2020-02-25_13h44_13.png

Community Edition では Driver クラスタのみ。 Cluster Name は任意で設定します。Runtime Version については、既存アーキテクチャやスクリプトとの兼ね合いを検討する必要がないのであれば、デフォルト値で良いでしょう(2020年2月25日 時点では 6.2)。
インスタンスは us-west に立ち上がるようです。どれかを選択して Create Cluster をクリック。
2020-02-25_13h49_41.png

ちょっと待つとこちらのアイコンが緑になります。これで Cluster の準備完了です
2020-02-25_13h54_19.png

Notebook の作成

トップ画面から New Notebook をクリックし、名称を任意で入力します。アカウントを作成したばかりであれば、先ほど作成したクラスタが選択されているはずです。Create をクリック。
2020-02-25_13h56_17.png

すぐに Notebook の画面が出てきます。
image.png

さいごに

一定規模以上のデータを保持していて、その解析に Spark 使っているのであれば、現時点では Databricks 一択になるかと思います。普段 Jupyter Notebook で分析をしている方は触っておくだけでも損はないはず。

参考リンク

Databricks


Elastic BeansTalk の Django チュートリアル【初心者向け】

はじめに

前回ご紹介した、Elastic BeansTalkの理解をより深める為に
公式ドキュメントのチュートリアルを使ってDjangoアプリをデプロイしてみました!

前提条件は長くなってしまうので割愛させていただきます。
Python 3.6と Windows 10 を使用しています。

0.Windows で EB CLI をインストール

pip を使用して EB CLI をインストールします。コマンドプロンプトに以下を入力。

C:\Users\ユーザー名>pip install awsebcli --upgrade --user

Windows キーを押し、「環境変数」と入力します。[環境変数を編集] を選択します。

image.png

変数 Path を選択して、[ 編集 ]をクリック。
image.png

[新規]を選択。[ %USERPROFILE%\AppData\roaming\Python\Python37\scripts ]を追加します。

[OK] を 2 回選択して、新しい設定を適用します。

image.png

実行中のコマンドプロンプトのウィンドウを exit で閉じて、再度開きます。

EB CLI が正しくインストールされたかを確認します。以下をコマンドに入力します。

C:\Users\ユーザー名> eb --version

2020-01-28_15h44_13.png

1.Python 仮想環境のセットアップと Django のインストール

1. [ eb-virt ] という名前の仮想環境を作成します。

C:\> virtualenv %HOMEPATH%\eb-virt

2. 仮想環境をアクティブ(実行状態)にします

C:\> %HOMEPATH%\eb-virt\Scripts\activate

3. [ pip ]というコマンドを使用して Django をインストールします。

(eb-virt)~$ pip install

4. Django がインストールされたことを確認するには、以下のように入力します。

(eb-virt)~$ pip freeze

2. Django プロジェクトを作成する

1. 仮想環境をアクティブ化します。

C:\> %HOMEPATH%\eb-virt\Scripts\activate

コマンドプロンプトの先頭に[ eb-virt ]が表示され、仮想環境を使用していることが分かります。
image.png

2. [ django-admin startproject ]コマンドを使用して、[ ebdjango ]という名前の Django のプロジェクトを作成します。

(eb-virt) C:\Users\ユーザー名>django-admin startproject ebdjango

3. [ manage.py runserver ] で Django サイトをローカルで実行します。

(eb-virt) C:\Users\ユーザー名>cd ebdjango

(eb-virt) C:\Users\ユーザー名>python manage.py runserver

4. ウェブブラウザで http://127.0.0.1:8000/ を開いて、サイトを表示します。
2020-01-29_13h23_09.png

5. ウェブサーバを停止して仮想環境に戻るには、キーボードの[ Ctrl+C ]を押します。

3. Elastic Beanstalk 用に Django アプリケーションを設定する

ローカルシステムに作成したサイトを、Elastic Beanstalk でのデプロイ用に設定します。
アプリケーションの環境を調整して、アプリケーションのモジュールをロードできるように、環境変数を設定します。

1. 仮想環境をアクティブ化します。
C:\Users\ユーザー名\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate

2. [ pip freeze ] を実行して、出力を requirements.txt という名前のファイルに保存します。

(eb-virt) ~/ebdjango> pip freeze > requirements.txt

Elastic Beanstalk は requirements.txt を使用して、アプリケーションを実行する EC2 インスタンスにどのパッケージをインストールするかを判断します。
3. [ .ebextensions ] という名前のディレクトリを作成します。

(eb-virt) ~/ebdjango> mkdir .ebextensions

4. [ .ebextensions ]ディレクトリ内に、[ django.config ]という名前の 設定ファイルを作成します。

C:\Users\USERNAME\ebdjango>type nul > django.config

CLIで操作したパスの通りにファイルを開いていきます。
エクスプローラーを開いて、Windows(C:) ドライブにあるユーザーから自分のユーザー名のフォルダを開きます。
「 ~/ebdjango/.ebextensions/django.config 」
django.config を見つけたらメモ帳で開いて設定事項を書きます。

django.config
[crayon-5f04fbf2246fd463429660/]

この設定 WSGIPath は、アプリケーションを起動するのに Elastic Beanstalk が使用する WSGI スクリプトの場所を指定します。

deactivate コマンドを使用して、仮想環境を非アクティブ化します。

(eb-virt) ~/ebdjango> deactivate

4. EB CLI でサイトをデプロイする

※Elastic Beanstalk コンソールを使用して .zip ファイルをアップロードして展開することもできます。
アプリケーション環境を作成し、設定済みのアプリケーションを Elastic Beanstalk を使用してデプロイします。

1. eb init コマンドを使用して EB CLI リポジトリを初期化します。
このコマンドでは、django-tutorial という名前のアプリケーションを作成します。
また、ローカルリポジトリ(ファイルやディレクトリの履歴を管理する場所)を設定し、最新の Python 3.6 プラットフォームバージョンで環境を作成します。

~/ebdjango> eb init -p python-3.6 django-tutorial
Application django-tutorial has been created.

eb init を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH を使用して接続できるようにします。

~/ebdjango> eb init
Do you want to set up SSH for your instances?
(y/n): y
Select a keypair.
1) my-keypair
2) [ Create new KeyPair ]

このコマンドは、django-env という名前のロードバランシング Elastic Beanstalk 環境を作成します。環境の作成には約 5 分かかります。
Elastic Beanstalk はアプリケーションを実行するのに必要なリソースを作成してくれます。

環境の作成プロセスが完了したら、eb status を実行して新しい環境のドメイン名を見つけます。

~/ebdjango> eb status
Environment details for: django-env
Application name: django-tutorial
...
CNAME: eb-django-app-dev.elasticbeanstalk.com
...

環境のドメイン名は、CNAME プロパティの値です。

settings.py ディレクトリの ebdjango ファイルを開きます。
ALLOWED_HOSTS 設定を見つけ、前のステップで見つけたアプリケーションのドメイン名を設定の値に追加します。この設定がファイルで見つからない場合は、それを新しい行に追加します。

...
ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']

ファイルを保存し、eb deploy を実行してアプリケーションをデプロイします。
eb deploy を実行すると、EB CLI はプロジェクトディレクトリのコンテンツをまとめて、ユーザーの環境にデプロイします。

~/ebdjango> eb deploy

環境の更新プロセスが完了したら、eb open でウェブサイトを開きます。

~/ebdjango> eb open

これにより、アプリケーション用に作成されたドメイン名を使用してブラウザウィンドウが開きます。
ローカルで作成してテストしたのと同じ Django ウェブサイトが表示されます。

2020-02-04_17h14_19.png

クリーンアップ方法

他の AWS リソースを保存するには、eb terminate を入力。 Elastic Beanstalk 環境を終了します。

~/ebdjango> eb terminate django-env

このコマンドは、環境とその中で実行されているすべての AWS のリソースを終了します。
アプリケーションが削除されることはありません。
eb create を再び実行することで、同じ設定でさらに環境を作成することができます。

アプリケーションが必要なくなった場合は、プロジェクトフォルダーと仮想環境を削除することもできます。

~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango

リソースを確認してみる

中では CloudFormation の「スタック」からアプリケーションのデプロイ環境が作られています。

EC2
image.png
S3
2020-03-06_16h05_51.png
Cloud formation
2020-03-06_16h08_30.png

所感

確かにコンソールでポチポチとサービス画面を行き来しながら、環境を一から構築するよりは、一つの画面で操作できて一式リソースが用意されるこの仕組みは便利だと思いました。
ただコマンドプロンプトや CLI の操作に慣れないと、ちょっと難しい部分もありますので、サンプルアプリケーションを作成できるコンソール操作から使ってみるほうが入りやすいかもしれません。

公式サイトリンク

ドキュメント
製品紹介


AWS初心者によるAWS初心者のためのAWS環境自動化入門

はじめに

AWS上の環境構築の自動化サービスについて、勉強していたのですが
どれがどういう役割なの?違いをわかりやすくまとめた記事があると便利だよな!と思い、記事にしてみました。
image.png
AWS 公式slideshareより抜粋

Elastic Beanstalk

サーバーからネットワークの設定まで、アプリケーションの開発に必要な環境をあらかじめ整えてくれています。
運用やコストの面でもサポートしてくれて、面倒な環境の構築は Elastic Beanstalk に任せて、コードを書くだけでアプリケーションを作成することができます。

  • 開発言語は、Java / PHP / Python / Python(with Docker) / Node.js / Go / NET / Ruby
  • アプリケーションをアップロードするだけで展開できる
  • サーバーやストレージなどアプリケーションの状態をモニタリングしたり、OSとデーターベースの管理ができる
  • モニタリングやセキュリティーに必要なパッケージのみ使用してくれるので、不要なコストを削減
  • 複数のユーザーや企業が同じアプリケーションを共有し、各々でカスタマイズすることが可能

AWS CloudFormation

ほとんどすべてのAWSのリソースの構築や設定を行えるので、最も自由度が高いサービスです。
クラウド環境内のすべてのインフラストラクチャリソースを記述して、事前準備するための共通言語を提供します。

  • JSON フォーマットを使用して構成を記述
  • CloudFormer を使用すると、現在の構成をJSONフォーマットに変換でき、構成のコピーや雛形の作成が楽に
  • CloudFormation で作成したAWSリソースは、CloudFormation 以外の方法で変更してはいけない

AWS OpsWorks

サーバーのパッチ適用、アップデート、バックアップが自動的に実行され
Chef や Puppet (あらかじめ用意しておいた設定ファイルに基づいて、サーバーのさまざまな設定を自動的に行うソフトウェア、設定管理ツール)のマネージド型インスタンスを利用できるようになる、構成管理サービスです。

  • 独自の設定管理システムを運用したり、そのインフラストラクチャを管理しなくて良い
  • サーバーのパッチ適用、アップデート、バックアップの自動化
  • ソフトウェアの設定、パッケージのインストール、データベースのセットアップ、サーバーのスケーリング、コードのデプロイといった運用が自動化
  • サポート範囲は、Amazon EC2 インスタンス、Amazon EBS ボリューム、Elastic IP、Amazon CloudWatch メトリクスなど、アプリケーション志向の AWS リソースに限られている

Chef

ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツールです。
Chefでは「Cookbook(クックブック)」や「Recipe(レシピ)」と呼ばれる設定ファイルの再利用がしやすい構造になっている点が特徴。
Ruby と Erlang で記述。Chef はフランス語で言う「料理人」が由来になっており、その構成要素も料理をモチーフにして命名されたそうです。

Puppet

サーバーの環境設定やインストールなどを自動化する設定管理ツール。
Puppet は Ruby で実装されており、各種操作の実行を行うためのフロントエンドであるpuppetコマンドと、各種機能を実装した Ruby ライブラリから構成されています。

それぞれのサービスの適正

OpsWorks CloudFormation Elastic Beanstalk
用途 アプリケーションのモデル化、デプロイ、設定、管理、および関連アクティビティ アプリケーションのモデル化、デプロイ、設定、管理、および関連アクティビティ インスタンス上のWEBアプリケーションの展開と管理を自動化
管理レベル より詳細で高レベル。柔軟性があり、単純な構成も複雑な構成も対応 環境の土台を作る インフラ環境そのものを自動で展開したり管理するには不向き
自由度 ユーザー独自のChefのクックブックを使用できる。EC2がほぼ自由に設定可能 OSより下のレイヤーでは自由度が高い。JSON or YAMLで記述してコード化 プログラミング言語、Docker コンテナのプラットフォーム
構成 スタックやレイヤーといったコンセプトに基づく 5 種類のテンプレート要素で自由にスタックを構成。 主なサーバはApache / Nginx / Tomcat / IIS
需要者 知識があり、運用に効率性・柔軟性がほしい 自分で好きなように管理モデルをカスタムしたい 専門知識がない、とりあえずな環境が欲しい

所感

繰り返し高頻度で行われる環境構築や、デプロイの作業は自動化できたほうが確実に効率が良いですよね。
手作業によるミスや、長時間の作業の無駄を省くためにも、重宝するべきサービスだと思います。
どこまで詳細に設定する必要があるのかで、どれを使うか選べるのも良い点ですね。

公式サイトリンク

AWS 公式サービス別ガイド


IT初心者がAWSのセキュリティ対策を学ぶ【SAA試験対策】

はじめに

AWSの5つの設計原則の一つである【セキュリティ】
ソリューションアーキテクトの試験を受けるにあたり、セキュリティに関することは必ず出てくる問題なので、理解を深めるために
主なサービスについて、公式の BlackBelt やよくある質問などから抜粋して、要点だけでまとめてみました。

AWS Identity and Access Management (IAM)

AWS リソースを安全に操作するために、認証・認可の仕組みを提供するサービス。
最小限の認証情報の生成、強固なパスワードポリシー、特権ユーザーでの MFA 有効化が ID の保護に有効です。

主な活用

  • 各 AWS リソースに対して、別々のアクセス権限をユーザーごとに付与できる
  • 多要素認証(Multi-Factor Authentication : MFA)によるセキュリティの強化
  • 一時的な認証権限を用いた権限の委任
  • 他の ID プロバイダーで認証されたユーザーに、AWS リソースへの一時的なアクセス
  • 世界中の AWS リージョンで、同じ ID と権限を利用可能

2020-01-17_14h52_51.png

AWS Cognito

「認証」「許可」「ユーザー管理」などの機能を提供するサービス。
モバイルやウェブアプリケーションに、ユーザーのサインアップと認証機能を簡単に追加。
AWS 内のアプリケーションのバックエンドリソース、または Amazon API Gateway で保護されているサービスにアクセスするための、一時的なセキュリティ認証情報を付与できます。
ユーザーがどのデバイスからサービスにアクセスしても、ストレスなく使えるようになるものです。

主な活用

  • モバイル・Web アプリでユーザ認証が楽に
  • Facebook や Twitter、Amazon、Google、Apple などのサードパーティーを通じてサインイン
  • 認証ユーザや管理者ユーザ限定のコンテンツを配信
  • アクセスキー等の認証情報をアプリに直接コーディングしなくて良い
  • 一人で複数デバイスの利用をサポートしてUXを向上
  • データをローカルに保存。オフラインの場合でもアプリケーションを使用でき、オンラインになった時にデータを自動的に同期

image.png

AWS Inspector

Amazon EC2 にエージェント(ソフトウェア)を派遣し、プラットフォーム(土台となる環境)の脆弱性診断を行う有料サービスです。
自動化されたセキュリティ評価サービスで、Amazon EC2 インスタンスのネットワークアクセスと、そのインスタンスで実行しているアプリケーションのセキュリティ状態をテストできます。
開発環境全体で、または静的な本番システムに対して、セキュリティ上の脆弱性の評価ができます。

2020-01-16_09h44_08.png

image.png

AWS GuardDuty

悪意のある操作や不正な動作を、継続的にモニタリングする脅威検出サービス
AWS 環境のセキュリティを継続的にチェックしてくれ、各種ログを自動的に取得して、機械学習で分析して異常を通知してくれます。
分析の対象となるログは、AWS CloudTrail、Amazon VPCフローログ、DNSログなど、複数のAWSにおける数千億にもわたるイベントです。
AWS のアカウントとワークロードの継続的なモニタリングが楽になり
詳細なアラートを提供し、既存のイベント管理、ワークフローシステムと簡単に統合可能です。

image.png

AWS Directory Service

ユーザー、グループ、コンピューター、およびその他のリソースといった組織についての情報を含むディレクトリ機能を提供する権限管理サービスです。
AWS クラウド内にディレクトリをセットアップして運用することや、AWS リソースを既存のオンプレミス Microsoft Active Directory に接続することが簡単に行えます。

主な活用

  • ユーザーとグループの管理
  • アプリケーションとサービスへのシングルサインオン(1回の本人認証で、複数の異なるアプリケーションやシステムを利用できる認証の仕組み)を提供
  • グループポリシーの作成と適用
  • Amazon EC2 インスタンスのドメインへの参加
  • クラウドベースの Linux と Microsoft Windows ワークロードのデプロイと管理の簡素化

AWS Organizations

複数 AWS アカウントを一元管理できるサービス。
アカウントをグループ化して、ポリシーを適⽤し利⽤サービスを制限します。
アカウント新規作成の自動化や請求の簡素化、複数アカウントの請求を⼀括にできます。

主な活用

  • 複数の AWS アカウントへの一括請求
  • AWS アカウントの作成と管理の自動化
  • AWS のサービス、リソース、リージョンへのアクセスを管理
  • 複数の AWS アカウントに適用するポリシーを集中管理
  • 複数アカウント間で AWS のサービスを設定 image.png

AWS Shield

AWS で実行されるアプリケーションを Distributed Denial of Service (DDoS) 攻撃から保護するサービスです。
Standard は、追加料金なしで自動的に有効化されます。Advanced は任意で利用できる有料サービスです。
有料サービスは、Amazon EC2、Elastic Load Balancing (ELB)、Amazon CloudFront、AWS Global Accelerator、Route 53 で実行中のアプリケーションを標的とする、高度化された大規模な攻撃からの保護が強化されます。
image.png

CloudHSM

安全なキーストレージと暗号通信を提供するサービス。
ユーザー自身にしかアクセスできない方法で、データ暗号化に使用される暗号キーを安全に生成、保存、管理することができます。
クラウド内の専用ハードウェアセキュリティモジュール (HSM) を使用して、データセキュリティに対する企業コンプライアンス要件、契約上のコンプライアンス要件、法令遵守の要件を満たすことができます。
CloudHSM は既存のデータ保護を補完する役割を果たし、HSM 内での暗号キー保護を可能にします。
安全なキー管理に対する、米国政府標準規格に適合するように設計、検証されています。

主な活用

  • KMS のカスタムキーストアとして使用
  • SSL/TLS 暗号化、復号処理のオフロード(システムの負荷を他の機器などが肩代わりして軽減する仕組み)
  • NGINX, Apache, Windows Server IIS との連携
  • CA局の秘密鍵管理
  • Oracle DBのTransparent Data Encryption(透過型暗号。表や表領域のデータを自動で暗号化して保存)
  • PKCS #11ライブラリ経由で連携
  • ファイルやデータへのデジタル署名
  • デジタル権限管理
  • CloudHSM をサポートするサードパーティソリューションとの統合 2020-01-20_09h07_11.png

AWS Key Management Service

データを保護するための暗号化キーの一元管理が出来るサービス。
AWS サービスとの統合により、容易にデータの暗号化を行うことができ、アプリケーション上のデータの暗号化にも利用することができます。
暗号鍵の保管、鍵のアクセス制御等、鍵自身のセキュリティを管理するインフラストラクチャ Key Management Infrastructure を採用。

主な活用

  • 暗号鍵の作成、管理、運用
  • 鍵利用の権限管理、監査
  • 暗号鍵を保存、暗号鍵を使用するための安全なロケーションを提供
  • マスターキーは FIPS 140-2検定済暗号化モジュールによって保護
  • AWS サービスとの統合 (S3, EBS, Redshift, RDS, Snowball等)
  • SDK との連携で独自アプリケーションデータも暗号化
  • CloudTrail との統合による組み込み型の監査対応機能

image.png

備考

【Perfect Forward Secrecy】通称PFS
暗号鍵とその暗号鍵を複合するための秘密鍵が、両方漏洩しても暗号鍵を複合できない、というカギ交換に関する概念。
長期間にわたってデータを解読されないよう、暗号鍵(共通鍵)の元になる情報を使い捨てる方式を採用しています。

終わりに

セキュリティの強度やコスト効率、通信制御やデータ暗号化など、状況や用途で組み合わせが多様になっていくことがわかりました。
ホワイトリスト型(許可した通信のみを通す)、最小限の権限設定が重要であること
安全性において安心できるよう、AWS の推奨するベストプラクティスに沿ってサービスを覚えていくことが、試験にも実務にも生かされていきそうです。

公式サイトリンク

AWS上の暗号化ソリューション
各サービスを解説しているBlackBelt


初心者が5分で出来る簡単サーバレスAPIを構築してみる【Lambda】

はじめに

今回は機械学習ではないのですが、自分がAWSの試験を受けるにあたり、IT初心者としてサーバレスについてイメージが難しいところがありました。
サーバーへの考慮がいらない、サーバーのメンテナンスや管理をしなくていいと言われていますが、実際使い勝手などが分かりにくい。

少しでも理解できるようになるために、1杯のコーヒーよりもコストが低いAPIの作成を実践してみました!

image.png
AWS Black Belt 公式より抜粋

AWSのサーバレスサービス

サーバレスとは言いますが、サーバが存在していないわけでは無いのです。
あくまでもAWS側がサポートしてくれて、サーバを意識せずに、アプリケーションを作成したり運用できるサービスのことを指しています。

1. DynamoDB でテーブルを作る

データベースのidの番号から、名前を引っ張ってこれるような簡単なAPIを作っていきます。
まずは、データベースの DynamoDB にテーブルを作成していきます。
2020-01-10_09h21_19.png
テーブル名を入力して[デフォルト設定の使用]にチェックマークをつけて作成をクリック。
2020-01-10_09h23_00.png
数秒待つとテーブルが作成されます。出来上がったテーブルをクリックして、右の[項目]のタブから[項目の作成]をクリック。
2020-01-10_09h24_57.png
「id string:」の VALUE の項目にまず1という番号を入力して、+ボタンをクリックし、[Append]を選択してさらに[String]を選択します。
2020-01-10_09h30_30.png
FIELD という項目には[name]を入力し、 string の項目には適当な名前を入力します。
2020-01-10_10h41_06.png
同じ手順で三人分名前を登録しました。
2020-01-14_15h21_14.png

2. Lambda関数を作る

次は Lambda のコンソールへ行き、関数の作成に入ります。
2020-01-10_10h43_01.png
[一から作成]を選択している状態でまずは関数名を入力。
2020-01-10_10h45_58.png
ランタイムで関数の言語を選択します。今回使うのは[Node.js 10.x] 。
実行ロールの選択または作成を選択し、DynamoDB のアクセス権限をつけます。そして作成をクリック。
2020-01-10_10h48_47.png
次に DynamoDB からidの番号で名前を引っ張ってくるシンプルなコードを書いていきます。
2020-01-10_10h49_26.png
コードはこちら。

Node.js
[crayon-5f04fbf225057199387883/]

index.js のデフォルトのコードを削除して書き直します。右の[保存]をクリックして更新します。
2020-01-10_16h46_21.png

3. API をデプロイする

API Gateway のコンソールへ行き、API の作成に入ります。
2020-01-10_17h09_16.png
リソースの横にある、アクションのプルダウンから[リソースの作成]を選択。
image.png
リソース名を入力して[リソースの作成]をクリック。
2020-01-10_17h14_36.png
作ったリソースにさらに子リソース[id]を追加し、「{}」で囲みます。idの番号で指定できるようにするためです。
2020-01-10_17h16_53.png
アクションのプルダウンから、次は[メソッドの作成]を選択します。
2020-01-10_17h25_17.png
プルダウンから[GET]を選択したら、横にチェックマークが出るのでクリック。
2020-01-10_17h27_46.png
セットアップ画面が出てくるので、先程作った Lambda 関数の名前を入力し紐付けます。
2020-01-10_17h30_01.png

2020-01-10_18h02_17.png
最後にアクションのプルダウンから[APIのデプロイ]を選択します。
2020-01-14_09h20_06.png
デプロイされるステージは[新しいステージ]を選択。[prod]を入力し[デプロイ]をクリックします。
2020-01-14_09h22_13.png
出来上がったAPIを確認するために、URLをコピーしておきます。
image.png

4.確認しよう

先程コピーしたURLの最後に、API で作ったリソースを指定します。
今回は「/users/{id}」でしたので、id のところは Dynamo で登録したidの番号を指定します。
(私が登録したのは1か2か3)
Dynamo で登録した「 id : 1 」の「 Jill 」を引き出せました!
image.png

所感

APIを形成するには、本来ならもっと細かく、インフラの構築から始めるようなものだと想像してましたが
データベースに登録して、Lambda でコードを書いて、API に紐付けただけで完了できました!
実に簡単で早い!これなら確かに、API やアプリの中身を構築することだけに集中して作業ができそうですね。
環境構築や障害対策のことを考えながら、アプリを運用するのはコストもかかるし、開発だけに集中するのはなかなか難しいところであると思います。
一日のリクエスト数、集中する時間が限られているものであれば、コスト面で最適だと思います。

公式リンク

AWS Lambda 開発者ガイド
参考にしたAWSの公式サミット動画


IT初心者がAmazon Forecast を使ってシャンプーの売上傾向を予測【誰でも出来る】

はじめに

2020年!AIぽいことしたいなーということでAWSのMachineLearningらしいサービスを使ってみました。
初心者さん、機械学習が詳しくない方でも使えるので、その使い方を分かりやすくご紹介していきます!
※2020年1月15日追記しました。

 

Amazon Forecastとは?

過去の何らかの時間単位で整列されたデータ(時系列データ)から価格、PR、経済的業績指標などを利用し、予測をすることができるサービスです。
AutoML機能によって予測できるのでモデルを構築するための機械学習の専門知識はいりません。

  • 完全マネージド型
  • サーバーをたてたり、機械学習モデルの構築、トレーニング、デプロイも不要
  • 実際に使用した分に対してのみ料金が発生
  • 自動的にデータのロードと検査、適切なアルゴリズムの選択、モデルのトレーニング、正確なメトリクスの提供、予測の生成
  • 予測をコンソールで可視化できる
  • バッチでエクスポートしたり、API を使用してビジネスアプリケーションに統合ができる

小売業の活用例

ある企業は、製品の需要、リソースのニーズ、あるいは財務業績といった将来のビジネス成果を正確に予測するために、
簡単なスプレッドシートから複雑な財務計画ソフトウェアに至るまで、あらゆるツールを活用しています。
機械学習を利用して価格、PR、来店者数などと関連する製品の特徴、陳列場所、店舗の場所などのデータを組み合わせ、それらの間の複雑な関係を判断します。

製品の機能や店舗の場所などの、可変的なデータと時系列データとがお互いにどのように影響し合うかまで確認することができるのです。

やってみる

予測に必要なのは過去のデータと、予測に影響を与える可能性があるデータです。
できるだけ多く、長い期間のデータがあると精度の良い予測ができそうです。
さっそくフリーデータセットを使ってマネージメントコンソールからシャンプーの売上予測をしてもらいました!

ステップ 0:データの準備

使用するデータは、予測したい内容によって中身を整える必要があります。
以下のデータセットドメインがサポートされています。

  • RETAIL – 小売の需要予測。特定の日に商品が受け取った価格やウェブヒット数など、関連するデータセットを Forecast に提供できます。情報が多いほど、予測はより正確になります。
  • INVENTORY_PLANNING – 原材料の需要を予測し、特定の商品の在庫をどれだけ確保するかを決められます。
  • EC2 CAPACITY – Amazon Elastic Compute Cloud (Amazon EC2) キャパシティの予測
  • WORK_FORCE – 従業員の労働力の需要がどのくらいかを予測します。
  • WEB_TRAFFIC – 今後のウェブプロパティまたは一連のウェブプロパティへのウェブトラフィック(情報量)の見積もり
  • METRICS – 収益、売上、キャッシュフローなどの収益予測
  • CUSTOM – その他すべての時系列予測のタイプ

 

今回は売上予測なので、METRICSドメインを使っていきます。
CSVファイルのデータを必須カラムのみ含まれているように、以下の列名を加えます。

  • metric_name (文字列)
  • timestamp (タイムスタンプ) 後ほどのタイムスタンプのフォーマット設定に合わせる必要がある
  • metric_value (浮動小数点整数) Forecast が予測を生成する target フィールド(例:特定の日に生成される収益額)

 

名前のカラムと、日付と秒単位の時間を付け加えました。
metric_name 「shampoo」
timestamp 「1998-01-01 00:00:00」
metric_value 「266.0」(売上数)

 

2020-01-07_16h34_56.png

 

S3にデータをアップロードしていきます。バケットを作成。

2019-12-27_11h05_34.png

 

今回はデフォルトのままで大丈夫です。
バケット名を決めて東京リージョンで設定し、そのまま左下の作成ボタンを押してください。

2019-12-27_11h06_40.png

作ったバケットのリンクを押してCSVデータのアップロードへ

2019-12-27_12h45_18.png

アップロードを押したら

2019-12-27_12h42_41.png

CSVデータを追加したらこちらもデフォルトの設定のままでOKなので左下のアップロードを押していきます。

image.png

追加したデータのチェックマークを押すと右にポップアップが出てきます。
後ほど使いますので、パスをコピーしておきます。

image.png

ステップ 1:トレーニングデータをインポート

Amazon Forecast コンソールからCreate dataset group (データセットグループの作成)を選択。
Dataset group name (データセットグループ名)の名前を入力し、ドロップダウンメニューから使用する予測ドメインを選択。今回使うのはMetrics。
2020-01-06_09h25_12.png

 

次にCreate target time series dataset (ターゲット時系列データセットの作成)
グループの名前を入力します。
Frequency of your data (データの頻度) この設定は、入力時系列データの設定と一致している必要があります。
デフォルトの 1 のままにして、今回のサンプルデータは一日ごとなのでドロップダウンメニューから [day] を選択します。
データスキーマはデータタイプと順序を設定します。事前に準備した時系列データの列に一致するように更新します。

 

2020-01-06_09h58_46.png

 

次はImport target time series data (ターゲット時系列データセットのインポート)ページの Dataset import job details (データセットインポートジョブの詳細) に情報を入力します。

データセットの名前を入力。Timestamp format (タイムスタンプ形式)はデフォルトのままにしておきます。
この形式は、入力時系列データの設定と一致している必要があります。
IAM ロールはデフォルトのままか新しく作成でOK。
Data location (データの場所)はデータの準備でコピーしたS3のパスを貼り付け。

2020-01-06_11h06_26.png

 

Start importを押したら作成が始まりダッシュボードページに変わります。

 

2019-12-27_09h58_08.png

Create pendingからActiveになれば、次のステップのトレーニングのstartができるようになります。

2019-12-27_10h05_17.png

ステップ 2: トレーニングモデルの作成

予測に使うトレーニングモデルをつくります。
予測子の名前を入力します。Forecast horizon で今後予測したい期間を選択。
この数値に、ステップ1で指定したデータ入力頻度 (day) を乗算して、今後予測を実行する期間が決定されます。

 

注:予測できる期間は与えたデータ期間の3分の1の期間でしか指定できません。なので与えたデータと同じ期間分予測しようとするとエラーになります。

 

私自身画像のように90日で指定しましたが、予測できる範囲を超えてしまったのでエラーになりました。
Forecast frequency で予測頻度を指定。デフォルト値の 1 のままでドロップダウンメニューから [Day] を選択。
この設定は、入力時系列データの設定と一致している必要があります。

 

2019-12-27_10h06_44.png

Algorithm selection でアルゴリズムの選択。 Automatic (AutoML) を使います。これで機械学習はおまかせあれ。
他はいじらずに train predictor をクリック。

2019-12-27_10h13_50.png

 

予測子のトレーニングが完了するまで(データのインポート同様Activeになる)時間が結構かかります。30分以上は待ちました。

 

ステップ 3: 予測を作成

Predictor trainingがActiveになったら推論データの作成にかかります。
Create a forecast (予測の作成)ページの Forecast details (予測の詳細)に予測の名前を入力します。
ドロップダウンメニューから、ステップ2のTrain a Predictor で作成した予測子を選択します。
残りの設定はオプションなので、デフォルトのまま create a Forecast を押します。

2019-12-27_13h18_41.png

ステップ 4: 予測を取得

ダッシュボードでForecast generation がActiveになったら予測のルックアップを選択します。

ここでまたエラー。開始日はデータの最終日と被せなければならないようです。
ステップ2のForecast horizon の設定と同じく、2ヶ月半のデータなので予測できる期間も20日間がMAXです。

2019-12-27_14h35_10.png

 

ドロップダウンメニューから、ステップ3の Create a Forecast で作成した予測を選択。
start date-開始日とend date-終了日を指定して、範囲はステップ2のTrain a Predictor で指定した予測期間に合わせます。
Choose which keys (予測キー)の追加を選択。Forecast keyでドロップダウンメニューから [metric_name] を選択します。
Valueで特定したいデータ項目、[shampoo]を入力。

 

2019-12-27_14h43_21.png

 

結果がこちら。真ん中が平均的な予測で、上が上位10%の予測で下が下位10%の予測です。
P50 の予測値が、実際の需要にもっとも近い値であるようです。
上位と下位でかなり差が出ていますが、月半ばと給料日前あたりが売上が下がっていきそうなのが予測できました。
この時期を目処に前もって対策できれば売上を下げるのを抑止できて、
平均的に見ると毎日300は売れそうなので、仕入れの最低数なども考えられそうですね。

 

2019-12-27_14h46_00.png

感想

3パターンのグラフ予測のおかげで、最高売上と最低売上が予測できるので、特定日の対策も考えやすくなり、仕入れの需要数なども簡単に予想できるサービスでした。
データをより詳細になるべく多く用意すること、データの形式と予測する期間や頻度さえ気をつければとても手軽に予測ができたのでぜひとも皆様もお試しください!

他のAWS AI系のサービスの検証なども多数、弊社の技術ブログで記載しているので、ぜひともこちらもご参照ください。
ナレコムレシピ

公式サイトリンク

Amazon Forecast 開発者ガイド
Amazon Forecast


【これからプログラミング&クラウドを始める人向け】AWS Cloud9 を利用して Ruby の開発環境を作ってみる② - AWS Cloud9 の環境構築

はじめに

この記事は 【これからプログラミング&クラウドを始める人向け】AWS Cloud9 を利用して Ruby の開発環境を作ってみる① - AWSアカウント準備編 の続きになります。

 

AWS Cloud9 のセットアップ

  • 前回作成した IAM ユーザーを利用してコンソールに入り Cloud9 と検索し選択

image.png

 

  • AWS Cloud9 のコンソールから「Create environment」を選択

image.png

 

  • 環境名を入力 (説明文は任意入力なので無しでもOK)

image.png

 

  • 以下図のように Configure settings を行い「Next step」を選択

image.png

 

  • 確認画面が表示され、「Create enviroment」を選択

image.png

 

  • 選択後以下のような画面が表示される (今回は約2分ほどで構築が完了)

image.png

 

  • 完了後、以下のような画面が表示される。これで環境構築は完了です。

image.png

 

AWS Cloud9 の画面説明

  • 左側がファイル、右側がテキストエディタ、右下がターミナルとなります

image.png

 

  • エディタ領域はタブ型になっています

image.png

 

  • これらの設定については右側の歯車アイコンで操作が可能です

image.png

 

  • ちなみにブラウザでの表記なので Chrome の翻訳アドオンで日本語化ができます

image.png

 

その他 Tips

  • 次回以降コンソールからアクセスした場合、「Open IDE」から構築した環境にアクセス可能です

image.png

 

  • EC2 のコンソール画面から自動停止を待たずに環境停止(=課金停止)を行うことも可能です

image.png

 

  • Tab Size の設定
    テキストファイルのタブを開いた状態で右下の「Spaces」をクリックすると「Tab Size」が変更できます
    ここで Tab Size を「2」に変更することでタブキーを押したときのスペースの入力回数が設定できます

image.png

 

  • スペース等の不可視文字の可視化
    スペースや改行に印をつける設定です。これもテキストファイルのタブを開いた状態で行います
    右下の歯車キーをクリックして Show Invisibles にチェックマークをつけます

image.png

 

まとめ

前回作成した IAM ユーザー を使用してクラウド上に IDE を構築し初期設定を行いました。
びっくりするくらいサクッと立ち上がるのでこれからプログラミングを勉強していきたい人に是非試してみてほしいです。
次回以降はプログラムのバージョン管理について説明していきたいと思います。お楽しみに!


【これからプログラミング&クラウドを始める人向け】AWS Cloud9 を利用して Ruby の開発環境を作ってみる① - AWSアカウント準備編

はじめに

前置き

プログラミングを勉強しよう!と思ったときに躓くポイントでもある開発環境の構築
今回は AWS を利用してクラウド上に開発環境を作っていく手法を紹介していきます
勉強をスタートしたタイミングで同時にクラウドを触ることでモダンな開発環境も理解していきましょう

 

AWS Cloud9 とは

  • Cloud9 というブラウザで利用できる IDE (統合開発環境)をAWSが買収
  • AWS の各種サービスと連携しやすいサービスとして2017年末にリリース
  • クラウド最大手からクラウド上での開発サービスを提供し、開発環境もクラウド上で持つトレンドが出来つつある

利用にあたって必要なもの

  • AWS 登録のために以下の登録が必要です
    • メールアドレス
    • クレジットカード(課金が発生しない無料利用も可能)
    • ユーザー認証用の電話番号
    • ブラウザの設定
    • 広告ブロック用のアドオンを導入している場合はオフ

AWS Cloud9 の利用料金の話

  • 課金の仕様
    • AWS Cloud9 の利用そのものは課金対象外(=無料)
    • AWS Cloud9 の実行環境であるサーバ料金(EC2)は課金対象(=有料)
      • ただし無料利用枠内であれば無料
    • 新規アカウント作成から12ヶ月の期間、月間750時間まで無料利用枠で利用可能
      • 1ヶ月間1日24時間利用したとしても無料利用枠内で使用可能
  • 無料利用枠についての参考情報 (公式)

AWS アカウントの準備

ここからは AWS のアカウントが作成できていることを前提に進めていきます

AWS を利用する際に使うアカウントについて

  • ルートアカウント (初回登録で作成されたアカウント)
    • 請求に関連する操作も含め権限範囲が非常に広く、日常利用をしないことが推奨されます
  • IAM ユーザー (このあとに作成するアカウント)
    • 開発など日常的に使用するアカウント
    • IAM ( Identity and Access Management ) という機能を利用して権限の制御が可能

今回作成する IAM ユーザーについて

  • AWS の管理者ユーザー を作成
    • AWS 初学者が一人で利用することが前提
    • 今回作成するユーザーで権限のない操作はルートアカウントで操作を行う

IAM ユーザーの作成

  • ログイン後に検索窓から「IAM」と入力

image.png

 

  • IAM の管理画面遷移後に左側のユーザーを選択し、「ユーザーを追加」をクリック

image.png

 

  • ユーザー名を入力
  • AWS マネジメントコンソールへのアクセスを選択
  • パスワードのリセットが必要を選択

image.png

 

  • グループの作成をクリック

image.png

 

  • グループ名を入力し、ポリシー(今回は「AdoministratorAccess」を選択)

image.png

 

  • 作成したグループを選択し、次のステップに進みます

image.png

 

  • 今回はタグの項目は空欄で進めます

image.png

 

  • 内容を確認して「ユーザーの作成」をクリックします

image.png

 

  • これでユーザーの作成が完了します。.csv のダウンロードでアカウント情報をDLできます

image.png

 

  • .csv ファイルはこのようになっています。今回はプログラムによるアクセスを想定していないいので一部空欄となっています

image.png

 

  • 該当情報でアクセスできることを確認しましょう。(初回のパスワード修正が要求されます)

image.png

 

  • IAM ユーザーのアクセスは右上にユーザー名が表示されます

image.png

 

利用料アラートの設定 (無料利用枠内のため)

 

目的

  • 想定外の請求を防ぐために設定を推奨します (特に個人利用の場合)
  • 無料利用枠範囲内でのアラートを受信
    • メールをチェックしないと意味がなくなるので要注意

 

設定方法

  • ルートアカウントでサインインをして「マイ請求ダッシュボードをクリック」

image.png

 

  • ダッシュボードから「Biling の設定」をクリック

image.png

 

  • 設定項目で各種チェック項目にチェック並びにメールアドレスを入力し「設定の保存」をクリック

image.png

 

まとめ

この記事では開発環境構築のために AWS のアカウント作成と無料で使い切るための設定を紹介していきました。
入門者には手間に感じる部分かもしれませんがクラウド上の開発環境を利用する AWS Cloud9 は非常に強力なサービスなので、ぜひ試してみてください!
次回以降の記事から AWS Cloud9 の構築を進めていきます。お楽しみに!

続き→ 【これからプログラミング&クラウドを始める人向け】AWS Cloud9 を利用して Ruby の開発環境を作ってみる② - AWS Cloud9 の環境構築