AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

眠すぎる朝のPolly


テバサキワ
ハンズラボ 吉田です。

乗り継ぎ3時間待ちが非常に辛いです。。。
ここで寝たら日本に帰れないので書いています

img_1926

割とどうでも良いのですが、自分、ベガスでこの高さからダイブしました。
すっげーーー気持ちいい。次はスカイダイビングしてみたいです。

本題に移ります

続きを読む 眠すぎる朝のPolly


眠れない夜のAthena


ハンズラボの小林です。

現在、re:Inventに參加するためベガスに来ています。

ベガスと言えばカジノ!

昨日の夜、ルーレットをやってみたところ、大当たり!

これがビギナーズラックというものか。

、、、と思ったら夢か。

現在、こちらの時間で12月1日の午前3時30分。

明日も朝8時からKeynoteがあるし早く寝なければ!

しかし、カジノの興奮が覚めず眠れない、、、

そんな眠れない夜には「Amazon Athena」(S3へ簡易SQLが可能に)を試してみよう。

東急ハンズはユニケージ開発手法を使っていて、マスタや売上、在庫といった業務データをテキストファイルで管理しているのでAthenaとの親和性が高そうだ。

ただ気になるのはパフォーマンスだ。

Athenaの内部で、単にファイルを読み込んでいるだけだったらパフォーマンスは良くなさそうな気がする。

とりあえず簡単なデータで試してみよう。

カラムは1個で、数字の1〜1000というデータ。

Linuxサーバー上で↓のようなファイルを作り、S3にアップロード。

次にAthenaのコンソール画面からテーブルを作成。(簡単かな?)

①DB名、テーブル名、S3のディレクトリ名を入力

athena1

②次にファイルのフォーマットを指定。

athena2

③次にカラム定義。

athena3

④で最後に「Configure Partitions」

なんじゃこれは?明日も早いし調べてる時間もないからとりあえず無視。

athena4

これでテーブル作成。

athena5

おぉ、できた!

こういうのって、大体1回目は失敗するのに。こいつは簡単だな。

で肝心のパフォーマンスを確認。

athena6

結果は0.6秒。遅っ!

う〜ん、これ、ファイルとレコード件数が増えたらどうなってしまうんだろう、、、

ってことで、さっきと同様の1,000レコードのファイルを1,000個を作ってS3にアップロード。(カラム1個で数字がさっきの続きで1001〜100000)

コンソールに100,000件も出ないだろうから、今度は件数を取ってみよう。

athena8

結果は2.89秒。致命的に遅い、、、

う〜ん、ファイルを1個で同じ件数にしてみたらどうだろう。

athena7

結果は0.78秒。さっきより早くなったが、それでも遅い。

whereを付けて1件を検索したらどうだろう。

◆ファイル1,000個の方

athena9

結果は3.04秒。

◆ファイル1個の方

athena10

結果は0.83秒。

同じような結果だな。

時計を見ると4時40分。そろそろ眠気が襲ってきたので、今日はここまでとするか。

今夜も眠れなかったらスノーモービルを試してみるか。

おやすみなさい。


re:Invent 2016 参加レポート(Keynote 2)


AWSチームの加藤でございます。
昨日に引き続きre:Invent2016 のレポートをお送りしたいと思います。

さて、新サービスの発表があるKeynoteの2日目!
本日はよりギークな発表が予想される中、Serverlessに魂をかける私は、

まさかの二度寝。。。

ラスベガスに来て4日目。まぁ疲れもたまっておりまして、早く並ぶつもりで目覚ましを早めにセットしたのが仇となり。。。

しかし弊社マーケティングの青木の計らいにより、今日も無事席を確保できました。

ありがとう。ありがとう。

もう一度、ありがとう。

何とか席について落ち着きを取り戻しまして、見渡す広いイベントスペース。
そして昨日に引き続きテイストの違うノリノリ爆音と、これぞDJなお方がHey Yo!

dsc_0080

