以前、クラロワAPIをlambdaから叩いてLINEに送る という記事を書きました
システム自体はこちらで完成なのですが、結構お金がかかるという問題がありました
この問題の原因はクラロワAPI(Clash Royale API)がアクセス可能なIPを制限しているため生じていました
今回、RoyaleAPIが提供している公開Proxyを使うことで、無料でクラロワAPIをlambdaから叩いてLINEに送ることが出来たので記事にしていきます
概要
完成したもの
以前の記事と全く同じで、プレイヤー名
と放置している期間
がLINEに届きます
構成
クラロワAPIはIPアドレスを指定する必要がありますが、RoyaleAPIのProxyを使うことでAWS側でIPアドレスを固定する必要がなくなりました
RoyaleAPIのProxy
RoyaleAPIについて
一言でいうと、公式に一番近い非公式な存在です
アップデート情報をいち早く伝えたり、プレイデータの統計をとって公開したりなど、クラロワユーザーなら一度は耳にしたことがあるかと思います
また現在では停止していますが、クラロワの公式APIが提供される前から非公式APIを提供していました
使い方
ドキュメントに書いてある通りです
- クラロワAPIのKeyの作成時に
128.128.128.128
のアドレスを許可する - リクエストを送るURLの
api.clashroyale.com
をproxy.royaleapi.dev
へ書き換える
セキュリティ
「公開Proxyは危険」という意見は多々見受けられます
ここで述べられる危険性は仰る通りであり、頭の中に入れておいて下さい
RoyaleAPIのProxyを経由する情報は、ヘッダーにあるクラロワ公式のAPIキー
とAPIから取得したデータ
になります
APIキーは無料で制限もないですし、取得するデータも秘密にしたいわけではないので、そこまで問題ないかと思います(個人的な意見です)
便利さを取るか、セキュリティと取るか、は個人の判断におまかせします
クラロワAPIのKeyの作成
developer.clashroyale.comの右上の名前のところからMy Account
を選択し、Create New Key
から新しい鍵を作成します
ALLOWED IP ADDRESS
に128.128.128.128
を指定します
Create Key
で鍵を生成して、出来たtokenを保存します
実装(以前からの変更)
以前のコード と 変更後のコード の変更箇所について説明します
変更点以外の説明は以前の記事を参照して下さい
APIのBASE_URLを変更
# 変更前
CR_BASE_URL = 'https://api.clashroyale.com/v1'
# 変更後
CR_BASE_URL = 'https://proxy.royaleapi.dev/v1'
serverless.yml
の不要な箇所を削除
# VPCのロールに関する記述を削除
iamRoleStatements:
- Effect: "Allow"
Action:
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
Resource:
- "*"
# VPCのセキュリティグループに関する記述を削除
vpc:
securityGroupIds:
${env:VPC_SECURITY_GROUP_IDS}
subnetIds:
${env:VPC_SUBNET_IDS}
APIキーを変更
.env
ファイルにAPIキーを追加
CR_ACCESS_KEY_EIP=[以前のAPIキー]
CR_ACCESS_KEY_PROXY=[今回作成したAPIキー]
serverless.yml
で設定しているAPIキーの環境変数を変更
# you can define service wide environment variables here
environment:
# 変更前
CR_ACCESS_KEY: ${env:CR_ACCESS_KEY_EIP}
# 変更後
CR_ACCESS_KEY: ${env:CR_ACCESS_KEY_PROXY}
最後にserverless deploy
を実行すれば完了です
終わりに
RoyaleAPIさんのおかげて、何でも楽にやってくれるLambdaさんに戻ってくれました
RoyaleAPIは有志が運営しているサイトです。Donateページから支援することが出来ます
また、クリエーターコードRoyaleAPI
でも支援することが出来ます
今回の構成はRoyaleAPIのおかげで無料で出来ています。是非クリエーターコード等で支援してあげましょう!