dskst's diary

Life and Tech Blog

Google Play/iTunes Connect で有料アプリ販売のための口座登録方法(2016年10月版)

f:id:dskst9:20161123213044j:plain

Google Play と App Store で有料アプリ(アプリ内課金を含む)を販売するまで、何をしたらいいのか。というのをまとめておく。

Google Play

Googleはそんなに障壁はなく設定が可能。

  1. Google Play Developer Console にて販売アカウントのセットアップをする
  2. Google Payment Center (Payment Merchant Center?) でお支払い方法に口座情報を登録する
  3. 即座に有料アプリ販売は可能になる(以下、収益受取のために対応必要)
  4. 3営業日ほどで Google から登録した口座にデポジットが入金される(1$未満)
  5. Google Payment Center にて入金されたデポジットの金額を入力する
  6. 支払口座が有効になる

デポジットはどうするの?

6のデポジットで返却するの?どうしたらいいの?というのをGoogleに問い合わせたら、以下回答が。返却は不要とのこと。

Googleからのテストデポジットは、お客様の売上が確実にお客様の銀行口座に振り込まれるよう、お客様がMerchant Centerにご入力された銀行口座情報にお間違いがないかを確認するために実施しております。テストデポジットの金額はGoogleへ払い戻す必要はございません。

参考記事

https://support.google.com/payments/merchant/checklist/6012413?hl=ja https://support.google.com/googleplay/android-developer/#topic=3452890 https://support.google.com/googleplay/android-developer/answer/140504?hl=ja https://support.google.com/googleplay/android-developer/answer/3092739?hl=ja https://support.google.com/payments/merchant/answer/1619772?hl=ja

スポンサーリンク

iTunes Connect (App Store)

Tax Infomation がわかりずらい。2週間あれば有料アプリ販売はできるだろう。

  1. iTunes Connect より Paid Applications Agreement に同意する
  2. Contact Information を登録する
  3. 会社住所を英語で登録
  4. Bank Info を登録する
    口座番号、口座名義、口座種類を入力する
  5. Tax Information を登録する
  6. Part 1: Identification of Beneficial owner
    • 3.Chapter 3 Status(entity type): Corporationなと適宜選択
    • 7.Mailing address: チェック
    • 8.U.S. taxpayer identification number (TIN), if required: 何も記載しない(後述の注意参照)
    • 9b.Forelgn TIN: 空欄
    • 10.Reference Number(s): 空欄
  7. Part 3
    • 14.I certify that: a をチェック
    • 15.Special rates and Conditions: チェックしない

EINって入力不要なの?

Tax Infomation はEINに"000000000"を入れるという情報もあるが、空欄でよい。 日本で事業をしているが"000000000"を入れる必要があるのか問い合わせると、以下回答がきた。

Thank you for your email. Kindly refer to “Tips for Completing W-8” and the IRS instructions within iTunes Connect prior to completing the form. Since every company’s situation is unique, it is advised that you speak with your tax professional for assistance.

Under our current model, application sales by non-U.S. developers on the App Store are not subject to U.S. tax withholding or reporting. Therefore, completion of Part III - Claim of Tax Treaty Benefits, is not required in order to certify your foreign status. In addition, you are not required to provide a U.S. taxpayer identification number (TIN) in Part I (line 8) when when certifying foreign status. Please note our system does require you to the specify the type of income your are receiving through the App Store on line 10 (W-8BEN) or line 15 (W-8BEN-E).

参考記事

http://d.hatena.ne.jp/shunsuk/20090522/1242997423 http://crunchtimer.jp/blog/technology/administration/1439/ https://origin-discussions-jp.apple.com/thread/10173991?start=0&tstart=0 http://blog.syuhari.jp/archives/1228 http://kentaro-shimizu.com/lecture/iphone/step4.html http://blog.kishikawakatsumi.com/entry/20090511/1242010376

その他

決済方法と支払先

少し経理的なお話も。
それぞれの手数料だけならいいのだが、 リバースチャージ課税なるものが存在する。
Apple は国内企業間の取引になるので、対象にはならないが Google はこの対象になるので注意が必要だ。

決済方法 決済手数料 手数料支払先 リバースチャージ課税対象
Google Play 販売価格(税込) * 30% Google Asia Pacific Limited(海外)
App Store 販売価格(税込) * 30% iTunes株式会社(国内) ×

リバースチャージ課税の適用条件は、ややこしいが下記にあるようにあまり対象になることはないようだ。

一般課税による申告で課税売上割合が95%未満である場合にのみ適用される

