dagster-aws 0.28.0__tar.gz → 0.28.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. {dagster_aws-0.28.0/dagster_aws.egg-info → dagster_aws-0.28.2}/PKG-INFO +3 -4
  2. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/launcher.py +45 -5
  3. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/message_readers.py +2 -2
  4. dagster_aws-0.28.2/dagster_aws/version.py +1 -0
  5. {dagster_aws-0.28.0 → dagster_aws-0.28.2/dagster_aws.egg-info}/PKG-INFO +3 -4
  6. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws.egg-info/requires.txt +1 -1
  7. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/setup.py +2 -3
  8. dagster_aws-0.28.0/dagster_aws/version.py +0 -1
  9. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/LICENSE +0 -0
  10. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/MANIFEST.in +0 -0
  11. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/README.md +0 -0
  12. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/__init__.py +0 -0
  13. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/_stubs.py +0 -0
  14. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/athena/__init__.py +0 -0
  15. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/athena/resources.py +0 -0
  16. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/cloudwatch/__init__.py +0 -0
  17. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/cloudwatch/loggers.py +0 -0
  18. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecr/__init__.py +0 -0
  19. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecr/resources.py +0 -0
  20. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/__init__.py +0 -0
  21. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/container_context.py +0 -0
  22. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/executor.py +0 -0
  23. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/tasks.py +0 -0
  24. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/test_utils.py +0 -0
  25. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ecs/utils.py +0 -0
  26. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/__init__.py +0 -0
  27. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/configs.py +0 -0
  28. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/configs_spark.py +0 -0
  29. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/emr.py +0 -0
  30. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/emr_step_main.py +0 -0
  31. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/main.py.template +0 -0
  32. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/pyspark_step_launcher.py +0 -0
  33. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/types.py +0 -0
  34. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/emr/utils.py +0 -0
  35. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/__init__.py +0 -0
  36. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/__init__.py +0 -0
  37. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/ecs.py +0 -0
  38. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/emr.py +0 -0
  39. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/emr_containers.py +0 -0
  40. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/emr_serverless.py +0 -0
  41. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/glue.py +0 -0
  42. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/lambda_.py +0 -0
  43. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/clients/utils.py +0 -0
  44. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/pipes/context_injectors.py +0 -0
  45. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/py.typed +0 -0
  46. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/rds/__init__.py +0 -0
  47. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/rds/resources.py +0 -0
  48. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/redshift/__init__.py +0 -0
  49. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/redshift/resources.py +0 -0
  50. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/__init__.py +0 -0
  51. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/compute_log_manager.py +0 -0
  52. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/file_manager.py +0 -0
  53. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/io_manager.py +0 -0
  54. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/ops.py +0 -0
  55. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/resources.py +0 -0
  56. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/s3_fake_resource.py +0 -0
  57. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/sensor.py +0 -0
  58. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/s3/utils.py +0 -0
  59. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/secretsmanager/__init__.py +0 -0
  60. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/secretsmanager/resources.py +0 -0
  61. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/secretsmanager/secrets.py +0 -0
  62. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ssm/__init__.py +0 -0
  63. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ssm/parameters.py +0 -0
  64. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/ssm/resources.py +0 -0
  65. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/utils/__init__.py +0 -0
  66. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/utils/mrjob/__init__.py +0 -0
  67. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/utils/mrjob/log4j.py +0 -0
  68. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/utils/mrjob/retry.py +0 -0
  69. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws/utils/mrjob/utils.py +0 -0
  70. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws.egg-info/SOURCES.txt +0 -0
  71. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws.egg-info/dependency_links.txt +0 -0
  72. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws.egg-info/not-zip-safe +0 -0
  73. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/dagster_aws.egg-info/top_level.txt +0 -0
  74. {dagster_aws-0.28.0 → dagster_aws-0.28.2}/setup.cfg +0 -0
@@ -1,22 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-aws
3
- Version: 0.28.0
3
+ Version: 0.28.2
4
4
  Summary: Package for AWS-specific Dagster framework solid and resource components.
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-aws
6
6
  Author: Dagster Labs
7
7
  Author-email: hello@dagsterlabs.com
8
8
  License: Apache-2.0
9
- Classifier: Programming Language :: Python :: 3.9
10
9
  Classifier: Programming Language :: Python :: 3.10
11
10
  Classifier: Programming Language :: Python :: 3.11
12
11
  Classifier: Programming Language :: Python :: 3.12
13
12
  Classifier: Programming Language :: Python :: 3.13
