groups:
  - id: faas_span
    prefix: faas
    type: span
    brief: >
        This semantic convention describes an instance of a function that
        runs without provisioning or managing of servers (also known as
        serverless functions or Function as a Service (FaaS)) with spans.
    attributes:
      - ref: faas.trigger
        note: |
          For the server/consumer span on the incoming side,
          `faas.trigger` MUST be set.

          Clients invoking FaaS instances usually cannot set `faas.trigger`,
          since they would typically need to look in the payload to determine
          the event type. If clients set it, it should be the same as the
          trigger that corresponding incoming would have (i.e., this has
          nothing to do with the underlying transport used to make the API
          call to invoke the lambda, which is often HTTP).
      - ref: faas.invocation_id
      - ref: cloud.resource_id

  - id: faas_span.datasource
    prefix: faas.document
    type: span
    brief: >
      Semantic Convention for FaaS triggered as a response to some data
      source operation such as a database or filesystem read/write.
    attributes:
      - ref: faas.document.collection
        requirement_level: required
      - ref: faas.document.operation
        requirement_level: required
      - ref: faas.document.time
      - ref: faas.document.name

  - id: faas_span.http
    type: span
    brief: >
      Semantic Convention for FaaS triggered as a response to some data
      source operation such as a database or filesystem read/write.

  - id: faas_span.pubsub
    type: span
    brief: >
      Semantic Convention for FaaS set to be executed when messages are
      sent to a messaging system.

  - id: faas_span.timer
    prefix: faas
    type: span
    brief: >
      Semantic Convention for FaaS scheduled to be executed regularly.
    attributes:
      - ref: faas.time
      - ref: faas.cron

  - id: faas_span.in
    span_kind: server
    prefix: faas
    type: span
    brief: >
      Contains additional attributes for incoming FaaS spans.
    attributes:
      - ref: faas.coldstart
      - ref: faas.trigger
        requirement_level: required
        note: |
          For the server/consumer span on the incoming side,
          `faas.trigger` MUST be set.

          Clients invoking FaaS instances usually cannot set `faas.trigger`,
          since they would typically need to look in the payload to determine
          the event type. If clients set it, it should be the same as the
          trigger that corresponding incoming would have (i.e., this has
          nothing to do with the underlying transport used to make the API
          call to invoke the lambda, which is often HTTP).

  - id: faas_span.out
    span_kind: client
    prefix: faas
    type: span
    brief: >
      Contains additional attributes for outgoing FaaS spans.
    attributes:
      - ref: faas.invoked_name
        requirement_level: required
      - ref: faas.invoked_provider
        requirement_level: required
      - ref: faas.invoked_region
        requirement_level:
          conditionally_required: >
            For some cloud providers, like AWS or GCP, the region in which a
            function is hosted is essential to uniquely identify the function
            and also part of its endpoint. Since it's part of the endpoint
            being called, the region is always known to clients. In these cases,
            `faas.invoked_region` MUST be set accordingly. If the region is
            unknown to the client or not required for identifying the invoked
            function, setting `faas.invoked_region` is optional.