リバースチャージ方式とは?消費税法改正で課税方式が変わった!|MFクラウド 公式ブログ

入金サイクル

さいごに

有料アプリの販売設定は面倒なことが多く感じる。
1ヶ月くらい時間に余裕を持って設定を進めていくようにしないと、意外なところでハマったりするので、対応予定の方は早めにやってしまうのをおすすめする。

AWS/Kinesis + API Gateway + Lambda + DynamoDB を使ってみた

はじめに

サーバレスアーキテクチャだ!と興奮しながら Kinesis, API Gateway, Lamda,DynamoDB を使ったシステムを作ったお話。
細かい設定方法は要点毎にググった方が早いと思うので、Tipsを中心に。

本構成がだれかの役に立てば幸いです。

どんなシステムか

ざっくりと、下記のような感じ。

  1. デバイスからデータを登録したい
  2. 並列でデータを登録したい(将来的に1000req/sec くらい)
  3. 登録したデータをWEBAPIで取得したい
  4. サーバ費用はお安く

要するに、

大量のデータを同時に登録できて、ついでに取得できるAPIも作ってよ。
もひとつついでに、サーバを新しく立てたくないし、保守もしたくないよ。

ってこと。

こんな要件を依頼された方はこの記事が参考になるかもしれない。

どんな構成か

f:id:dskst9:20160716214228p:plain

データ登録は

Kinesis -> Lambda -> DynaoDB

  1. Kinesis Stream にデータ登録
  2. Lambda で Kinesis からデータ取得
  3. 取得データを Lambda から DyanamoDB へ登録

データ取得は

API Gateway <-> Lambda <-> DynamoDB

  1. API Gateway から Lambada を呼び出す
  2. Lambda から DynamoDB にアクセスしてデータ取得
  3. API Gateway でデータを返却

どうやってつくったか

Kinesis -> Lambda -> DynaoDB

デバイスからデータを投げるのであればやり方は色々ある。
私が候補に挙げたのは AWS IoT と Kinesis Stream だ。

AWS IoT ではなくKinesis を選択した。
理由はKinesis の方が安く、デバイスのシャドウとか使う要件がなかったので、IoTだと高機能すぎたから。

Kinesis へのデータ登録は Cognito を使用した方が本当はいい。
今回はクローズドデバイスだったので、 AWS SDK で Kinesis 直通にした。

  1. IAMロールをつくる
    Lamda が Kinesis にアクセスするために、 AWSLambdaKinesisExecutionRole のポリシーをアタッチしたIAMロールを作成する。
  2. データ登録用の Kinesis Stream をつくる
  3. DynamoDB をつくる
  4. Lambda をつくる
    1で作ったロールを割り当てる
    DynamoDB への処理行うファンクションを作成
  5. Kinesis と Lambda を連携する

Kinesis が大量のデータを一次請けしてくれるので、同時接続は安心して任せることができる。
Kinesis に溜まったデータを Lambda でコツコツと取得して DynamoDBへ放り込む。

Kinesis にデータが溜まり過ぎ、 Lambada に一気にデータが流れ込むと、 DynamoDB の書き込みキャパシティを食ってしまうので注意。
Lambda でデータ処理が追いつかない時などに発生する(エラーとかでずっとリトライするとか)

API Gateway <-> Lambda <-> DynamoDB

Lambda で関数作って API Gateway に登録するだけでAPIができてしまう。
しかも、APIのレスポンスやリクエストも事細かに設定ができるので、Lambda は取得の関数だけに集中できる。これは楽だなと思った。

  1. Lambda でDBからデータ取得する関数作成
  2. API Gateway でアクセスポイントを作成
  3. API Gateway から Lambda 関数を呼び出すように設定

API Gateway はかなりクセがある。
正直未だに全貌がわかっておらず、何がどこまでできるのわからない。
REST API を作る程度であれば瞬殺でいける。

スポンサーリンク

つくってみて

一度やり方がわかれば爆速で開発ができそうだ。
何よりインフラのことを気にしないで、開発に集中できるのが素晴らしい。

実際に稼働させてみても大きな問題も発生せず安定おり、何かあっても即座にリソースコントロールできるのも安心だ。
ぜひみんなも使ってみてほしい。

Tips

以下、実装時に書いたQiitaの記事。

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

Tips for Kinesis Stream

  • シャードという単位で同時書き込み数が決まる
  • 1シャードと 1000req/sec で書き込みが可能
    書き込みする容量にもよるので注意
  • 最大25000req/secまで耐えれる
  • 書き込んだデータは24時間 Kinesis に保存される
    別途申請することで24時間以上も可能

