web-dev-qa-db-ja.com

イベントを使用してサーバーレスにデプロイされたCronスケジュールLambdaにjson入力を渡すにはどうすればよいですか?

Lambdaをサーバーレスにデプロイして、1時間ごとに呼び出すcronスケジュールで実行しようとしています。呼び出されたときに、デプロイされたときのデフォルトの入力であるCronイベントからの情報ではなく、Lambda内のイベントに自分のJSON入力が入力されるようにします。

AWSコンソール内で、手動でLambdaのCronトリガーに移動し、入力を「一致したイベント」から「定数(JSONテキスト)」に変更して、必要な結果を得ることができます。サーバーレスはLambdaをデプロイするときにこのルールを作成するので、serverless.ymlファイルの設定を介して入力を変更する方法がいくつかあるはずです。私はサーバーレスのドキュメントを検索している間に何も見つけることができなかったので、これが現在の状態のサーバーレスを介してこれが可能かどうか、そして可能であればどうすればよいか疑問に思っています。

任意のアドバイスをいただければ幸いです。

編集:この機能を追加する必要のある更新がありましたが、サーバーレス1.3.0を使用して、JSONを使用したスケジュールでまだデプロイできませんでした(1.2.0でもテストしました)。私が使用したserverless.ymlの例を以下に示します。

functions:
  test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
        rate: rate(10 minutes)
        input:
          key: value
      - schedule:
        rate: rate(10 minutes)
        input: '{"key": "value"}'
      - schedule:
        rate: rate(10 minutes)
        input:
          key: 'value'

1.3.0以降のServerlessのこの機能の状態、および上記の私のserverless.ymlが正常に見えるかどうかについて誰かがコメントできますか?

編集2:作業中のserverless.ymlを投稿する

functions:
  test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
          rate: rate(10 minutes)
          enabled: true
          input:
            key: value
      - schedule:
          rate: rate(10 minutes)
          input: '{"key": "value"}'
          enabled: true
      - schedule:
          rate: rate(10 minutes)
          input:
            key: 'value'
          enabled: true
25
Raiju

あなたの編集に編集:私はいくつかの掘り下げを行いました、それが文字列でない場合、サーバーレスは自動的にスケジュールを無効にするようです。イベント全体が- schedule: rate(10 minutes)の場合、有効になります。ただし、他のプロパティがある場合は、デフォルトで無効になるため、有効にする必要があります。

したがって、現在の.ymlは次のようになります。

functions:   test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
        rate: rate(10 minutes)
        enabled: true
        input:
          key: value
      - schedule:
        rate: rate(10 minutes)
        input: '{"key": "value"}'
        enabled: true
      - schedule:
        rate: rate(10 minutes)
        input:
          key: 'value'
        enabled: true

Cloudwatchイベントルールと同じように、serverless.ymlファイルで同じinputinputPathを使用できます。 cloudwathルールとの唯一の違いは、実際にオブジェクトを渡すことができ、サーバーレスがそれを自動的に文字列化することです。

例:

functions:
  crawl:
    handler: crawl
    events:
      - schedule: 
          rate: rate(1 hours)
          input: 
            key1: value1
            key2: value2

これはinput:"{'key1':'value1','key2':'value2'}"を含むcloudformationイベントルールと同じであるため、一致したイベントの代わりにjsonを渡します。

質問が11月2日に行われたことに気づきました。当時は不可能でしたが、質問された直後に実装されました。 https://github.com/serverless/serverless/pull/2567

21
Erndob