aws / aws/aws-sam-cli

Bug: SAM Conditional Globals Environment Variables maps fail to merge with Function environment variables

Offen
#8,167 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
maintainer/need-response stage/needs-triage
Vorherrschende Sprache
Python
Sterne
6.7k
Forks
1.2k
Ø Merge
1 T. 10 Std.
Gemergte PRs (30 T.)
52

Beschreibung

### Description:
Defect where conditional Global environment variables fail to merge properly to Function.
[This example demonstrates a defect in AWS SAM where conditional environment variables defined in the `Globals.Function.Environment.Variables` section using `!If` statements do not properly merge into individual `AWS::Serverless::Function` resources that have their own `Environment.Variables` section.](https://github.com/prower-turnitin/sam-conditional-globals-example/tree/main#)

### Steps to reproduce:

Deploy the linked https://github.com/prower-turnitin/sam-conditional-globals-example/tree/main# SAM App.
You'll see function2 does not merge Global Environment as described : https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy-globals.html

### Observed result:

When conditional statements (`!If`) are used in the Globals section, the conditional environment variables are **NOT** merged into functions that have their own Environment.Variables section.

### Expected result:

According to AWS SAM documentation, global environment variables should merge with function-specific environment variables, with function-specific variables taking precedence when there are conflicts.

### Function1 (No function-specific environment variables)
✅ **WORKS CORRECTLY** - Receives all conditional global variables:
```json
{
"LOG_LEVEL": "INFO",
"log_level": "INFO",
"OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED": "false",
"OTEL_SERVICE_NAME": "sam-conditional-example-dev"
}
```

### Function2 (Has function-specific environment variables)
❌ **DEFECT DEMONSTRATED** - Missing conditional global variables:
```json
{
"LOG_LEVEL": "DEBUG", // Function-specific override (correct)
"FUNCTION_SPECIFIC_VAR": "function2-value", // Function-specific (correct)
"CUSTOM_CONFIG": "enabled" // Function-specific (correct)
// MISSING: OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED
// MISSING: OTEL_SERVICE_NAME
// MISSING: log_level
}
```

### Additional environment details (Ex: Windows, Mac, Amazon Linux etc)

1. OS: Darwin NOA-M-JW3FNV5R6Y 24.5.0 Darwin Kernel Version 24.5.0: Tue Apr 22 19:53:27 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T6041 arm64

2. `sam --version`: SAM CLI, version 1.137.1
3. AWS region: us-east-2

```
# Paste the output of `sam --info` here
{
"version": "1.137.1",
"system": {
"python": "3.11.10",
"os": "macOS-15.5-arm64-arm-64bit"
},
"additional_dependencies": {
"docker_engine": "Not available",
"aws_cdk": "Not available",
"terraform": "1.5.7"
},
"available_beta_feature_env_vars": [
"SAM_CLI_BETA_FEATURES",
"SAM_CLI_BETA_BUILD_PERFORMANCE",
"SAM_CLI_BETA_TERRAFORM_SUPPORT",
"SAM_CLI_BETA_PACKAGE_PERFORMANCE",
"SAM_CLI_BETA_RUST_CARGO_LAMBDA"
]
}

```

`Add --debug flag to command you are running`

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der verlinkten sam-conditional-globals-example-SAM-Anwendung und reproduziere die Bereitstellung mit SAM CLI 1.137.1. Vergleiche Function1 und Function2 mit der Dokumentation zum Zusammenführen globaler Variablen von AWS SAM; abgeschlossen ist die Aufgabe, wenn Function2 seine funktionsspezifischen Überschreibungen beibehält und gleichzeitig die bedingten globalen Variablen erhält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
aws, python
Bereich
cloud
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.