Tips for Lambda

  • とにかく関数を登録すると動作する
  • バージョニング機能がある
  • バージョニングをエイリアスと紐付けれる
  • メモリ、CPUを変更できる

Tips for DynamoDB

  • 書き込みキャパシティ、読み込みキャパシティユニットは同時書き込み、読み込みと解釈する
  • Cloud watch 上は分間表示なのでキャパシティ計算の際は注意
  • 登録データの自動パージ機能はない、今後できるようになることを切実に願う

Tips for API Gateway

  • リクエスト、レスポンスなど柔軟にカスタマイズ可能
  • ステージを分けてデプロイが可能で、ステージごとに紐づくLambdaのエイリアスを設定できる
  • CORSを有効にするには設定が必要

人工知能入門におすすめの本やサイト

f:id:dskst9:20160515011130j:plain

人工知能入門におすすめ(&おすすめされた)本などのメモとして。 読みたいけどまだ読んでない本も含めまれてるので注意。

おすすめの本

人口知能は人間を超えるか ディープラーニングの先にあるもの

人口知能とはその歴史から、そしてこれから何ができるかという人工知能とはなんぞや?という入りとしておすすめ。
さくっと読めるページ数なのも◎

ロボットは東大に入れるか

ロボットは東大に入れるか (よりみちパン! セ) (よりみちパン!セ)

ロボットは東大に入れるか (よりみちパン! セ) (よりみちパン!セ)

新井先生の公演を聞く機会があり、東ロボプロジェクトは人工知能の限界(できること、できないことがなにか)を世間に伝えたいという。人工知能は「東大には入れません」と新井先生自身で言っていたのが、とても衝撃だった。
読みたい本。

知能の物語

知能の物語

知能の物語

かなり難しい内容だったけど、知能とは何なのか?というのを深掘りしていく。
いや、深掘りという表現以上に色々と考えさせられるので、おもしろく深い本だ。

深層学習 Deep Learning

深層学習 Deep Learning (監修:人工知能学会)

深層学習 Deep Learning (監修:人工知能学会)

おすすめされて未だ読めていない。
すすめてくれた方も難しいと言っていたので、上級者向けかも。

数学ガール

数学ガール (数学ガールシリーズ 1)

数学ガール (数学ガールシリーズ 1)

ディープラ―ニングと切っても切れない数学に対して苦手意識がある場合、この本はおもしろい。
ラノベっぽい感じで、高校生男女と数学を絡めた物語なので、読みやすく数学への拒否反応が少なくなる。
ちなみにシリーズ化している。

おすすめWEBページ

ニューラルネットワークと深層学習

http://nnadl-ja.github.io/nnadl_site_ja/index.html

ニューラルネットワークと深層学習において、これほど詳しくわかりやすく書いている本はないと私の人工知能先生が言っていた。
確かにすごい丁寧に書かれている、1ページの記載量が多すぎるのが辛いが。。

Qiitaの記事

色々読み漁っていたらストック溜まっていたので共有。(どれもバズった記事だが)
ディープラーニング自然言語関連が多かった。

ディープラーニング
自然言語

さいごに

まだまだ入門したばかりだがちょっとずつでもがんばっていこう。
こんなのおすすめの本があるよなどあれば、おしえてください(^^)

EC2 に ssh できない -> EBS 付け替えてレスキューした話

f:id:dskst9:20160320215617p:plain

EC2 に ssh できなく、ルードデバイスの EBS を他 EC2 からレスキューした。

この記事で伝えたいのは
EBS を別の EC2 にアタッチして調査するのは面倒じゃないよ!
ってこと。

私が ssh できなかった原因は、 /home がブロックデバイスの EBS に対してリンクされていて、 EC2 の停止により EBS がデタッチされてしまい、 /home が消失してしまった。(自動マウントの設定がされていなかったため)
そのため、ssh をしても Permission denied (publickey). で弾かれていた。

そもそも

再起動、停止では動作が異なる。
再起動だとマウントしたボリュームは外れないので、今まで気づかなかった。

docs.aws.amazon.com

上記には書いていないけど、 再起動だと mount は保持される。

調査…

  1. 22番ポートが開いているか
    $ telnet 192.0.2.1 22 で Connected になるか。(IPは仮)
    今回私の事象は22番ポートは問題ないので Connected になった。
  2. ssh をデバッグする
    ssh -vvv 192.0.2.1 22 でどのようなデバッグがでるか。
    今回私の事象は証明書を読み込めていない感じだった(詳細は忘れた)

