1
/
5

森田ドラゴンのインターンシップ ~9日目~ 遂にSAMと・・・

こんにちは。高知からインターンしている森田ドラゴンです。トップ画像が使い回しなのは、フリーの竜の画像が少ないからです(なんでトラはあんなにストックあったんですかね)。先週から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で接続が切れてしまって、送信も受信もできないので、次回はその原因を突き止めるところから始めます。来週もよろしくお願いします!

株式会社サーバーワークスでは一緒に働く仲間を募集しています

同じタグの記事

今週のランキング

株式会社サーバーワークスからお誘い
この話題に共感したら、メンバーと話してみませんか?