0
1

More than 1 year has passed since last update.

Lambda関数新規作成〜テスト実行

Posted at

読みにくい、間違い等ありましたらご指摘いただけますと幸いです。

対象読者

  • LambdaとCloudWatchがどんなものかなんとなく分かっているけど、
    • どのように実装していくか分からんという方
    • どういう時に使うのか分からんという方

事前準備、開発環境

[事前準備]
ReactNativeで環境構築したプロジェクトのディレクトリで、
こちらを参考にして、amplify configure、amplify init、amplify add authを叩いて事前準備する。

[開発環境]

  • react-native v0.66.5
  • amplify-cli v9.2.1
  • @aws-amplify/api v5.0.11
  • @aws-amplify/api-graphql v3.0.11
  • @aws-amplify/auth v5.1.5
  • @aws-amplify/core v5.0.11

amplify configure、amplify init、amplify add authを叩いて事前準備する。
https://dev.classmethod.jp/articles/how-to-set-up-web-application-base-with-amplify/

どのような開発に使ったか

毎日指定時間に、DynamoDBからデータを取得してpush通知を送る。

手順

1.amplify pull

初回ではない場合、リモートの差分を取り込む。

2.amplify add function

このコマンドを叩いてLambda関数を作成すること。既存のものをコピペして作成するとうまくいかないため。
何度か質問されますが、今回は以下の通り設定しました。

? Select which capability you want to add:
   Lambda function (serverless function)
? Provide an AWS Lambda function name:
  任意の関数名を設定
? Choose the runtime that you want to use:
  NodeJS
? Choose the function template that you want to use:
  Hello World (いくつかあるが、今回はとりあえず関数を作りたいので)
↓この後はHelloWorldを選択したときの設定です。
? Do you want to configure advanced settings?
  No
? Do you want to access other resources in this project from your Lambda function? (Y/n)
  No

作成完了すると、amplify > backend > function配下に関数が追加されている。

3.amplify status

作成した関数がOperation Createで差分として出ているか確認。
変更していない関数に差分が出ていないかも同時に確認。
image.png

4.amplify push function 関数名

新規作成した関数をpushする。
正常にpushされれば、赤文字が出ない。新規作成は白文字で表示されるかも。

5.ブラウザからpushした関数を確認、テスト実行

Lambda > 関数を開き、先ほどpushした関数があることを確認する。
テストを押すと、テストの新規作成が出てくる。
とりあえず、正常にテストできるか確認したいので、任意のイベント名を押して保存。

テスト > テストボタンを押すと先ほど作成したテストが実行できる。
正常に動作すると緑の表示、失敗すると画像のように赤の表示がされる。
スクリーンショット 2023-02-15 13.00.19.png

6.ログの確認

モニタリング > View CloudWatch logsから実行したテストのログが確認できる。
※確認前にLambda > 関数 > 設定 > 環境変数を適宜追加すること。

この後、Lambda関数を更新するには

ローカルで修正し、amplify pushする。

開発中に遭遇したエラー達と解決方法

  • node_modulesを含む関数がうまくuploadできず "errorType":"Runtime.ImportModuleError”が出る場合
    [解決方法]
    関数をzip化して、コード > アップロード元 > .zipファイルからアップロードした方が早い。amplify pushすると、なぜかnode_modules配下のパッケージたちが.yarn-integrityファイルのみになってしまう。謎。zip化は関数のディレクトリで以下を叩く。
zip -r 関数名.zip .
  • amplify > backend > function 配下の関数を右クリックして削除したが、amplify statusで確認すると残っている時
    [解決方法]
    amplify remove functionで削除したい関数を選択して削除。

  • テストを実行したときに、次のようなエラーが出たとき
    プロジェクト名LambdaRolexxxxxxxx-dev/Lambda関数名-dev is not authorized to perform: dynamodb: Query on resource: arn:aws:dynamodb~~
    [解決方法]
    I AM > ロール > プロジェクト名LambdaRolexxxxxxxx-dev の許可ポリシーに必要なもののアクセス許可をする、今回はDynamoDBのテーブルデータを取得したくてAmazonDynamoDBFullAccessを追加。
    AmazonDynamoDBReadOnlyAccessこっちでもいけた。

  • ValidationException Query key condition not supported
    IndexNameを追加したら、いけた。
    アクセスするDynamoDBのテーブル > インデックス > グローバルセカンダリインデックスにある名前を追加。

return new Promise((resolve, reject) => {
    dynamo.query(
      {
        TableName: '関数名',
        KeyConditionExpression: '#TYPE = :type AND #DATE = :today',
        ExpressionAttributeNames: { '#TYPE': 'type', '#DATE': 'date' },
        ExpressionAttributeValues: {
          ':today': today,
          ':type': type,
        },
        IndexName: 'ここ',
      },
      function (err, data) {
        if (err) reject(err)
        resolve(data)
      },
    )
})
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1