以上から /home の中を見てみないとわからんという話になった。
めんどうだなーと最初は思っていたが、やってみたら意外にそうでもなかった。

スポンサーリンク

やったこと

  1. 対象のEC2(以下、対象EC2) をストップ
  2. 対象EC2 のルートデバイスのボリュームをデタッチする
  3. デタッチしたボリュームからスナップショット作成
  4. スナップショットから EBS を作成(以下、対象EBS)
  5. 調査用の EC2 (以下、調査用EC2)を作成する
  6. 調査用EC2 に 対象EBS をブロックデバイスとしてアタッチする
  7. 調査用EC2 を起動して 対象EBS を mount する
  8. 対象EBS 内の問題点を修正する
  9. 調査用EC2 を停止して 対象EBS をデタッチする
  10. 対象EC2 のルートデバイスに 対象EBS をアタッチする
  11. 対象EC2 を起動して事象が解消されれば成功

一箇所躓いたのが、ルートデバイスとしてアタッチする方法が分からないかったところ。以下に対応方法はまとめておいた。

qiita.com

さいごに

上記のように単純に外して、付ける。
ただそれだけなので、めんどくさいと躊躇している暇があればとっととやったらすぐ終わるものだった。

参考

docs.aws.amazon.com

qiita.com

dev.koba206.com

『JAWS DAYS 2016』に参加してきた

f:id:dskst9:20160313144902j:plain

JAWS DAYS 2016 | Move Up the Next Cloud

JAWS DAYS 2016 に参加してきました。
今年もおもしろいセッションをたくさん聞けて素晴らしい一日でした。

諸事情で13時半ころからの参加になり、、聞きたかったセッションを逃してしまったのが残念。。

追記 3/17

資料一覧をまとめてくれている方を見つけました。
ありがとうございます。

これを聞ききたかったよ

はい、13時のセッションですが間に合いませんでした…。
今後資料が公開されたらリンクしておこうと思いますが、どなたか資料発見したらご連絡を貰えると嬉しいです。

スマートニュースにおけるストリーム処理の過去・現在・未来

坂本卓巳さん [スマートニュース株式会社]

聞きたかったですね、資料公開を待ちます。

Big DataとContainerとStreaming – AWSでのクラスタ構成とストリーミング処理

岩永亮介さん [AWSJ SA]

残り5分くらいきけました、 Kinesis のあたりを少しだけ。。
資料公開待ってます。

エンジニアのキャリアとアウトプットを意識した成長戦略

及川 卓也さん [Increments株式会社]

及川さんのセッションの時にちょうど SA に確認したいことがありあまり聞けず。。
これは生で聞きたかったなー。

これを聞いたよ

AWS IoTで家庭内IoTをやってみた

土持 昌志さん [JAWS-UG 大阪]

f:id:dskst9:20160313152924j:plain

ラズベリーパイに湿度計をつけて、AWS IoT を使って AWS に送信する仕組みを作ったというお話。
資料を見つけれないのですが、ここまで簡単にIoTを作れちゃうんだとびっくりしました。

あと、セッションとは全然関係ないですが、下記のハンズオンの記事も参考になります。
これならできる!AWS IoT ハンズオン 参加レポート | オブジェクトの広場

以下自分用メモ。

  • AWS IoT Device SDK AWS IoT Device SDK - AWS IoT
    • Node.js でブリッジプログラムを書いて Python での実装を行っていた
    • あとでAWS SAの方に確認したが、 Android, iOSSDKも最近出たらしい
  • Device Shadow とは
    • デバイスの仮想コピーをクラウド上に作成する
    • デバイスがオンラインになったらデバイスに情報を送信する
    • オンラインからデバイスを操作するのでデバイス側で対象処理を行うプログラムが必要なようだ

AWS IoT デザインパターン

福井 厚さん [AWSJ SA] / 下佐粉 昭さん [AWSJ SA]

AWS IoTと連携するAWSサービスの設計パターンについてのお話でした。
福井さんと下佐粉さんの掛け合いも面白かったですw

IoT に必要なもの

  • 迅速さ
  • スケーラビリティ
  • コスト
  • セキュリティ

PUB/SUBのパターン

MQTT プロトコルでの実装が主流になってきているようです。

  • ポイント to ポイント
    PUB 1: SUB:1
  • ブロードキャストパターン
    PUB 1:SUB n
  • ファンアウト通知パターン
    投げるトピックによって SUB を切り替える
  • 集約パターン
    PUB n: SUB 1
    ワイルドカードで必要なものだけを吸い上げる、URLに埋め込む事もできる

アーキテクチャ