気になって調べてみたら DJ Shiftee 、ハーバード大学出てしかも指折りのDJとか。
無知で本当にごめんなさい。
イベントが始まる寸前には魂のスクラッチ!本場はすごかったです。

さて、そんな興奮と緊張が高まるなかWerner Vogelsが登場しKeynote がスタート!

dsc_0082

変革についてや顧客に対する熱い思いをぶつけます!

Protect customers at all times!

昨日に引き続き、だんだんと魅せられていきます。

dsc_0083

途中、TwillioのJeff さんも登場し、

ソフトウェアはマインドセットだ!スキルセットじゃねぇ!

熱いっす!

Twillioって知ってるか?知らなくても実はいつも使ってるんだぜ!

かっちょいいぃ!いつか言ってみたい!

やっぱり熱い思いを持っている人はすごいですね。もう心は鷲掴み状態のなか、再びWerner Vogels登場。ソワソワし始める会場

そう。みんなが待っているのは、昨日に引き続き新サービスの発表ですね。
もちろん食べきれないくらいの怒涛の発表が行われましたので、ざっとまとめてみました。

それでは、Here we go!!
12/01 キーノートでの新発表まとめ
Well – Architected Freamework】(Operational Excellence pillarの追加)

AWS OpsWorks For Chef Automate】(Chef Automate対応)

Amazon EC2 Systems Manager】(EC2&オンプレSV管理 – SSM高機能版)

AWS Code Build】(マネージドビルド)

AWS X-RayPreview(アプリモニタリング可視化)

AWS Personal Health Dashboardプレミアサポート(自分用監視ダッシュボード)

AWS Shield For Everyone / Advanced】(DDoS対策)

Amazon Pinpoint】(セグメンテーションプッシュ)

AWS Glue】Coming soon(マネージドデータカタログ / ETL)

AWS BatchPreview(マネージドバッチ)

BloxGit Hub (コンテナのオーケストレーション)

C# Lambda】(lambda C#対応)

Lambda @ EdgePreview(LambdaをCloudFront実行)

AWS Step Function】(ビジュアルワークフロー)

もうまとめるのも大変です。(嬉しいけど)

Day 1
dsc_0107

Day 2
dsc_0106

いやーすごいですねー。

早く触りたい!けど、まだまだ見たいsessionが盛りだくさん。
しかも今夜はパーリーナイトのre:Play!
噂によると Martin Garrix 。調べてみたら。2016年のTop DJじゃないですか!

素人でほんとごめんなさい。でも最大限に楽しみたいと思います!


re:Invent 2016 参加レポート(Keynote 1)


おはようございます。AWSチームの加藤です。
re:Invent2016 のレポートをお送りしたいと思います。

Amazon Web Servicesが誇る最大のイベントre:Inventが、毎年この季節にラスベガスで開催されます。
なんと!弊社では一定の基準を満たせばre:Inventの参加切符手に入れられるのです。

ラスベガスに行きたいかー!

ということで、弊社からは社長の長谷川を含めて5名の参加です。

私自身、海外旅行は高校生ぶりで、右往左往しながらも皆に必死にしがみ付き無事到着。
到着初日、2日目にも様々なセッションやグローバルパートナーサミットがあったりしましたが、本日は本イベントの最大のポイントであるKeynote 1日目がありましたので、その模様を一部お送りします。

まぁ目玉ともあって、開始は8時からですが6時30分過ぎの朝っぱらから並ぶ並ぶ。。

違う所に並んでしまうという手違いなんかもありましたが(お約束)、無事ツアーが確保しているリザーブドの席に到着!dsc_0034

まぁとにかく広い! そして沢山のAWSを愛するブラザー/シスター達!
dsc_0036

ノリノリ爆音と素敵なDJがお出迎えしてくれます。ぴょんぴょん跳ねててきゃわいい。

dsc_0040

そんな緊張が高まるなかAndy Jessyが登場しKeynote がスタート!

dsc_0045
もう誰もが認める成長率やFeatureの提供っぷりを淡々と話してますが毎回すごいと驚愕してしまいます。

