Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
499d743
setup nsidc-cumulus-prod stack sit (#4140)
jennyhliu Dec 5, 2025
f4d5b67
Merge branch 'master' into feature/opex
jennyhliu Dec 8, 2025
98b5ac9
CUMULUS-4438: Make min and max capacities of RDS configurable in rds-…
ygliuvt Dec 9, 2025
1cdcc4b
CUMULUS-4408: update nsidc-cumulus-prod stack with cloudfront urls (#…
jennyhliu Dec 10, 2025
9b06cdc
Cumulus 4370 - Add OpenTelemetry instrumentation to API code and enab…
indiejames Dec 15, 2025
4a38c8b
Add operators to archive_api_users of nsidc-cumulus-prod stack (#4174)
jennyhliu Dec 16, 2025
8275f9d
CUMULUS-4370: Enable otel (#4180)
indiejames Dec 16, 2025
58e6439
add more operator to api user
jennyhliu Dec 18, 2025
6473557
Merge branch 'master' into feature/opex
jennyhliu Dec 19, 2025
0878a01
add api users
jennyhliu Dec 19, 2025
da27fa2
Update nsidc-cumulus-prod.tfvars
jennyhliu Dec 19, 2025
c184773
Merge branch 'master' into feature/opex
jennyhliu Jan 5, 2026
ae34c93
update cumulus_distribution oauth_provider to earthdata for feature b…
jennyhliu Jan 5, 2026
b46487c
update cumulus_distribution oauth_provider to earthdata for feature b…
jennyhliu Jan 5, 2026
3ad5540
add more api users
jennyhliu Jan 8, 2026
46c81d2
Merge branch 'master' into feature/opex
jennyhliu Jan 15, 2026
7b9078d
Merge branch 'master' into feature/opex
jennyhliu Jan 22, 2026
b3e423e
Update nsidc-cumulus-prod.tfvars
jennyhliu Jan 22, 2026
c0ceeba
Update nsidc-cumulus-prod.tfvars
jennyhliu Jan 22, 2026
5caf8a5
Merge branch 'master' into feature/opex
jennyhliu Jan 27, 2026
df17d1e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 27, 2026
4cefe68
update api package test coverge for ci
jennyhliu Jan 28, 2026
f1698e4
feat: add workflow
mckadesorensen Jan 22, 2026
1e72f61
clean up
mckadesorensen Jan 22, 2026
048b2f2
clean up: rename from workflows to workflow
mckadesorensen Jan 28, 2026
2dfeed7
Merge pull request #4226 from nasa/dms/opex/workflow
mckadesorensen Jan 30, 2026
b4417d4
Merge branch 'master' into feature/opex
jennyhliu Jan 31, 2026
703a8f1
feat: add opex workflow buckets
mckadesorensen Feb 3, 2026
016b946
Merge pull request #4242 from nasa/dms/feat/add-opex-wf-buckets
mckadesorensen Feb 3, 2026
a9990ec
feat: add opex workflow buckets
mckadesorensen Feb 3, 2026
f94e6b3
Merge pull request #4243 from nasa/dms/add/e2e-bucket
mckadesorensen Feb 3, 2026
d033bef
Update nsidc-cumulus-prod.tfvars user
jennyhliu Feb 12, 2026
d07a739
Merge branch 'master' into feature/opex
jennyhliu Feb 12, 2026
eee173a
Update nsidc-cumulus-prod.tfvars
jennyhliu Feb 25, 2026
02e69c5
Merge branch 'master' into feature/opex
jennyhliu Feb 25, 2026
4f0049e
Update nsidc-cumulus-prod.tfvars
jennyhliu Feb 27, 2026
e928a7a
Merge branch 'master' into feature/opex
charleshuang80 Mar 18, 2026
bfae5cb
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Mar 18, 2026
2d861fd
fix issues from merge conflict (#4315)
charleshuang80 Mar 18, 2026
04429f5
Merge branch 'master' into feature/opex
jennyhliu Mar 24, 2026
893817b
fix merge from master error remove OpenTelemetry token endpoint
jennyhliu Mar 24, 2026
ede242d
Merge branch 'master' into feature/opex
jennyhliu Apr 21, 2026
290a9bc
remove OpenTelemetry from feature branch
jennyhliu Apr 21, 2026
90852be
remove more otel
jennyhliu Apr 21, 2026
41104ec
remove more otel
jennyhliu Apr 21, 2026
56b23d2
Add iceberg configuration for nsidc-cumulus-prod deployment stack in …
ygliuvt Apr 22, 2026
fa67446
Merge branch 'master' of https://github.com/nasa/cumulus into feature…
ygliuvt Apr 23, 2026
0747fcd
Update task memory and cpu configuration for nsidc-cumulus-prod deplo…
ygliuvt Apr 23, 2026
03cc540
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 23, 2026
c5c24e9
Merge branch 'master' of https://github.com/nasa/cumulus into feature…
ygliuvt May 1, 2026
88371d2
Merge branch 'master' into feature/opex
jennyhliu May 6, 2026
bb63a25
Merge branch 'master' into feature/opex
jennyhliu May 6, 2026
43e9157
Update terraform configuration for nsidc-cumulus-prod stack
ygliuvt May 7, 2026
fc4b113
Merge branch 'master' into feature/opex
jennyhliu May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,11 @@ Please complete the following steps before upgrading Cumulus.

### Added

- **CUMULUS-4370**
- The `tf-modules/cumulus` module now supports enabling OpenTelemetry and AWS X-Ray tracing.
By setting `enable_otel_tracing` to `true` the code in the `archive` API will generate and
send telemetry to AWS X-Ray. Most of the endpoints have been instrumented.
- Note the functionalities are removed from feature branch 04/21/2026
- **CUMULUS-4300**
- Added a new rate-limited consumer class in the Node/TypeScript code to control how many executions are submitted per second across multiple queues - helping improve and smooth out step function submission.
- Created a new ConsumerRateLimited class that is able to submit executions at a specified, even maximum rate as defined by rateLimitPerSecond. In order to enforce this limit across all throttled queues, this class accepts a list of queue URLs instead of a single throttled queue URL. Unlike its non-rate-limited counterpart, to simplify configuration, this new class does not limit the number of messages staged - that can now be indirectly controlled by increasing or decreasing the rate.
Expand Down
5 changes: 5 additions & 0 deletions example/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ cumulus-lp:
apiUsername: jasmine
pdrNodeNameProviderBucket: cumulus-sit-pdr-node-name-provider

nsidc-cumulus-prod:
bucket: opex-nsidc-cumulus-internal
apiUsername: jasmine
pdrNodeNameProviderBucket: cumulus-sit-pdr-node-name-provider

atisdale:
bucket: atisdale-internal

Expand Down
13 changes: 9 additions & 4 deletions example/cumulus-tf/cumulus_distribution.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,15 @@ module "cumulus_distribution" {
cmr_environment = var.cmr_environment
cmr_provider = var.cmr_provider
lambda_subnet_ids = local.subnet_ids
oauth_client_id = var.csdap_client_id
oauth_client_password = var.csdap_client_password
oauth_host_url = var.csdap_host_url
oauth_provider = "cognito"
# TODO CHANGE for feature branch only
#oauth_client_id = var.csdap_client_id
#oauth_client_password = var.csdap_client_password
#oauth_host_url = var.csdap_host_url
#oauth_provider = "cognito"
oauth_client_id = var.urs_client_id
oauth_client_password = var.urs_client_password
oauth_host_url = "https://uat.urs.earthdata.nasa.gov"
oauth_provider = "earthdata"
permissions_boundary_arn = var.permissions_boundary_arn
buckets = var.buckets
sts_credentials_lambda_function_arn = data.aws_lambda_function.sts_credentials.arn
Expand Down
98 changes: 98 additions & 0 deletions example/deployments/cumulus/nsidc-cumulus-prod.tfvars
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
prefix = "nsidc-cumulus-prod"
buckets = {
internal = {
name = "opex-nsidc-cumulus-internal"
type = "internal"
},
private = {
name = "opex-nsidc-cumulus-private"
type = "private"
},
protected = {
name = "opex-nsidc-cumulus-protected"
type = "protected"
},
public = {
name = "opex-nsidc-cumulus-public"
type = "public"
},
protected-2 = {
name = "opex-nsidc-cumulus-protected-2"
type = "protected"
},
glacier = {
name = "opex-nsidc-cumulus-orca-glacier"
type = "orca"
},
dashboard = {
name = "opex-nsidc-cumulus-dashboard"
type = "dashboard"
},
opera-products = {
name = "opex-nsidc-cumulus-opera-products"
type = "protected"
},
opera-staging = {
name = "opex-nsidc-cumulus-opera-staging"
type = "workflow"
}
opex-e2e = {
name = "opex-e2e-test-bucket"
type = "workflow"
}
}
system_bucket = "opex-nsidc-cumulus-internal"
api_reserved_concurrency = 14
archive_api_users = [
"acyu",
"awisdom",
"bhazuka",
"cbanh",
"chuang14",
"cdurbin",
"dhudelson",
"dmsorensen",
"ecarton",
"jasmine",
"jennyhliu",
"jmccoy_uat",
"jnorton1",
"kkelly",
"kovarik",
"mobrien84",
"nnageswa",
"npauzenga",
"ppilone",
"terrafirma13",
"yliu10",
"alexrad71",
"avluu",
"beaucwong",
"bishop_ross",
"ckhoward",
"crumlyd",
"hgrams",
"jdcarlso",
"kjohnson_32",
"macrouch",
"marin",
"mdcampbell",
"nathawat",
"ppiatko",
"richard.l.clark",
"sflynn",
"tbmcknig",
"viviant",
"ymchen",
"zhang5218",
"zhutchison"
]
archive_api_url = "https://d3cuh567loctll.cloudfront.net/"
cumulus_distribution_url = "https://djidssf1tx775.cloudfront.net/"

deploy_iceberg_api = true
iceberg_s3_bucket = "cdd-test-iceberg"
iceberg_namespace = "cdd_deploy"
iceberg_api_memory = 16384
iceberg_api_cpu = 4096
iceberg_health_check_grace_period_seconds = 600
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
prefix = "nsidc-cumulus-prod"
dbRecreation = false
65 changes: 65 additions & 0 deletions tf-modules/opex-workflow/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# ----------------------------
# Variables
# ----------------------------
DIST_DIR ?= dist
OPERA_DIR := $(DIST_DIR)/opera

PYTHON := python3
PIP := pip3

# Source directories
BASE_DEP_SRC := base_dependency_layer
LAMBDA_SRC := lambdas

# Build directories
BASE_DEP_BUILD := $(OPERA_DIR)/base_dependency_layer
OPERA_DEP_BUILD := $(OPERA_DIR)/opera_dependency_layer
LAMBDA_BUILD := $(OPERA_DIR)/opera_lambdas

# Zip outputs (must match Terraform)
BASE_DEP_ZIP := $(OPERA_DIR)/base_dependency_layer.zip
OPERA_DEP_ZIP := $(OPERA_DIR)/opera_dependency_layer.zip
LAMBDA_ZIP := $(OPERA_DIR)/opera_lambdas.zip

.PHONY: all build base deps lambdas clean

# ----------------------------
# Top-level
# ----------------------------
all: build

build: base deps lambdas

# ----------------------------
# Base dependency layer
# ----------------------------
base:
rm -rf $(BASE_DEP_BUILD)
mkdir -p $(BASE_DEP_BUILD)
cp -R $(BASE_DEP_SRC)/python $(BASE_DEP_BUILD)/python
cd $(BASE_DEP_BUILD) && zip -r ../base_dependency_layer.zip .


# ----------------------------
# Opera dependency layer
# ----------------------------
deps:
rm -rf $(OPERA_DEP_BUILD)
mkdir -p $(OPERA_DEP_BUILD)/python
$(PIP) install -r lambdas/opera_dependency_layer/python/requirements.txt -t $(OPERA_DEP_BUILD)/python
cd $(OPERA_DEP_BUILD) && zip -r ../opera_dependency_layer.zip .

# ----------------------------
# Lambda code
# ----------------------------
lambdas:
rm -rf $(LAMBDA_BUILD)
mkdir -p $(LAMBDA_BUILD)
cp -R $(LAMBDA_SRC)/opera_lambdas/* $(LAMBDA_BUILD)/
cd $(LAMBDA_BUILD) && zip -r ../opera_lambdas.zip .

# ----------------------------
# Cleanup
# ----------------------------
clean:
rm -rf $(DIST_DIR)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
boto3
# A very small range of versions of botocore is required by aiobotocore, and it
# is always slightly behind the latest botocore release. We will need to
# occasionally bump this by hand to allow later versions of aiobotocore to be
# pulled in.
botocore<=1.39.11
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# This file was autogenerated by uv via the following command:
# uv pip compile --cache-dir dist/.pip-cache/ --output-file workflows/opera/lambdas/base_dependency_layer/python/requirements.txt workflows/opera/lambdas/base_dependency_layer/python/requirements.in
boto3==1.39.11
# via -r workflows/opera/lambdas/base_dependency_layer/python/requirements.in
botocore==1.39.11
# via
# -r workflows/opera/lambdas/base_dependency_layer/python/requirements.in
# boto3
# s3transfer
jmespath==1.0.1
# via
# boto3
# botocore
python-dateutil==2.9.0.post0
# via botocore
s3transfer==0.13.1
# via boto3
six==1.17.0
# via python-dateutil
urllib3==2.5.0
# via botocore
22 changes: 22 additions & 0 deletions tf-modules/opex-workflow/collections/CSLC_S1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "OPERA_L2_CSLC-S1_V1",
"version": "1",
"duplicateHandling": "replace",
"process": "CSLC",
"url_path": "OPERA_L2_CSLC-S1/{granule.granuleId}/",
"granuleId": "^OPERA_L2_CSLC-S1_.*\\d{8}T\\d{6}Z_\\d{8}T\\d{6}Z_S1[A-Z]_(VV|VH|HH|HV)_v\\d\\.\\d$",
"granuleIdExtraction": "(OPERA_L2_CSLC-S1.*)(\\.h5)",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0.h5",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L2_CSLC-S1_(?!.*BROWSE).*",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0.h5"
},
{
"bucket": "opera-browse",
"regex": "^OPERA_L2_CSLC-S1.*_BROWSE.*",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0_BROWSE.png"
}
]
}
22 changes: 22 additions & 0 deletions tf-modules/opex-workflow/collections/CSLC_S1_CALVAL.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "OPERA_L2_CSLC-S1_CALVAL_V1",
"version": "1.0",
"duplicateHandling": "replace",
"process": "CSLC",
"url_path": "OPERA_L2_CSLC-S1_CALVAL/{granule.granuleId}/",
"granuleId": "^OPERA_L2_CSLC-S1_.*\\d{8}T\\d{6}Z_\\d{8}T\\d{6}Z_S1[A-Z]_(VV|VH|HH|HV)_v\\d\\.\\d$",
"granuleIdExtraction": "(OPERA_L2_CSLC-S1.*)(\\.h5)",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0.h5",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L2_CSLC-S1_(?!.*BROWSE).*",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0.h5"
},
{
"bucket": "opera-browse",
"regex": "^OPERA_L2_CSLC-S1.*_BROWSE.*",
"sampleFileName": "OPERA_L2_CSLC-S1_T078-165495-IW3_20190906T232711Z_20230101T100506Z_S1A_VV_v1.0_BROWSE.png"
}
]
}
17 changes: 17 additions & 0 deletions tf-modules/opex-workflow/collections/CSLC_S1_STATIC.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "OPERA_L2_CSLC-S1-STATIC_V1",
"version": "1.0",
"duplicateHandling": "replace",
"process": "CSLC-STATIC",
"url_path": "OPERA_L2_CSLC-S1_STATIC/{granule.granuleId}/",
"granuleId": "^OPERA_L2_CSLC-S1-STATIC_.*_\\d{8}_S1[A-Z]_v\\d\\.\\d$",
"granuleIdExtraction": "(OPERA_L2_CSLC-S1.*)(\\.h5)",
"sampleFileName": "OPERA_L2_CSLC-S1-STATIC_T064-135518-IW1_20140101_S1A_v1.0.h5",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L2_CSLC-S1.*$",
"sampleFileName": "OPERA_L2_CSLC-S1-STATIC_T064-135518-IW1_20140101_S1A_v1.0.h5"
}
]
}
17 changes: 17 additions & 0 deletions tf-modules/opex-workflow/collections/CSLC_S1_STATIC_CALVAL.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "OPERA_L2_CSLC-S1-STATIC_CALVAL_V1",
"version": "1.0",
"duplicateHandling": "replace",
"process": "CSLC-STATIC",
"url_path": "OPERA_L2_CSLC-S1_STATIC_CALVAL/{granule.granuleId}/",
"granuleId": "^OPERA_L2_CSLC-S1-STATIC_.*_\\d{8}_\\d{8}T\\d{6}Z_S1[A-Z]_v\\d\\.\\d$",
"granuleIdExtraction": "(OPERA_L2_CSLC-S1.*)(\\.h5)",
"sampleFileName": "OPERA_L2_CSLC-S1-STATIC_T064-135518-IW1_20140101_20230807T234233Z_S1A_v1.0.h5",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L2_CSLC-S1.*$",
"sampleFileName": "OPERA_L2_CSLC-S1-STATIC_T064-135518-IW1_20140101_20230807T234233Z_S1A_v1.0.h5"
}
]
}
22 changes: 22 additions & 0 deletions tf-modules/opex-workflow/collections/DISP_S1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "OPERA_L3_DISP-S1_V1",
"version": "1",
"duplicateHandling": "replace",
"process": "DISP",
"url_path": "OPERA_L3_DISP-S1_V1/{granule.granuleId}/",
"granuleId": "^OPERA_L3_DISP-S1.*$",
"granuleIdExtraction": "(OPERA_L3_DISP-S1.*)(\\.nc)",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.nc",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L3_DISP-S1_.*\\.(?:nc|iso\\.xml|zarr\\.json\\.gz)(?!png)(?:\\.md5)?$",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.nc"
},
{
"bucket": "opera-browse",
"regex": "^OPERA_L3_DISP-S1_.*\\.(?!nc|iso\\.xml)(?:png)(?:\\.md5)?$",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.png"
}
]
}
22 changes: 22 additions & 0 deletions tf-modules/opex-workflow/collections/DISP_S1_PROV.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "OPERA_L3_DISP-S1_PROVISIONAL_V0",
"version": "0",
"duplicateHandling": "replace",
"process": "DISP",
"url_path": "OPERA_L3_DISP-S1_PROVISIONAL_V0/{granule.granuleId}/",
"granuleId": "^OPERA_L3_DISP-S1.*$",
"granuleIdExtraction": "(OPERA_L3_DISP-S1.*)(\\.nc)",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.nc",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L3_DISP-S1_.*\\.(?:nc|iso\\.xml|zarr\\.json\\.gz)(?!png)(?:\\.md5)?$",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.nc"
},
{
"bucket": "opera-browse",
"regex": "^OPERA_L3_DISP-S1_.*\\.(?!nc|iso\\.xml)(?:png)(?:\\.md5)?$",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F01234_VV_20190101T232711Z_20190906T232711Z_v0.1_20240125T152124Z.png"
}
]
}
18 changes: 18 additions & 0 deletions tf-modules/opex-workflow/collections/DISP_S1_STACK.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "OPERA_L3_DISP-S1_STACK_V1",
"version": "1",
"duplicateHandling": "replace",
"process": "DISP-STACK",
"url_path": "OPERA_L3_DISP-S1_STACK_V1/{granule.granuleId}/",
"granuleId": "^OPERA_L3_DISP-S1_(IW|EW)_F\\d{5}_[VH]{2}_V1$",
"granuleIdExtraction": "(OPERA_L3_DISP-S1_(IW|EW)_F\\d{5}_[VH]{2}_V1).*(\\.zarr\\.json\\.gz)",
"reportToEms": false,
"sampleFileName": "OPERA_L3_DISP-S1_IW_F08622_VV_V1_fake.zarr.json.gz",
"files": [
{
"bucket": "opera-products",
"regex": "^OPERA_L3_DISP-S1_(IW|EW)_F\\d{5}_[VH]{2}.*\\.zarr\\.json\\.gz$",
"sampleFileName": "OPERA_L3_DISP-S1_IW_F08622_VV_short_wavelength_displacement.zarr.json.gz"
}
]
}
Loading
Loading