こんにちは。高知からインターンしている森田ドラゴンです。トップ画像が使い回しなのは、フリーの竜の画像が少ないからです(なんでトラはあんなにストックあったんですかね)。先週からAWS SAMに苦戦していますが、なんとか課題をクリアしました( 大目にみてもらいましたが )。前回はtemplateのどの箇所でエラーが発生しているのか不明なまま進めてしまったので、まずは「それぞれの機能がSAMで書けているか」確認しながら進めていきました。
DynamoDB in SAM
DynamoDBは他のサービスに比べると単純な構造をしているので、SAMでも記述ミスがないだろうと思っていたんですけど、普通にありました。
AttributeDefinitions:
- AttributeName: 'id'
AttributeType: 'N'
- AttributeName: 'Name'
AttributeType: 'S'
KeySchema:
- AttributeName: 'id'
KeyType: 'HASH'
最初は上のように書いていたんですが、ここでエラーが。 KeySchemaとAttributeDefinitionsが一致していないとのこと。「プライマリーキーは両方に書いてあるし、間違ってないよね?」と思いつつも調べていくと「DynamoDBはRDBじゃないので、Key以外の属性を複数定義する必要はない」との記述がありました。この事は知っていたんですが、DBといえばRDBという思い込みがまだ抜けきっていないですね。
Lambda & API Gateway in SAM
API Gatewayから起動するLambdaをCloudFormationで別々に作ろうとすると、割と面倒な感じになるらしいので、代わりに AWS::Serverless::Functionというものが使えるらしいです。Lambdaの書き方はデフォルトであることもあって、上手くいったんですがAPI Gatewayの書き方に手間取りました。
「AWS::Serverless::Functionの中じゃ上手く書けそうにないから、別でAPI Gatewayの書き方を調べてみよう」と思って色々やってみたんですが、AWS::Serverless::Apiで書けばいいのか、AWS::ApiGateway::Methodで書けばいいのかわからずに手こずってしまいました。
メンターの田斉さんに質問したところ「そんなに力を割いて欲しいところでもないから、次に行っていいよ」と言われたので、今回は断念しました。SAMを書くこと自体は割と楽しくて、一度書いたら何回でも利用できるってところに魅力を感じてます。そのためのサービスなんですけどね。ただ、AWSのサービスが、どんな設定から成り立っているか理解しておく必要があるのが、難しいところですね。
IoT課題は次に持ち越し
SAMが終わったので、次はIoT課題です。チュートリアル的な記事を見つけたんですが、なんとなく悔しかったので、公式のドキュメントを参考に課題を進めました。そもそもMQTTやAWS IoTの仕組みについて知らなかったので、面白かったです。ただ、なぜかAWS IoTとmacがtimeoutで接続が切れてしまって、送信も受信もできないので、次回はその原因を突き止めるところから始めます。来週もよろしくお願いします!