14
13
  Classifier: License :: OSI Approved :: Apache Software License
15
14
  Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.9,<3.14
15
+ Requires-Python: >=3.10,<3.14
17
16
  License-File: LICENSE
18
17
  Requires-Dist: boto3
19
- Requires-Dist: dagster==1.12.0
18
+ Requires-Dist: dagster==1.12.2
20
19
  Requires-Dist: packaging
21
20
  Requires-Dist: requests
22
21
  Provides-Extra: redshift
@@ -5,7 +5,7 @@ import uuid
5
5
  import warnings
6
6
  from collections import namedtuple
7
7
  from collections.abc import Mapping, Sequence
8
- from typing import Any, Optional
8
+ from typing import TYPE_CHECKING, Any, Optional
9
9
 
10
10
  import boto3
11
11
  from botocore.exceptions import ClientError
@@ -30,11 +30,12 @@ from dagster._core.launcher.base import (
30
30
  WorkerStatus,
31
31
  )
32
32
  from dagster._core.storage.dagster_run import DagsterRun
33
- from dagster._core.storage.tags import RUN_WORKER_ID_TAG
33
+ from dagster._core.storage.tags import HIDDEN_TAG_PREFIX, RUN_WORKER_ID_TAG
34
34
  from dagster._grpc.types import ExecuteRunArgs
35
35
  from dagster._serdes import ConfigurableClass
36
36
  from dagster._serdes.config_class import ConfigurableClassData
37
37
  from dagster._utils.backoff import backoff
38
+ from dagster._utils.tags import get_boolean_tag_value
38
39
  from typing_extensions import Self
39
40
 
