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

HANDS LAB

HANDS LAB ENGINEERS BLOG

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

作者別: Taiji Inoue

こんにちは!

DynamoDBのパーティション分割問題について


こんにちは、井上です。

DynamoDBを使用していて、スループットは十分なはずなのに、書き込み/読み込みエラーが発生する、というケースはありませんでしょうか。

ハンズラボでは以前からこの問題に悩まされており、原因が分からないまま必要以上に高いスループットを設定したりしてお茶をにごしていたのですが、サポートやSAの方に相談したところ、パーティションの分割による問題であることが分かりました。

このパーティション問題は結構ハマりどころだと思うので共有しておきます。

続きを読む DynamoDBのパーティション分割問題について


BuySmartの導入で越境ECを簡単にはじめる


こんにちは、井上です。

東急ハンズの商品を海外で販売するために、ハンズネット に BuySmartというサービスを導入しましたので、その紹介をしたいと思います。

buy-smart-logo

BuySmart はベリトランスの子会社であるナビプラス社が提供しているサービスで、このサービスを利用することで簡単に海外販売を開始することができます。

海外消費者向けグローバルECスキーム『BuySmartJapan』のご案内:ナビプラス株式会社

ユーザーの利用イメージとしては、下記のような流れになります。

まず、海外のユーザーがECサイト(https://hands.net)にアクセスしてくると下記のようにバナーが表示されます。

buy-smart-1

このバナーにより、ユーザーに海外発送に対応していることが伝わります。

バナーをクリックすると、ナビプラスの画面に遷移し、商品の詳細とこのサービスを利用した商品の購入の流れが表示されます。

buy-smart-2

チャットも用意されているので、チャットで気軽に相談することもできるようになっています。
もし、商品を購入しようと思ったら、そのままナビプラスのサイトにて購入手続きを行います。

ユーザーの購入から発送までの流れ

ユーザーが商品を購入すると、ナビプラスの人が注文された商品を元のECサイトから普通に購入し、海外に発送します。この部分はナビプラスの中の人の完全人力によるサービスになっています。

ECサイト側の運用の流れ

海外に発送する作業などを行う必要はなく、単にナビプラス社から注文が入り、ナビプラス社に発送するだけなので、ECサイト側のオペレーションで特に変更になる点はありません。
なので、導入のハードルとしてはかなり低いのではないかと思います。

全体的なフローについては下記のとおりです。

buy-smart-user_flow

導入にあたって

導入にあたって行った作業などを簡単にまとめたいと思います。

システム側の対応

1)商品詳細ページなど、バナーを表示したいページに、特定のHTMLタグを挿入する
2)データ連携プランの場合は商品詳細情報を返すAPIを作成する

連携のために必要な開発は主に上記2点でした。
APIが既にある場合には、それをそのまま流用できるので工数も短縮できると思います。

運営側の対応

1)海外販売可/不可の整理
 商品によっては、海外に発送できない商品もあります。また、取引先より海外販売NGと指定されている商品もあると思いますので、そのあたりのルールの整理と、データを整備します。
 実際には、発送先の国によって法律が変わってくるので、ECサイト側では完全には対応できませんが、そのあたりは実際に購入されたあとでナビプラス側で確認して対応していただけます。

2)バナーのデザインの確認

だいたいこのような対応で海外販売を開始することができました。

まとめ

導入検討から実際導入するまでは数ヶ月がかかりましたが、実際に割いた工数は多くなく、まず始めてみるには良いサービスだと思いました。

越境ECを検討されている方は一度検討してみてはどうでしょうか。


AWS ElasticSearch Service の認証にIAM Roleを使う [aws-auth-proxy編]


下記の記事の続編です。

PHP編とPython編を書いたのですが、いろんな言語で開発していると、言語毎に流儀が違って、つらいです。
なので、AWS の認証情報を付与してくれるだけの簡単なProxyないかと思って調べたらありました。

coreos/aws-auth-proxy: HTTP proxy that signs requests for upstream AWS endpoints

こんな感じで、ローカルホストでProxyを立てておくと、localhost:9200 にアクセスするだけで、AWSのElasticSearchに接続できます。

Kibanaとかを使おうと思うと、どうしてもIPアドレスを開けないといけないと思うのですが、aws-auth-proxyを使えば、IP開けなくても大丈夫です。
まだ2週間くらい前にできたレポジトリのようですが、coreos が開発してるってのがなんとなく安心なのと、go なので 1バイナリを配布すれば使えるので、便利そうです。

似たようなものに、Nginxモジュールの AWS 認証 プロキシもありました。
anomalizer/ngx_aws_auth – C

S3のProxyとして使う例しか書いてなかったので、ElasticSearchでも使えるかは分かりません。


AWS ElasticSearch Service の認証にIAM Roleを使う [Python編]


AWS ElasticSearch Service の認証にIAM Roleを使う [PHP編] の続き、
Python編です。

Python でどうするのか、検索してみたところ、github の elasticsearch-py のライブラリレポジトリにて mathom がAWS の認証機能を追加するパッチつくったよー的な議論があって、最終的にマージされたようです。
なので、普通に elasticsearch-py でちょっと設定すれば使えるようです。

AWS ElasticSearch service · Issue #280 · elastic/elasticsearch-py

elasticsearch-py は、ElasticSearchのOfficial low-level clientとのことです。
今見ると、elasticsearch-py のドキュメントに、こんな感じで使えるよって書いてありました。

Python Elasticsearch Client — Elasticsearch 2.2.0 documentation

変更点も少なくて、ライブラリもそのまま使えていいですね。


AWS ElasticSearch Service の認証にIAM Roleを使う [PHP編]


こんにちは、井上です。

AWS ElasticSearch Serviceを使ってみました。
ElasticSearchはVPC外に置かれるとのことで、アクセス管理はどうするんだろうと思っていたら、AccessPolicyにて何かしら制限しないといけないようです。(VPC内に置いて欲しいなぁ…)

制限方法としては、

  • IPアドレスによる制限
  • アカウントIDによる制限
  • IAM Roleによる制限

などができるようです。

試しに、IAM Roleで制限をかけたEndpointにcurlでアクセスするとエラーがでることは確認できました。

ではどうやって認証を通るようにするかを探していてたどり着いたページ、
Amazon Elasticsearch ServiceのIAM Roleによるアクセス制御 | Developers.IO を見ると、

と、書かれていてメンドクサそうだな、と思ったのですが、下記にライブラリと共存させるやり方が書いてありました。

Signing an Amazon Elasticsearch Service Search Request — AWS SDK for PHP documentation

ElasticsearchのClientBuilderのHandler を定義することで、リクエスト署名を挿入してリクエストを送ることが出来るようです。

これを es_aws_test.php というファイル名で保存します。

inoue_test というインデックスが作られていることが確認できました。
この一連の手続きは結構長いので、この部分は Clientを生成する共通処理として作っておくとよさそうです。

あと、Node.js で Lambdaから ElasticSearch を更新するサンプルが awslabs に上がっていました。

amazon-elasticsearch-lambda-samples/s3_lambda_es.js at master · awslabs/amazon-elasticsearch-lambda-samples

実際に社内でも、Lambda からElasticSearchを更新する処理は稼働中とのことでした。早い!

Lambdaと同様に、ElasticSearch もVPC対応、期待しています。

[2016/01/28 追記]
アイキャッチ画像がクラスメソッドさん作成の画像との指摘を受け変更いたしました。ご迷惑をおかけしました。