aws / aws/aws-durable-execution-sdk-python

[Feature]: [Testing] Emulator should generate real-shaped durable execution ARNs (embed execution name)

Ouverte
#686 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement needs-triage pkg:testing
Langage dominant
Python
Étoiles
53
Forks
25
Merge moyen
1 j 19 h
PR mergées (30 j)
40

Description

### What would you like?

### Context

Reported downstream in [aws/aws-sam-cli#9200](https://github.com/aws/aws-sam-cli/issues/9200): a user who starts a local durable execution with `sam local invoke --durable-execution-name test` cannot correlate that name with anything afterwards — `sam local execution history/get` take an ARN, and the emulator's ARN contains no trace of the name.

### Current behavior

The emulator generates a placeholder ARN in `Execution.new()` ([execution.py](https://github.com/aws/aws-durable-execution-sdk-python/blob/main/packages/aws-durable-execution-sdk-python-testing/src/aws_durable_execution_sdk_python_testing/execution.py#L185)):

```python
# make a nicer arn
# Pattern: arn:(aws[a-zA-Z-]*)?:lambda:...:durable-execution:...
return Execution(
durable_execution_arn=str(uuid4()) + "/" + (input.invocation_id or str(uuid4())),
...
)
```

Two problems:

1. It doesn't match the real service ARN shape, so the execution name (and function name) appear nowhere in the identifier. Locally, `DurableExecutionName` is effectively write-only.
2. It conflates the second path segment with the *invocation* ID; the real ARN's last segment is a distinct execution ID.

(The comment's intended pattern is also stale — it predates the current public API shape.)

### Expected behavior

Generate ARNs matching the public `DurableExecutionArn` pattern from the Lambda service model:

```
arn:{partition}:lambda:{region}:{account}:function:{name}:{qualifier}/durable-execution/{execution-name}/{execution-id}
```

Everything needed is already on `StartDurableExecutionInput` (`account_id`, `function_name`, `function_qualifier`, `execution_name` are required fields). Region can be fixed to `us-east-1`, consistent with the hardcoded `FunctionArn` in `executor.py`'s `GetDurableExecution` response.

### Possible Implementation

- **Null/omitted execution name:** callers (e.g. SAM CLI) may send `"ExecutionName": null`. Generate a name (uuid) when absent — matches cloud behavior and also fixes `DurableExecutionName` being null in `GetDurableExecution` responses.
- **Execution ID:** use a fresh `uuid4()`, not `invocation_id`.
- **Routing is already safe:** `Route.from_string` splits on `/` before URL-decoding, so a percent-encoded ARN stays one segment — the same mechanism that handles today's one-slash placeholder. botocore percent-encodes `/` in non-greedy URI params.
- **Downstream (sam-cli) is already shape-agnostic** after aws/aws-sam-cli#9038 and aws/aws-sam-cli#9040 (`\S+` ARN regex, Flask `` routes).
- Store/runner treat the ARN as an opaque key; only tests asserting the placeholder shape need updating.

**Questions to resolve:**

- **Execution-name idempotency:** mimic cloud idempotency behaviour — in the service, starting a durable execution with an `ExecutionName` that matches an existing execution for the same function is an idempotent start (the existing execution/ARN is returned rather than a new one created). The emulator currently creates a duplicate with a distinct ARN sharing the same name segment. Confirm the exact service semantics (idempotency window, retention, input-mismatch handling) and implement to match.
- **Function name fidelity:** SAM CLI hardcodes `"FunctionName": "function"` in its start payload, so local ARNs would read `function:function:$LATEST/...`. Decide whether to pair this with a sam-cli change to pass the real logical ID so the ARN is actually informative.

### Blocked by

A new emulator image release is required for this to reach SAM CLI users (`:latest` on ECR is still v1.2.1, built 2026-05-20 from the pre-migration repo) — see #487.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans packages/aws-durable-execution-sdk-python-testing/src/aws_durable_execution_sdk_python_testing/execution.py, à Execution.new(), puis examinez la réponse GetDurableExecution de executor.py et Route.from_string. Mettez à jour les tests qui vérifient la forme de l'ARN d'espace réservé, et vérifiez que les ARN générés incluent la fonction requise, le qualifier, le nom de l'exécution et un nouvel ID d'exécution, tandis que les noms absents sont traités de manière cohérente.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
aws, python
Domaine
backend, testing
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.