Skip to content

Commit

Permalink
Remove faas.id
Browse files Browse the repository at this point in the history
As decided in the FAAS SIG.
It has an unhelpful, non-descript name. Duplicates data already found in other attributes. Not consistent across platforms.
Seems safer to remove prior to GA and re-add later if needed.
  • Loading branch information
tylerbenson committed Feb 8, 2023
1 parent 0dbea99 commit a2aa3bb
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 65 deletions.
24 changes: 1 addition & 23 deletions semantic_conventions/resource/faas.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,8 @@ groups:
can also be seen in the resource JSON for the function).
This means that a span attribute MUST be used, as an Azure function
app can host multiple functions that would usually share
a TracerProvider (see also the `faas.id` attribute).
examples: ['my-function', 'myazurefunctionapp/some-function-name']
- id: id
type: string
brief: >
The unique ID of the single function that this runtime instance executes.
note: |
On some cloud providers, it may not be possible to determine the full ID at startup,
so consider setting `faas.id` as a span attribute instead.
The exact value to use for `faas.id` depends on the cloud provider:
* **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
Take care not to use the "invoked ARN" directly but replace any
[alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)
with the resolved function version, as the same runtime instance may be invokable with
multiple different aliases.
* **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)
* **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id) of the invoked function,
*not* the function app, having the form
`/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`.
This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share
a TracerProvider.
examples: ['arn:aws:lambda:us-west-2:123456789012:function:my-function']
examples: ['my-function', 'myazurefunctionapp/some-function-name']
- id: version
type: string
brief: The immutable version of the function being executed.
Expand Down
1 change: 0 additions & 1 deletion semantic_conventions/trace/aws/lambda.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ groups:
brief: >
The full invoked ARN as provided on the `Context` passed to the function
(`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable).
note: This may be different from `faas.id` if an alias is involved.
examples: ['arn:aws:lambda:us-east-1:123456:function:myfunction:myalias']
30 changes: 6 additions & 24 deletions specification/resource/semantic_conventions/faas.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@ See also:
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
| `faas.name` | string | The name of the single function that this runtime instance executes. [1] | `my-function`; `myazurefunctionapp/some-function-name` | Required |
| `faas.id` | string | The unique ID of the single function that this runtime instance executes. [2] | `arn:aws:lambda:us-west-2:123456789012:function:my-function` | Recommended |
| `faas.version` | string | The immutable version of the function being executed. [3] | `26`; `pinkfroid-00002` | Recommended |
| `faas.instance` | string | The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version. [4] | `2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de` | Recommended |
| `faas.max_memory` | int | The amount of memory available to the serverless function in Bytes. [5] | `128000000` | Recommended |
| `faas.version` | string | The immutable version of the function being executed. [2] | `26`; `pinkfroid-00002` | Recommended |
| `faas.instance` | string | The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version. [3] | `2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de` | Recommended |
| `faas.max_memory` | int | The amount of memory available to the serverless function in Bytes. [4] | `128000000` | Recommended |

**[1]:** This is the name of the function as configured/deployed on the FaaS
platform and is usually different from the name of the callback
Expand All @@ -37,26 +36,9 @@ definition of function name MUST be used for this attribute
can also be seen in the resource JSON for the function).
This means that a span attribute MUST be used, as an Azure function
app can host multiple functions that would usually share
a TracerProvider (see also the `faas.id` attribute).

**[2]:** On some cloud providers, it may not be possible to determine the full ID at startup,
so consider setting `faas.id` as a span attribute instead.

The exact value to use for `faas.id` depends on the cloud provider:

* **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
Take care not to use the "invoked ARN" directly but replace any
[alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)
with the resolved function version, as the same runtime instance may be invokable with
multiple different aliases.
* **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)
* **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id) of the invoked function,
*not* the function app, having the form
`/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`.
This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share
a TracerProvider.

**[3]:** Depending on the cloud provider and platform, use:
**[2]:** Depending on the cloud provider and platform, use:

* **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)
(an integer represented as a decimal string).
Expand All @@ -66,9 +48,9 @@ The exact value to use for `faas.id` depends on the cloud provider:
[`K_REVISION` environment variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).
* **Azure Functions:** Not applicable. Do not set this attribute.

**[4]:** * **AWS Lambda:** Use the (full) log stream name.
**[3]:** * **AWS Lambda:** Use the (full) log stream name.

**[5]:** It's recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (multiplied by 1000000).
**[4]:** It's recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (multiplied by 1000000).
<!-- endsemconv -->

Note: The resource attribute `faas.instance` differs from the span attribute `faas.invocation_id`. For more information see the [Semantic conventions for FaaS spans](../../trace/semantic_conventions/faas.md#difference-between-invocation-and-instance).
Expand Down
3 changes: 1 addition & 2 deletions specification/trace/semantic_conventions/faas.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ FaaS environments some of the information required for resource
attributes is only readily available in the context of an invocation (e.g. as part of a "request context" argument)
and while a separate API call to look up the resource information is often possible, it
may be prohibitively expensive due to cold start duration concerns.
The `faas.id` and `cloud.account.id` attributes on AWS are some examples.
The `cloud.account.id` attribute on AWS is one example.
In principle, the above considerations apply to any resource attribute that fulfills the criteria above
(not being readily available without some extra effort that could be expensive).

Expand Down Expand Up @@ -233,6 +233,5 @@ This example shows the FaaS attributes for a (non-FaaS) process hosted on Google
| Span | `faas.invocation_id` | n/a | `"af9d5aa4-a685-4c5f-a22b-444f80b3cc28"` |
| Span | `faas.coldstart` | n/a | `true` |
| Resource | `faas.name` | n/a | `"my-lambda-function"` |
| Resource | `faas.id` | n/a | `"arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function"` |
| Resource | `faas.version` | n/a | `"semver:2.0.0"` |
| Resource | `faas.instance` | n/a | `"my-lambda-function:instance-0001"` |
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,15 @@ Lambda `Context`.
The following attributes SHOULD be set:

- [`faas.invocation_id`][faas] - The value of the AWS Request ID, which is always available through an accessor on the Lambda `Context`.
- [`faas.id`][faasres] - The value of the invocation ARN
for the function, which is always available through an accessor on the
Lambda `Context`, modified as follows: Discard all parts beyond the seventh (when split on `:`;
the seventh part is the function name) and append the [`faas.version`][faasres], separated by a colon.

Note that this is set as span attribute instead of resource attribute due to technical limitations
(account ID is not available at startup).
- [`cloud.account.id`][cloud] - In some languages, this is available as an accessor on the Lambda `Context`. Otherwise, it can be parsed from the value of `faas.id` as the fifth item when splitting on `:`
- [`cloud.account.id`][cloud] - In some languages, this is available as an accessor on the Lambda `Context`. Otherwise, it can be parsed from the ARN as the fifth item when splitting on `:`

Also consider setting other attributes of the [`faas` resource][faasres] and [trace][faas] conventions
and the [cloud resource conventions][cloud]. The following AWS Lambda-specific attribute MAY also be set:

<!-- semconv aws.lambda -->
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
| `aws.lambda.invoked_arn` | string | The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable). [1] | `arn:aws:lambda:us-east-1:123456:function:myfunction:myalias` | Recommended |

**[1]:** This may be different from `faas.id` if an alias is involved.
| `aws.lambda.invoked_arn` | string | The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable). | `arn:aws:lambda:us-east-1:123456:function:myfunction:myalias` | Recommended |
<!-- endsemconv -->

[faas]: ../faas.md (FaaS trace conventions)
Expand Down Expand Up @@ -173,7 +164,6 @@ Function F: | Span Function |
| SpanKind | `CLIENT` | `SERVER` |
| Status | `Ok` | `Ok` |
| `faas.invocation_id` | | `79104EXAMPLEB723` |
| `faas.id` | | `arn:aws:lambda:us-west-2:123456789012:function:my-function` |
| `faas.trigger` | | `http` |
| `cloud.account.id` | | `12345678912` |
| `net.peer.name` | `foo.execute-api.us-east-1.amazonaws.com` | |
Expand Down Expand Up @@ -255,7 +245,4 @@ AWS Lambda resource information is available as [environment variables][] provid
- [`faas.name`][faasres] MUST be set to the value of the `AWS_LAMBDA_FUNCTION_NAME` environment variable
- [`faas.version`][faasres] MUST be set to the value of the `AWS_LAMBDA_FUNCTION_VERSION` environment variable

Note that [`faas.id`][faasres] currently cannot be populated to resource
because it is not available until function invocation.

[environment variables]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime

0 comments on commit a2aa3bb

Please sign in to comment.