ハッカソンに出場するためのプロダクトを開発している時に、大沼にハマったので、記事にしてみようと思います。
半年ほど前の記憶を辿りながらですので、ところどころ抜けてるかもしれません。
また、awsのアカウント作成や、aws cliのインストールなど、細かい部分に関しては、記載しませんので、ご了承ください。
#環境
・MacOS Catalina
$ sw_vers
ProductName: macOS
ProductVersion: 11.1
BuildVersion: 20C69
#やろうとしていたこと
iosのカメラで表情を認識した時に、写真を撮影し、AWSのS3にアップロード。アップロードが完了したことをトリガーに、lmada関数が走り出し、AWS Recognitionという表情認識APIにアップロードされた画像を渡す。そして、APIから帰ってきた表情の数値をfirebaseに保存する。保存された情報をブラウザが取得し、グラフとして表示するというプロダクトを作ろうとしていた。
※今回は、私自信がs3に画像がアップロードされてからfirebaseに保存するまでを担当したので、その部分のみの記述になります。
#手順
①AWS confing の設定
はじめてのAWSだったので、最初のこの部分の設定がなかなか鬼門でした。
ただ、一度理解すればここはなんなくいけます。
$ aws configure --profile user1
AWS Access Key ID [None]: {アクセスキー(各自)}
AWS Secret Access Key [None]: {シークレットアクセスキー(各自)}
Default region name [None]: ap-northeast-1
Default output format [None]: json
②lamda関数の記述 ※ソースコードは割愛させていただきます。
ここでまさかの大沼ポイントがありました。APIを叩いて、表情を数値化したデータは取れているのですが、firebase admin SDKがうまく反映されておらず、データを保存することができていませんでした。
数時間にも及ぶ死闘。(数時間で死闘とかゆうなってゆうのは、やめてください。こちらも理解した上で書いております。)その末に判明したのは、原因がlamda関数において、pythonランタイム(lamda関数をpythonで記述していたため)しか設定していなかった。しかし、firebase admin SDKは、一部C言語でのコードも存在するため、ランタイムエラーが起こり、うまく走っていなかったのです。
最終的には、lamda関数にカスタムランタイムでC言語を設定することで解決することができました。
ここまでくれば、あとはブラウザからfirestoreに保存されているデータを取得するだけなので、簡単です。
**と思いきや、**ここからもAPI関係で沼にハマったらしく(担当してくれていたチームメイトが)、相当きつかったです。
#感想
APIとか外部ライブラリとかは一見魔法のようなものですが、実際に使ってみると得体のしれないものなので、結構沼にはまる可能性があると思います。(現役のエンジニアの方などにとっては常識かもしれませんが、未経験の僕からしたら魔法のようなものでした)恩師の方がよく、「外部ライブラリとかを自分で作れるレベルにならないと使いこなせないよ」とおっしゃっていたのは、今思い出しても本当にその通りで、githubとかソースコード見て仕様を理解して、エラーの原因を考えられるようになる必要があるなと思いました。
また今回初めてAWSを触ってみて、自分的には「AWS触れます」とかゆってしまいそうな気持ちになったのですが、恩師の方に「君はおそらくまだAWSの1%も理解できていないよ」と。恐るべし、という感じですね。
結論、楽しかったからもっとAWSで遊んで見たいと思います。
ご覧いただきありがとうございました。