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

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

Đang mở
#686 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement needs-triage pkg:testing
Ngôn ngữ chính
Python
Star
53
Fork
25
Merge trung bình
1 ngày 19 giờ
Pull request đã merge (30 ngày)
40

Mô tả

### 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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu trong packages/aws-durable-execution-sdk-python-testing/src/aws_durable_execution_sdk_python_testing/execution.py tại Execution.new(), sau đó kiểm tra phản hồi GetDurableExecution của executor.py và Route.from_string. Cập nhật các test kiểm tra dạng ARN placeholder, đồng thời xác minh rằng các ARN được tạo bao gồm function bắt buộc, qualifier, execution name và execution ID mới, trong khi các tên bị thiếu được xử lý nhất quán.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
aws, python
Lĩnh vực
backend, testing
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
48/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.