Skip to content

Commit 4398e1f

Browse files
Merge pull request #1 from stac-extensions/add-extension
add storage extension
2 parents d5f1887 + d11c181 commit 4398e1f

File tree

7 files changed

+411
-286
lines changed

7 files changed

+411
-286
lines changed

README.md

Lines changed: 64 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,83 @@
1-
# Template Extension Specification
1+
# Storage Extension Specification
22

3-
- **Title:** Template
4-
- **Identifier:** <https://stac-extensions.github.io/template/v1.0.0/schema.json>
5-
- **Field Name Prefix:** template
6-
- **Scope:** Item, Collection
3+
- **Title:** Storage
4+
- **Identifier:** <https://stac-extensions.github.io/storage/v1.0.0/schema.json>
5+
- **Field Name Prefix:** storage
6+
- **Scope:** Item, Asset
77
- **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Proposal
8-
- **Owner**: @your-gh-handles @person2
8+
- **Owner**: @davidraleigh
99

10-
This document explains the Template Extension to the [SpatioTemporal Asset Catalog](https://github.com/radiantearth/stac-spec) (STAC) specification.
11-
This is the place to add a short introduction.
10+
This document explains the Storage Extension to the [SpatioTemporal Asset Catalog](https://github.com/radiantearth/stac-spec) (STAC) specification.
11+
This extension adds fields to STAC Item and Asset objects, allowing for details related to cloud storage access and costs to be associated
12+
with a STAC Item. This extension does not cover NFS solutions provided by PaaS cloud companies.
1213

1314
- Examples:
14-
- [Item example](examples/item.json): Shows the basic usage of the extension in a STAC Item
15-
- [Collection example](examples/collection.json): Shows the basic usage of the extension in a STAC Collection
15+
- [Item example 1](examples/example-naip.json): Shows the basic usage of the extension in a STAC Item.
16+
- [Item example 2](examples/example-nsl.json): Another example of basic usage.
1617
- [JSON Schema](json-schema/schema.json)
1718
- [Changelog](./CHANGELOG.md)
1819

19-
## Item Properties and Collection Fields
20+
## Item Fields
21+
| Field Name | Type | Description |
22+
| ----------- | ------ | ----------- |
23+
| storage:min_tier_duration | integer | number of days for the shortest time tier restriction on access of an asset. |
24+
| storage:max_tier_duration | integer | number of days for the longest time tier restrictions on access of an asset. |
25+
| storage:archived | bool | descriptor for whether the data is "properly" archived according to implementers discretion |
26+
27+
## Asset Fields
2028

21-
| Field Name | Type | Description |
22-
| -------------------- | ------------------------- | ----------- |
23-
| template:new_field | string | **REQUIRED**. Describe the required field... |
24-
| template:xyz | [XYZ Object](#xyz-object) | Describe the field... |
25-
| template:another_one | \[number] | Describe the field... |
29+
| Field Name | Type | Description |
30+
| ----------- | ------ | ----------- |
31+
| storage:platform | string | (REQUIRED) The [cloud provider](#providers) where data is stored |
32+
| storage:manager | string | The entity in charge of managing the data. |
33+
| storage:region | string | (REQUIRED) The region where the data is stored. Relevant to speed of access and inter region egress costs (as defined by PaaS provider) |
34+
| storage:bucket | string | The bucket for the asset, used along with object path |
35+
| storage:object_path | string | The object_path for the asset, used along with bucket |
36+
| storage:requester_pays | bool | (REQUIRED) Is the data requester pays or is it data manager/cloud provider pays |
37+
| storage:tier | string | The title for the tier type (as defined by PaaS provider) |
38+
| storage:tier_duration | integer | Minimum storage duration (in days) required before additional fees |
39+
| storage:date_stored | string | Date and time the corresponding asset placed into the current storage tier (relevant for tier_duration > 0). Format is RFC 3339. |
40+
| storage:first_byte_latency | string | approximate time unit (milliseconds, minutes or hours) for accessing first byte of data |
2641

2742
### Additional Field Information
2843

29-
#### template:new_field
44+
#### Providers
45+
Currently this document is arranged to support object storage users of the following PaaS solutions:
3046

31-
This is a much more detailed description of the field `template:new_field`...
47+
- Alibaba
48+
- AWS
49+
- Azure
50+
- Google Cloud Platform
51+
- IBM
52+
- Oracle
3253

33-
### XYZ Object
54+
#### Cloud Provider Storage Tiers
3455

35-
This is the introduction for the purpose and the content of the XYZ Object...
56+
| Duration | Google Cloud | AWS | Azure | IBM | Oracle | Alibaba |
57+
| ------------- | ------------- | --------------------- | ------------- |------------- | --------- | --------- |
58+
| 0 days | STANDARD | Standard | Hot Tier | Standard | Standard | Standard |
59+
| 30 days | NEARLINE | Standard-IA | Cool Tier | Vault | N/A | Infrequent Access |
60+
| 60 days | N/A | N/A | N/A | N/A | N/A | Archive |
61+
| 90 days | COLDLINE | Glacier | N/A | Cold Vault | Archive | N/A |
62+
| 180 days | N/A | Glacier Deep Archive | Archive Tier | N/A | N/A | Cold Archive |
63+
| 365 days | ARCHIVE | N/A | N/A | N/A | N/A | N/A |
3664

37-
| Field Name | Type | Description |
38-
| ----------- | ------ | ----------- |
39-
| x | number | **REQUIRED**. Describe the required field... |
40-
| y | number | **REQUIRED**. Describe the required field... |
41-
| z | number | **REQUIRED**. Describe the required field... |
65+
References for the above table:
66+
67+
IBM: <https://cloud.ibm.com/objectstorage/create#pricing>
68+
69+
Google Cloud: <https://cloud.google.com/storage/docs/storage-classes>
70+
71+
Microsoft: <https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers>
72+
73+
AWS: <https://aws.amazon.com/s3/storage-classes/>
4274

43-
## Relation types
75+
Oracle:
76+
- <https://www.oracle.com/cloud/storage/pricing.html>
77+
- <https://www.oracle.com/cloud/storage/archive-storage-faq.html>
4478

45-
The following types should be used as applicable `rel` types in the
46-
[Link Object](https://github.com/radiantearth/stac-spec/tree/master/item-spec/item-spec.md#link-object).
79+
Alibaba:
80+
- <https://www.alibabacloud.com/product/oss/pricing>
81+
- <https://www.alibabacloud.com/help/doc-detail/51374.htm>
4782

48-
| Type | Description |
49-
| ------------------- | ----------- |
50-
| fancy-rel-type | This link points to a fancy resource. |
83+
All timestamps MUST be formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6).

examples/collection.json

Lines changed: 0 additions & 71 deletions
This file was deleted.

examples/example-naip.json

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
{
2+
"stac_version": "1.0.0-beta.2",
3+
"stac_extensions": [
4+
"https://stac-extensions.github.io/storage/v1.0.0/schema.json"
5+
],
6+
"id": "m_3009743_sw_14_1_20160928_20161129",
7+
"collection": "NAIP_MOSAIC",
8+
"bbox": [
9+
-97.75,
10+
30.25,
11+
-97.6875,
12+
30.312499999999996
13+
],
14+
"type": "Feature",
15+
"geometry": {
16+
"type": "Polygon",
17+
"coordinates": [
18+
[
19+
[
20+
-97.75,
21+
30.312499999999996
22+
],
23+
[
24+
-97.75,
25+
30.25
26+
],
27+
[
28+
-97.6875,
29+
30.25
30+
],
31+
[
32+
-97.6875,
33+
30.312499999999996
34+
],
35+
[
36+
-97.75,
37+
30.312499999999996
38+
]
39+
]
40+
]
41+
},
42+
"properties": {
43+
"datetime": "2016-09-28T00:00:00+00:00",
44+
"mission": "NAIP",
45+
"platform": "UNKNOWN_PLATFORM",
46+
"gsd": 1,
47+
"storage:min_tier_duration": 0,
48+
"storage:max_tier_duration": 180,
49+
"storage:archived": true
50+
},
51+
"assets": {
52+
"GEOTIFF_AZURE_RGBIR": {
53+
"href": "https://naip-nsl.blob.core.windows.net/tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
54+
"type": "image/vnd.stac.geotiff",
55+
"storage:bucket": "naip-nsl",
56+
"storage:object_path": "tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
57+
"storage:platform": "AZURE",
58+
"storage:manager": "Near Space Labs",
59+
"storage:region": "westus2",
60+
"storage:tier": "Archive tier",
61+
"storage:tier_duration": 180,
62+
"storage:date_stored": "2021-01-02T00:00:00+00:00",
63+
"storage:first_byte_latency": "hours"
64+
},
65+
"CO_GEOTIFF_GCP_RGB": {
66+
"href": "https://storage.googleapis.com/naip-data/tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
67+
"type": "image/vnd.stac.geotiff; cloud-optimized=true",
68+
"storage:bucket": "naip-data",
69+
"storage:object_path": "tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
70+
"storage:platform": "GCP",
71+
"storage:manager": "Near Space Labs",
72+
"storage:region": "us-central1",
73+
"storage:requester_pays": true,
74+
"storage:tier": "COLDLINE",
75+
"storage:tier_duration": 90,
76+
"storage:date_stored": "2021-02-02T00:00:00+00:00",
77+
"storage:first_byte_latency": "milliseconds"
78+
},
79+
"CO_GEOTIFF_AWS_RGB": {
80+
"href": "https://naip-visualization.s3.amazonaws.com/tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
81+
"type": "image/vnd.stac.geotiff; cloud-optimized=true",
82+
"storage:bucket": "naip-visualization",
83+
"storage:object_path": "tx/2016/100cm/rgb/30097/m_3009743_sw_14_1_20160928.tif",
84+
"storage:platform": "AWS",
85+
"storage:manager": "ESRI",
86+
"storage:region": "us-west-2",
87+
"storage:requester_pays": true,
88+
"storage:tier": "standard",
89+
"storage:tier_duration": 0,
90+
"storage:first_byte_latency": "milliseconds"
91+
},
92+
"CO_GEOTIFF_AZURE_RGB": {
93+
"href": "https://naipeuwest.blob.core.windows.net/naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.tif",
94+
"type": "image/vnd.stac.geotiff; cloud-optimized=true",
95+
"storage:bucket": "naipeuwest",
96+
"storage:object_path": "naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.tif",
97+
"storage:platform": "AZURE",
98+
"storage:manager": "AZURE",
99+
"storage:region": "westeurope",
100+
"storage:requester_pays": false,
101+
"storage:tier": "hot tier",
102+
"storage:tier_duration": 0,
103+
"storage:first_byte_latency": "milliseconds"
104+
},
105+
"CO_GEOTIFF_AZURE_RGB_DEPRECATED": {
106+
"href": "https://naipblobs.blob.core.windows.net/naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.tif",
107+
"type": "image/vnd.stac.geotiff; cloud-optimized=true",
108+
"storage:bucket": "naipblobs",
109+
"storage:object_path": "naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.tif",
110+
"storage:platform": "AZURE",
111+
"storage:manager": "AZURE",
112+
"storage:region": "eastus",
113+
"storage:requester_pays": false,
114+
"storage:tier": "hot tier",
115+
"storage:tier_duration": 0,
116+
"storage:first_byte_latency": "milliseconds"
117+
},
118+
"THUMBNAIL_AZURE_DEPRECATED": {
119+
"href": "https://naipblobs.blob.core.windows.net/naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.200.jpg",
120+
"type": "image/jpeg",
121+
"storage:bucket": "naipblobs",
122+
"storage:object_path": "naip/v002/tx/2016/tx_100cm_2016/30097/m_3009743_sw_14_1_20160928.200.jpg",
123+
"storage:platform": "AZURE",
124+
"storage:manager": "AZURE",
125+
"storage:region": "eastus",
126+
"storage:requester_pays": false,
127+
"storage:tier": "hot tier",
128+
"storage:tier_duration": 0,
129+
"storage:first_byte_latency": "milliseconds"
130+
}
131+
},
132+
"links": [
133+
{
134+
"rel": "root",
135+
"href": "../../catalog.json",
136+
"type": "application/json"
137+
},
138+
{
139+
"rel": "parent",
140+
"href": "../collection.json",
141+
"type": "application/json"
142+
}
143+
]
144+
}

0 commit comments

Comments
 (0)