40
41
  from dagster_aws.ecs.container_context import (
@@ -81,6 +82,9 @@ TAGS_TO_EXCLUDE_FROM_PROPAGATION = {"dagster/op_selection", "dagster/solid_selec
81
82
  DEFAULT_REGISTER_TASK_DEFINITION_RETRIES = 5
82
83
  DEFAULT_RUN_TASK_RETRIES = 5
83
84
 
85
+ if TYPE_CHECKING:
86
+ from botocore.config import Config
87
+
84
88
 
85
89
  class EcsRunLauncher(RunLauncher[T_DagsterInstance], ConfigurableClass):
86
90
  """RunLauncher that starts a task in ECS for each Dagster job run.
@@ -119,10 +123,13 @@ class EcsRunLauncher(RunLauncher[T_DagsterInstance], ConfigurableClass):
119
123
  task_definition_prefix: str = "run",
120
124
  ):
121
125
  self._inst_data = inst_data
122
- self.ecs = boto3.client("ecs")
126
+
127
+ boto_client_config = self.get_boto_client_config()
128
+
129
+ self.ecs = boto3.client("ecs", config=boto_client_config)
123
130
  self.ec2 = boto3.resource("ec2")
124
- self.secrets_manager = boto3.client("secretsmanager")
125
- self.logs = boto3.client("logs")
131
+ self.secrets_manager = boto3.client("secretsmanager", config=boto_client_config)
132
+ self.logs = boto3.client("logs", config=boto_client_config)
126
133
 
127
134
  self._task_definition_prefix = task_definition_prefix
128
135
 
@@ -236,6 +243,9 @@ class EcsRunLauncher(RunLauncher[T_DagsterInstance], ConfigurableClass):
236
243
  self._current_task_metadata = None
237
244
  self._current_task = None
238
245
 
246
+ def get_boto_client_config(self) -> Optional["Config"]:
247
+ return None
248
+
239
249
  @property
240
250
  def inst_data(self):
241
251
  return self._inst_data
@@ -855,6 +865,28 @@ class EcsRunLauncher(RunLauncher[T_DagsterInstance], ConfigurableClass):
855
865
  task.get("stoppedReason", "")
856
866
  )
857
867
 
868
+ def _add_eni_id_tags(self, run: DagsterRun, task: dict[str, Any]):
869
+ attachments = task.get("attachments", [])
870
+ eni_ids = {}
871
+ eni_count = 0
872
+ for attachment in attachments:
873
+ if attachment.get("type") == "ElasticNetworkInterface":
874
+ details = {d["name"]: d["value"] for d in attachment.get("details", [])}
875
+
876
+ if "networkInterfaceId" in details:
877
+ if eni_count == 0:
878
+ eni_ids[f"{HIDDEN_TAG_PREFIX}eni_id"] = details["networkInterfaceId"]
879
+ else:
880
+ eni_ids[f"{HIDDEN_TAG_PREFIX}eni_id_{eni_count}"] = details[
881
+ "networkInterfaceId"
882
+ ]
883
+ eni_count += 1
884
+ self._instance.add_run_tags(run.run_id, eni_ids)
885
+ if eni_count > 0:
886
+ logging.info(f"Added {eni_count} ENI ID tags for run {run.run_id}: {eni_ids}")
887
+ else:
888
+ logging.warning(f"No ENI IDs found for run {run.run_id}")
889
+
858
890
  def check_run_worker_health(self, run: DagsterRun):
859
891
  run_worker_id = run.tags.get(RUN_WORKER_ID_TAG)
860
892
 
@@ -870,6 +902,14 @@ class EcsRunLauncher(RunLauncher[T_DagsterInstance], ConfigurableClass):
870
902
 
871
903
  t = tasks[0]
872
904
 
905
+ if get_boolean_tag_value(os.getenv("DAGSTER_AWS_ENI_TAGGING_ENABLED")) and not run.tags.get(
906
+ f"{HIDDEN_TAG_PREFIX}eni_id"
907
+ ):
908
+ try:
909
+ self._add_eni_id_tags(run, t)
910
+ except Exception:
911
+ logging.exception(f"Error adding ENI ID tags for run {run.run_id}")
912
+
873
913
  if t.get("lastStatus") in RUNNING_STATUSES:
874
914
  return CheckRunHealthResult(WorkerStatus.RUNNING, run_worker_id=run_worker_id)
875
915
  elif t.get("lastStatus") in STOPPED_STATUSES:
@@ -4,11 +4,11 @@ import os
4
4
  import random
5
5
  import string
6
6
  import sys
7
- from collections.abc import Generator, Iterator, Sequence
7
+ from collections.abc import Callable, Generator, Iterator, Sequence
8
8
  from contextlib import contextmanager
9
9
  from datetime import datetime
10
10
  from threading import Event, Thread
11
- from typing import IO, TYPE_CHECKING, Any, Callable, Optional, cast
11
+ from typing import IO, TYPE_CHECKING, Any, Optional, cast
12
12
 
13
13
  import boto3
14
14
  import dagster._check as check
@@ -0,0 +1 @@
1
+ __version__ = "0.28.2"
@@ -1,22 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-aws
3
- Version: 0.28.0
3
+ Version: 0.28.2
4
4
  Summary: Package for AWS-specific Dagster framework solid and resource components.
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-aws
6
6
  Author: Dagster Labs
7
7
  Author-email: hello@dagsterlabs.com
8
8
  License: Apache-2.0
9
- Classifier: Programming Language :: Python :: 3.9
10
9
  Classifier: Programming Language :: Python :: 3.10
11
10
  Classifier: Programming Language :: Python :: 3.11
12
11
  Classifier: Programming Language :: Python :: 3.12
13
12
  Classifier: Programming Language :: Python :: 3.13
14
13
  Classifier: License :: OSI Approved :: Apache Software License
15
14
  Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.9,<3.14
15
+ Requires-Python: >=3.10,<3.14
17
16
  License-File: LICENSE
18
17
  Requires-Dist: boto3
19
- Requires-Dist: dagster==1.12.0
18
+ Requires-Dist: dagster==1.12.2
20
19
  Requires-Dist: packaging
21
20
  Requires-Dist: requests
22
21
  Provides-Extra: redshift
@@ -1,5 +1,5 @@
1
1
  boto3
2
- dagster==1.12.0
2
+ dagster==1.12.2
3
3
  packaging
4
4
  requests
5
5
 
@@ -23,7 +23,6 @@ setup(
23
23
  description="Package for AWS-specific Dagster framework solid and resource components.",
24
24
  url="https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-aws",
25
25
  classifiers=[
26
- "Programming Language :: Python :: 3.9",
27
26
  "Programming Language :: Python :: 3.10",
28
27
  "Programming Language :: Python :: 3.11",
29
28
  "Programming Language :: Python :: 3.12",
@@ -33,10 +32,10 @@ setup(
33
32
  ],
34
33
  packages=find_packages(exclude=["dagster_aws_tests*"]),
35
34
  include_package_data=True,
36
- python_requires=">=3.9,<3.14",
35
+ python_requires=">=3.10,<3.14",
37
36
  install_requires=[
38
37
  "boto3",
39
- "dagster==1.12.0",
38
+ "dagster==1.12.2",
40
39
  "packaging",
41
40
  "requests",
42
41
  ],
@@ -1 +0,0 @@
1
- __version__ = "0.28.0"
File without changes
File without changes
File without changes
File without changes