> [!META]- Inline Metadata
> [status:: boat]
> [source:: ]
> [tags:: #note/evergreen #state/boat #concepts/aws/sagemaker]
> [up:: [[Sagemaker MOC]]]
```python
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/function/awslambdaric/__main__.py", line 25, in <module>
main(sys.argv)
File "/function/awslambdaric/__main__.py", line 19, in main
lambda_runtime_api_addr = os.environ["AWS_LAMBDA_RUNTIME_API"]
File "/usr/lib/python3.8/os.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'AWS_LAMBDA_RUNTIME_API'
```
~~My suspicion is that the our internal package requires `os` as a dependency to open a file, and that causes some kind of clash with AWS.~~
But it gets weirder!
The dependency's `Constants` module has an import os that works just fine!
BUT it uses this to get the assets path:
```python
os.path.join(os.path.dirname(os.path.abspath(__file__)), "assets")
```
When I look at the logs, guess what this resolves to? The Lambda code directory (`/functions`) not the Sagemaker one (`/opt/ml/code`), even though my Dockerfile specifies the Sagemaker CODE_DIR.
## Update [[2023-05-24 Daily Note|2023-05-24]]
This came up again while testing some new changes that didn't change imports. I deployed the full pipeline with a `push_all` alias I made that calls all the aliases for each individual stage in the dockerfile which represents each part of the pipeline. I redeployed the Sagemaker stage individually (with a whitespace code change to force a rebuild) and the problem went away. I don't know why this is happening, or why LambdaRIC is being referenced at all in Sagemaker - it's not used or referenced at all in the TRAIN stage.