途中、電力会社ENEL等の事例も挟みながら、ソワソワし始める会場。

そう。みんなが待っているのは、新サービスの発表ですね。
怒涛の発表が行われましたのでざっとまとめてみました。

それでは、どどーんと。

11/30 キーノートでの新発表まとめ
新インスタンス
T2インスタンス追加 T2.xlarge(メモリ16GiB)T2.2xlarge (メモリ32GiB)
R4インスタンス (もろもろスペックアップ)
・I3インスタンス(もろもろかなりスペックアップ)
・C5インスタンス(もろもろスペックアップ)エフェメラル復活しないのかなー
F1インスタンス (FPGA) プレビュー

Elastic GPU on EC2】 (EBSのようにアタッチできるGPU)

Lightsail】東京Region可能 (簡単に VPS環境を作成できる)

アナリティクス / AI系
AWS Athena】us-east-1 / us-west-2 (S3へ簡易SQLが可能に)

Amazon Rekognition】us-east-1 / us-east-2 / eu-west-1 (画像認識)

Amazon Polly】us-east-1 / us-east-2 / us-west-2 / eu-west-1(テキストスピーチ)

Amazon lex】us-east-1(自然言語処理)※日本語対応していない

データベース
【postgreSQL for Aurola】Preview
Preview受付

IoT
AWS Greengrass】 Preview(デバイスの中で実行するlambda)
Preview受付

Data transfer
AWS Snowball Edge】(旧スノーボールの高機能化及び見た目の進化)100TB

Exabyte Data transfer
AWS Snowmobile】(スノーボールのトラックバージョン)100PB

最後のSnowmobileは会場に乱入してくるという大感動!

dsc_0076 dsc_0075

大感動といえば個人的な事で恐縮ですが、James Hamiltonと2ショットを撮っていただきました。

Hamilton

明日もWerner VogelsのKeynoteがあるので楽しみです。


AWS OpsWorksでNginx+PHPのWebサーバを構築する


概要

AWS OpsWorksはEC2上にアプリケーションのデプロイやミドルウェアのインストール・更新をするためのツールです。特に「ミドルウェアの更新が簡単にできるようになる」というのはサービス担当者としてはすごくメリットがあると思います。

私も以前、Webサービスを担当していましたがミドルウェアのインストール自体はインストール済みのAMIをコピーすれば良かったのですが、運用フェーズに入ると稼働しているサーバに対して更新が必要な時がたまにありました。

  • セキュリティパッチを充てる時
  • 新しくバーチャルホストを追加する必要が出た時
  • Nginxの出力ログの形式を変えたい時
  • fulentdやlogstashなどミドルウェアを後から追加したい時

などなど。

上記のような時に当時AMIを新しくとって展開したり、直接サーバに入って変更したり割と時間を取られた思い出しかなかったので是非ともハンズラボでOpsWorksを導入して行きたいと思いまずはOpsWorksでWebサーバ(Nginx+PHP)を構築してみました。

流れは下記の通りです。

  1. スタックを作成する。
  2. レイヤーを作成する。
  3. NginxとPHPをインストールするレシピを用意してレイヤーに設定する
  4. 実行

1. スタックを作成する

スタックは例えばWebサービスであればWebサーバ、DB、LB(ロードバランサ)など必要になりますが
これらリソースをグループとして管理するための最上位のエンティティになります。
もちろん、作成したスタックをコピーして新たなスタックを作成することもできます。

  1. まずはAWSコンソールから[Add your first stack]ボタンをクリック
  2. Chef 12 stackを選択。設定は以下の通りです。
    • Stack name : WebSample
    • Region : Tokyo
    • VPC : 任意(インターネットに出れること)
    • Default subnet : 任意
    • Default operationg system : Linux(Amazon Linux)
    • Default SSH key : 任意
    • Chef version : 12(固定)
    • Use custom Chef cookbooks : No(後ほど設定します)
    • Stack Color : 任意
    • Default IAM instance profile:S3にアクセス可能なロール
  3. [Add Stack]ボタンを押下