f:id:dskst9:20160313154247j:plain

  • Batch Layer
  • Speed Layer

上記のようなレイヤー分けでパターンを分けていきます。
スピートが求められる場合、データの正確性が求められる場合で分けるといった場合です。
尚、 IoT はイベント駆動アーキテクチャになります。(SQS,SNS,Lambda などでイベント駆動)

DEMO

福井さんの椅子に椅子の動きと、照度を感知するIoTを取り付けたというデモがありました。オチが秀逸でしたw

以下、メモ。

  • Kinesis Firehoseはプログラムレスでデータを送れる
  • Kinesis Firehose のモニタリングが可能
  • Redshift は5分間隔とかで登録していたりする
  • セキュリティはクライアント証明書、TLS1.2、サーバーと双方間で認証

オペ担当がAPI Gateway + Lambdaでチケット処理を自動化した話。

植木 和樹さん [JAWS-UG 上越妙高支部]

すでにクラスメソッドさんの記事にまとまって公開されていました。
(初心者向け)APIGatewayとLambdaの導入事例について話してきました #jawsug #jawsdays #jd2016_deep | Developers.IO

Lambda の話がメインでした。
最近 Lambda が便利すぎて衝撃を受けていて、いろいろ調べている最中なので勉強になりました。

AWS Lambda とは

  • コードを書く
  • 発火する
  • コードが実行される

Lambda の覚え方

  • AWSブループリント(サンプル)があるので見てみるといい
  • Qiita に Lambda の記事がいっぱいある
  • Lambda 連携時は 入力データをまず確認
    CloudLogs で入力データをまず確認した方が必要な値とか見やすいよね

Lambda の VPC 対応

VPC 対応がされたことにより以下にアクセスが可能となりました。

  • RDS
  • CloudWatch Events
  • AWS Config Rules

メモ

  • AWS APIでリソース操作
  • 外部APIと連携可能だが、VPCにするとNATインスタンス必要
  • データ変換、画像変換、SQLなどなんでもできちゃう
  • OpenSSLの脆弱性などライブラリのアップデートもAWSがやってくれる
  • Backlog Webhook が SNI に対応してなかった
    後日対応してくれたらしい

Amazon API Gateaway / AWS Lambda Deep Dive(の触りだけ)

西谷 圭介[AWSJ SA]

www.slideshare.net

勢いがすごかったですw
内容も豊富すぎてメモが追いつかない…!

パフォーマンス

  • Javaがイニシャライズが高い
    • Node.js の10倍くらい
    • 初期化が終わればJavaが早い
    • Pythonが両方の間くらいになる
  • Lambda はメモリサイズのみ指定できる
    • CPUは指定できないがメモリサイズに比例する
    • 課金はメモリサイズによるので注意

VPCアクセス関連

  • 設定したらインタネットアクセスが負荷となる
    必要な場合はNATインスタンスを用意する
  • AZごとにサブネットを指定しおくのがおすすめ

スケジュール実行

  • rate, cron で設定可能

Idempotency

  • 冪等性はコードで確保する
  • Lambda は最低一回実行する、何十万回に2回とか起きる場合がある
    DynamoとかはリクエストIDで制御とかするとか

リトライまとめ

  • ファンクションがエラーになるとリトライになる
  • エラーにした上で正常終了したければ、ログに吐いてCloudWatchとかで披露必要がある
  • Kinesis、DynamoDB はエラーになると成功するまでそのシャードは無効化される?

同時実行

  • 同時実行数を超えた場合はエラーになる
    • 同期の場合 429 が返却される
    • 非同期の場合6時間再思考される(S3は最大24時間)
  • Kinesis, Dynamoはまた特殊

API Gateway

FAQ

  • ファンクション内部からエイリアスを取得して環境変数のように使える
  • 新規コードがアップロードされたら混在する、ダウンタイムなし
  • VPCアクセス利用時、プライベートIPを固定することは可能
  • グローバルIPNATで固定化
  • VPCアクセス時のレイテンシは結構ある、ENIの作成がある場合は10〜60秒
  • 初期化をポーリングでやっておくのも手となる

Tips

  • Lambdaのブラウザエディタはからスキームが変更できる
  • Lambdaファンクションはコンテナ内で実行される
  • 利用がない場合はコンテナは一度破棄される
  • /tmp はいつ消えるかわからないので使わない方がいい

おわりに

去年はAWSの導入事例などが多かった気がするのですが、今年は各機能ごとにディープなセッションがあり、1年でこんなにも技術と世の中が変わっているいくことを感じました。
また来年楽しみにしています!