2. レイヤーを作成する

レイヤーはWebサーバ、DB、LBなどそれぞれのコンポーネントを表すものです。
例えば1つのインスタンスでWebとDBどちらの役割も果たしたい場合はWebサーバレイヤとDBレイヤに追加することもできます。

  1. 右メニューの[Layers ] から [Add Layer]ボタンをクリック
  2. OpsWorksタグの項目を以下のように入力して[Add layer]ボタンをクリック
    • Name : WebServer(Nginx+PHP)
    • Short name : webserver
  3. 最終的にブラウザから確認をしたいので[Network]のPublic IP AdressesをYesにしておきます。
  4. インスタンス起動時にS3に対してChefのライブラリやレシピを取得しに行くので[Security]のEC2 Instance profileにはS3にアクセス可能なロールを付与しておきます。

3. NginxとPHPをインストールするレシピを用意してレイヤーに設定する

スタック作成時にChef11を選んだ場合レイヤー作成時にレイヤータイプを選べてサクPHPサーバー(Apache)を作れるのですが、今回Chef12を選びましたのでクックブックは自分で用意する必要があります。

以下の流れでレシピを用意しました。

  1. Chef SupermarketにてNginxクックブックとPHPクックブックをダウンロード
  2. ちょっと設定ファイルとか修正して固めてS3にアップロード
    • chef_nginx/attributes/default.rbを変更
    • php/attributes/default.rbを変更
    • php-fpmのインストールレシピを作成(php/recipes/php-fpm.rb)
    • php-fpm.confのテンプレートを作成(php/templates/default/php-fpm.conf.erb)

      今回nginxとfpmの間はソケット通信するようにいたします。tcp通信にする場合はセキュリティグループでポートを開けておかないといけないみたいですのでご注意ください。
    • berkshelfを使ってレシピをパッケージング(圧縮)
  3. スタックのクックブックの参照先をS3にアップしたファイルにする
    • コンソールからWebSampleスタックの[edit]リンクをクリック
    • [Use custom Chef cookbooks]をYesにして[Repository type]に「S3 Archive」を選択
    • Repository URLに先ほどS3にアップしたファイルのURL、アクセスキー、シークレットキーは任意のものを入力
  4. WebServer(Nginx+PHP)レイヤーにてどのタイミングでレシピを実行するかを設定する
    • WebServer(Nginx+PHP)レイヤーの[Recipes]をクリック
    • Setup(インスタンス起動時に発火する)イベントに以下のレシピを追加
      • chef_nginx
      • php
      • php::php-fpm
    • [Save]ボタンをクリック

4. コマンド実行

  1. [Instances]の[Add an instance]からインスタンスを作成
  2. [Start All Instances]ボタンをクリック

 

しばらく待っていると…

webserver1-instances-websample-aws-opsworks

インスタンスのステータスがonlineになりました!

そして先ほど、レシピでドキュメントルートにphpinfo.phpを設置しておいたので

確認してみます。

phpinfo

PHPがインストールできていました!

まとめ

少しChefの学習は必要でしたがOpsWorksを使うこと自体は難しくありませんでした。
何より1度レシピを作ってしまうと使いまわせるのは非常に便利だと思います。

チームが大きくなってきたりプロジェクトが大きいと例えばミドルウェアのチューニングはインフラ?開発?なんて話も出て来ると思います。
私も開発側にいてこれって僕の仕事なのか??なんて思うこともありました。
DevOpsという考えがみんな大事なことだと分かってはいても仕事増やしたくなかったり、一度引き受けてしまうとずっとやり続けないといけなくなるリスクを恐れて消極的になってしまうこともあるんですよね。

しかし、チーム全員が気持ちよく開発できるためにもAWSの管理ツール系をうまく使って行くことが重要だと思います。

ハンズラボでも今後DevOpsに対しての取り組みを率先して行い効率化を図っていきたいと思います。
次回はCloudFormaiton + OpsWorksの記事を書いてみようと思います。