docs: declare the EC2 operations this platform can never serve

EC2 published one not-applicable operation against 625 in the model, so the
page was silent about a large surface that is absent for a structural reason
rather than an unfinished one.

Eighty-six more are declared across nine families: EC2-Classic, the 2016
resource ID migration, FPGA images, Elastic Graphics, Outposts and the edge
zone gateways, capacity purchasing, AWS backbone telemetry, Marketplace
product codes and BYOIP. S3 loses its replication and analytics declarations,
which named work that is not ruled out.
This commit is contained in:
Julian Sommer
2026-09-15 11:00:40 +10:00
parent 4cbf7f33c7
commit 4380bf1de5
3 changed files with 218 additions and 52 deletions
+99 -2
View File
@@ -28,29 +28,44 @@ Spot Instance Requests are a mock over the on-demand `RunInstances` path. A requ
| Operation | Status |
|---|---|
| `AcceptReservedInstancesExchangeQuote` | ⛔ Not applicable [10](#notes) |
| `AdvertiseByoipCidr` | ⛔ Not applicable [5](#notes) |
| `AllocateAddress` | ✅ Implemented |
| `AssociateAddress` | ✅ Implemented |
| `AssociateIamInstanceProfile` | ✅ Implemented |
| `AssociateRouteTable` | ✅ Implemented |
| `AttachClassicLinkVpc` | ⛔ Not applicable [6](#notes) |
| `AttachInternetGateway` | ✅ Implemented |
| `AttachNetworkInterface` | ✅ Implemented |
| `AttachVolume` | ✅ Implemented |
| `AuthorizeSecurityGroupEgress` | ✅ Implemented |
| `AuthorizeSecurityGroupIngress` | ✅ Implemented |
| `CancelCapacityReservation` | ✅ Implemented |
| `CancelReservedInstancesListing` | ⛔ Not applicable [10](#notes) |
| `CancelSpotInstanceRequests` | ✅ Implemented |
| `ConfirmProductInstance` | ⛔ Not applicable [9](#notes) |
| `CopyFpgaImage` | ⛔ Not applicable [7](#notes) |
| `CopyImage` | ✅ Implemented |
| `CopySnapshot` | ✅ Implemented |
| `CreateCapacityReservation` | ✅ Implemented |
| `CreateCarrierGateway` | ⛔ Not applicable [3](#notes) |
| `CreateCoipCidr` | ⛔ Not applicable [3](#notes) |
| `CreateCoipPool` | ⛔ Not applicable [3](#notes) |
| `CreateEgressOnlyInternetGateway` | ✅ Implemented |
| `CreateFpgaImage` | ⛔ Not applicable [7](#notes) |
| `CreateImage` | ✅ Implemented |
| `CreateInternetGateway` | ✅ Implemented |
| `CreateKeyPair` | ✅ Implemented |
| `CreateLaunchTemplate` | ✅ Implemented |
| `CreateLaunchTemplateVersion` | ✅ Implemented |
| `CreateLocalGatewayRoute` | ⛔ Not applicable [3](#notes) |
| `CreateLocalGatewayRouteTable` | ⛔ Not applicable [3](#notes) |
| `CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation` | ⛔ Not applicable [3](#notes) |
| `CreateLocalGatewayRouteTableVpcAssociation` | ⛔ Not applicable [3](#notes) |
| `CreateNatGateway` | ✅ Implemented |
| `CreateNetworkInterface` | ✅ Implemented |
| `CreatePlacementGroup` | ✅ Implemented |
| `CreateReservedInstancesListing` | ⛔ Not applicable [10](#notes) |
| `CreateRoute` | ✅ Implemented |
| `CreateRouteTable` | ✅ Implemented |
| `CreateSecurityGroup` | ✅ Implemented |
@@ -59,14 +74,23 @@ Spot Instance Requests are a mock over the on-demand `RunInstances` path. A requ
| `CreateTags` | ✅ Implemented |
| `CreateVolume` | ✅ Implemented |
| `CreateVpc` | ✅ Implemented |
| `DeleteCarrierGateway` | ⛔ Not applicable [3](#notes) |
| `DeleteCoipCidr` | ⛔ Not applicable [3](#notes) |
| `DeleteCoipPool` | ⛔ Not applicable [3](#notes) |
| `DeleteEgressOnlyInternetGateway` | ✅ Implemented |
| `DeleteFpgaImage` | ⛔ Not applicable [7](#notes) |
| `DeleteInternetGateway` | ✅ Implemented |
| `DeleteKeyPair` | ✅ Implemented |
| `DeleteLaunchTemplate` | ✅ Implemented |
| `DeleteLaunchTemplateVersions` | ✅ Implemented |
| `DeleteLocalGatewayRoute` | ⛔ Not applicable [3](#notes) |
| `DeleteLocalGatewayRouteTable` | ⛔ Not applicable [3](#notes) |
| `DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation` | ⛔ Not applicable [3](#notes) |
| `DeleteLocalGatewayRouteTableVpcAssociation` | ⛔ Not applicable [3](#notes) |
| `DeleteNatGateway` | ✅ Implemented |
| `DeleteNetworkInterface` | ✅ Implemented |
| `DeletePlacementGroup` | ✅ Implemented |
| `DeleteQueuedReservedInstances` | ⛔ Not applicable [10](#notes) |
| `DeleteRoute` | ✅ Implemented |
| `DeleteRouteTable` | ✅ Implemented |
| `DeleteSecurityGroup` | ✅ Implemented |
@@ -75,14 +99,29 @@ Spot Instance Requests are a mock over the on-demand `RunInstances` path. A requ
| `DeleteTags` | ✅ Implemented |
| `DeleteVolume` | ✅ Implemented |
| `DeleteVpc` | ✅ Implemented |
| `DeprovisionByoipCidr` | ⛔ Not applicable [5](#notes) |
| `DeregisterImage` | ✅ Implemented |
| `DescribeAccountAttributes` | ✅ Implemented |
| `DescribeAddresses` | ✅ Implemented |
| `DescribeAddressesAttribute` | ✅ Implemented |
| `DescribeAggregateIdFormat` | ⛔ Not applicable [8](#notes) |
| `DescribeAvailabilityZones` | ✅ Implemented |
| `DescribeAwsNetworkPerformanceMetricSubscriptions` | ⛔ Not applicable [2](#notes) |
| `DescribeByoipCidrs` | ⛔ Not applicable [5](#notes) |
| `DescribeCapacityBlockOfferings` | ⛔ Not applicable [10](#notes) |
| `DescribeCapacityReservations` | ✅ Implemented |
| `DescribeCarrierGateways` | ⛔ Not applicable [3](#notes) |
| `DescribeClassicLinkInstances` | ⛔ Not applicable [6](#notes) |
| `DescribeCoipPools` | ⛔ Not applicable [3](#notes) |
| `DescribeEgressOnlyInternetGateways` | ✅ Implemented |
| `DescribeElasticGpus` | ⛔ Not applicable [11](#notes) |
| `DescribeFpgaImageAttribute` | ⛔ Not applicable [7](#notes) |
| `DescribeFpgaImages` | ⛔ Not applicable [7](#notes) |
| `DescribeHostReservationOfferings` | ⛔ Not applicable [10](#notes) |
| `DescribeHostReservations` | ⛔ Not applicable [10](#notes) |
| `DescribeIamInstanceProfileAssociations` | ✅ Implemented |
| `DescribeIdFormat` | ⛔ Not applicable [8](#notes) |
| `DescribeIdentityIdFormat` | ⛔ Not applicable [8](#notes) |
| `DescribeImageAttribute` | ✅ Implemented |
| `DescribeImages` | ✅ Implemented |
| `DescribeInstanceAttribute` | ✅ Implemented |
@@ -95,66 +134,124 @@ Spot Instance Requests are a mock over the on-demand `RunInstances` path. A requ
| `DescribeKeyPairs` | ✅ Implemented |
| `DescribeLaunchTemplateVersions` | ✅ Implemented |
| `DescribeLaunchTemplates` | ✅ Implemented |
| `DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations` | ⛔ Not applicable [3](#notes) |
| `DescribeLocalGatewayRouteTableVpcAssociations` | ⛔ Not applicable [3](#notes) |
| `DescribeLocalGatewayRouteTables` | ⛔ Not applicable [3](#notes) |
| `DescribeLocalGatewayVirtualInterfaceGroups` | ⛔ Not applicable [3](#notes) |
| `DescribeLocalGatewayVirtualInterfaces` | ⛔ Not applicable [3](#notes) |
| `DescribeLocalGateways` | ⛔ Not applicable [3](#notes) |
| `DescribeMovingAddresses` | ⛔ Not applicable [6](#notes) |
| `DescribeNatGateways` | ✅ Implemented |
| `DescribeNetworkInterfaces` | ✅ Implemented |
| `DescribePlacementGroups` | ✅ Implemented |
| `DescribePrincipalIdFormat` | ⛔ Not applicable [8](#notes) |
| `DescribeRegions` | ✅ Implemented |
| `DescribeReservedInstances` | ⛔ Not applicable [10](#notes) |
| `DescribeReservedInstancesListings` | ⛔ Not applicable [10](#notes) |
| `DescribeReservedInstancesModifications` | ⛔ Not applicable [10](#notes) |
| `DescribeReservedInstancesOfferings` | ⛔ Not applicable [10](#notes) |
| `DescribeRouteTables` | ✅ Implemented |
| `DescribeScheduledInstanceAvailability` | ⛔ Not applicable [10](#notes) |
| `DescribeScheduledInstances` | ⛔ Not applicable [10](#notes) |
| `DescribeSecurityGroupRules` | ✅ Implemented |
| `DescribeSecurityGroups` | ✅ Implemented |
| `DescribeSnapshots` | ✅ Implemented |
| `DescribeSpotInstanceRequests` | ✅ Implemented |
| `DescribeSpotPriceHistory` | ⛔ Not applicable [1](#notes) |
| `DescribeSpotPriceHistory` | ⛔ Not applicable [12](#notes) |
| `DescribeSubnets` | ✅ Implemented |
| `DescribeTags` | ✅ Implemented |
| `DescribeVolumeStatus` | ✅ Implemented |
| `DescribeVolumes` | ✅ Implemented |
| `DescribeVolumesModifications` | ✅ Implemented |
| `DescribeVpcAttribute` | ✅ Implemented |
| `DescribeVpcClassicLink` | ⛔ Not applicable [6](#notes) |
| `DescribeVpcClassicLinkDnsSupport` | ⛔ Not applicable [6](#notes) |
| `DescribeVpcs` | ✅ Implemented |
| `DetachClassicLinkVpc` | ⛔ Not applicable [6](#notes) |
| `DetachInternetGateway` | ✅ Implemented |
| `DetachNetworkInterface` | ✅ Implemented |
| `DetachVolume` | ✅ Implemented |
| `DisableAwsNetworkPerformanceMetricSubscription` | ⛔ Not applicable [2](#notes) |
| `DisableEbsEncryptionByDefault` | ✅ Implemented |
| `DisableSerialConsoleAccess` | ✅ Implemented |
| `DisableVpcClassicLink` | ⛔ Not applicable [6](#notes) |
| `DisableVpcClassicLinkDnsSupport` | ⛔ Not applicable [6](#notes) |
| `DisassociateAddress` | ✅ Implemented |
| `DisassociateIamInstanceProfile` | ✅ Implemented |
| `DisassociateRouteTable` | ✅ Implemented |
| `EnableAwsNetworkPerformanceMetricSubscription` | ⛔ Not applicable [2](#notes) |
| `EnableEbsEncryptionByDefault` | ✅ Implemented |
| `EnableSerialConsoleAccess` | ✅ Implemented |
| `EnableVpcClassicLink` | ⛔ Not applicable [6](#notes) |
| `EnableVpcClassicLinkDnsSupport` | ⛔ Not applicable [6](#notes) |
| `GetAwsNetworkPerformanceData` | ⛔ Not applicable [2](#notes) |
| `GetCoipPoolUsage` | ⛔ Not applicable [3](#notes) |
| `GetConsoleOutput` | ✅ Implemented |
| `GetEbsEncryptionByDefault` | ✅ Implemented |
| `GetFlowLogsIntegrationTemplate` | ⛔ Not applicable [1](#notes) |
| `GetHostReservationPurchasePreview` | ⛔ Not applicable [10](#notes) |
| `GetPasswordData` | ✅ Implemented |
| `GetReservedInstancesExchangeQuote` | ⛔ Not applicable [10](#notes) |
| `GetSecurityGroupsForVpc` | ✅ Implemented |
| `GetSerialConsoleAccessStatus` | ✅ Implemented |
| `ImportKeyPair` | ✅ Implemented |
| `ModifyAvailabilityZoneGroup` | ⛔ Not applicable [3](#notes) |
| `ModifyFpgaImageAttribute` | ⛔ Not applicable [7](#notes) |
| `ModifyIdFormat` | ⛔ Not applicable [8](#notes) |
| `ModifyIdentityIdFormat` | ⛔ Not applicable [8](#notes) |
| `ModifyImageAttribute` | ✅ Implemented |
| `ModifyInstanceAttribute` | ✅ Implemented |
| `ModifyInstanceMetadataOptions` | ✅ Implemented |
| `ModifyLaunchTemplate` | ✅ Implemented |
| `ModifyLocalGatewayRoute` | ⛔ Not applicable [3](#notes) |
| `ModifyNetworkInterfaceAttribute` | ✅ Implemented |
| `ModifyReservedInstances` | ⛔ Not applicable [10](#notes) |
| `ModifySubnetAttribute` | ✅ Implemented |
| `ModifyVolume` | ✅ Implemented |
| `ModifyVpcAttribute` | ✅ Implemented |
| `MonitorInstances` | ✅ Implemented |
| `MoveAddressToVpc` | ⛔ Not applicable [6](#notes) |
| `MoveByoipCidrToIpam` | ⛔ Not applicable [5](#notes) |
| `ProvisionByoipCidr` | ⛔ Not applicable [5](#notes) |
| `PurchaseCapacityBlock` | ⛔ Not applicable [10](#notes) |
| `PurchaseHostReservation` | ⛔ Not applicable [10](#notes) |
| `PurchaseReservedInstancesOffering` | ⛔ Not applicable [10](#notes) |
| `PurchaseScheduledInstances` | ⛔ Not applicable [10](#notes) |
| `RebootInstances` | ✅ Implemented |
| `RegisterImage` | ✅ Implemented |
| `ReleaseAddress` | ✅ Implemented |
| `ReplaceIamInstanceProfileAssociation` | ✅ Implemented |
| `ReplaceRoute` | ✅ Implemented |
| `ReplaceRouteTableAssociation` | ✅ Implemented |
| `ReportInstanceStatus` | ⛔ Not applicable [4](#notes) |
| `RequestSpotInstances` | ✅ Implemented |
| `ResetFpgaImageAttribute` | ⛔ Not applicable [7](#notes) |
| `ResetImageAttribute` | ✅ Implemented |
| `RestoreAddressToClassic` | ⛔ Not applicable [6](#notes) |
| `RevokeSecurityGroupEgress` | ✅ Implemented |
| `RevokeSecurityGroupIngress` | ✅ Implemented |
| `RunInstances` | ✅ Implemented |
| `RunScheduledInstances` | ⛔ Not applicable [10](#notes) |
| `SearchLocalGatewayRoutes` | ⛔ Not applicable [3](#notes) |
| `StartInstances` | ✅ Implemented |
| `StopInstances` | ✅ Implemented |
| `TerminateInstances` | ✅ Implemented |
| `UnmonitorInstances` | ✅ Implemented |
| `UpdateSecurityGroupRuleDescriptionsEgress` | ✅ Implemented |
| `UpdateSecurityGroupRuleDescriptionsIngress` | ✅ Implemented |
| `WithdrawByoipCidr` | ⛔ Not applicable [5](#notes) |
### Notes
1. On owned hardware there is no spot-to-on-demand price differential, so any figure would be invented.
1. The integration template wires flow logs into Athena and CloudFormation, neither of which this platform offers.
2. These report performance across AWS's own global network between its regions and zones.
3. Outposts, Local Zones and Wavelength extend an AWS region into another site; a deployment here is the site.
4. Reporting an instance as impaired files a report with AWS support about AWS hardware.
5. Bringing your own IP range means advertising it from AWS's network. The operator already owns the addresses here.
6. EC2-Classic is the pre-VPC network AWS retired in 2022. Every instance here is in a VPC.
7. FPGA images are built and ingested through AWS's own AFI pipeline for its F1 instances.
8. These switched resource IDs between the short and long forms during AWS's 2016 migration, which has long since finished.
9. Product codes belong to AWS Marketplace, which has no equivalent here.
10. Reserved Instances, Scheduled Instances, Capacity Blocks and host reservations buy AWS capacity at an AWS price. Hardware here is already bought.
11. Elastic Graphics was retired by AWS, and attached nothing but an AWS-hosted accelerator while it existed.
12. On owned hardware there is no spot-to-on-demand price differential, so any figure would be invented.
+98 -14
View File
@@ -45,9 +45,106 @@
"vpc"
],
"notApplicable": {
"DescribeSpotPriceHistory": "spot-price"
"AcceptReservedInstancesExchangeQuote": "purchasing",
"AdvertiseByoipCidr": "byoip",
"AttachClassicLinkVpc": "ec2-classic",
"CancelReservedInstancesListing": "purchasing",
"ConfirmProductInstance": "marketplace",
"CopyFpgaImage": "fpga",
"CreateCarrierGateway": "aws-edge",
"CreateCoipCidr": "aws-edge",
"CreateCoipPool": "aws-edge",
"CreateFpgaImage": "fpga",
"CreateLocalGatewayRoute": "aws-edge",
"CreateLocalGatewayRouteTable": "aws-edge",
"CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation": "aws-edge",
"CreateLocalGatewayRouteTableVpcAssociation": "aws-edge",
"CreateReservedInstancesListing": "purchasing",
"DeleteCarrierGateway": "aws-edge",
"DeleteCoipCidr": "aws-edge",
"DeleteCoipPool": "aws-edge",
"DeleteFpgaImage": "fpga",
"DeleteLocalGatewayRoute": "aws-edge",
"DeleteLocalGatewayRouteTable": "aws-edge",
"DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation": "aws-edge",
"DeleteLocalGatewayRouteTableVpcAssociation": "aws-edge",
"DeleteQueuedReservedInstances": "purchasing",
"DeprovisionByoipCidr": "byoip",
"DescribeAggregateIdFormat": "id-format",
"DescribeAwsNetworkPerformanceMetricSubscriptions": "aws-backbone",
"DescribeByoipCidrs": "byoip",
"DescribeCapacityBlockOfferings": "purchasing",
"DescribeCarrierGateways": "aws-edge",
"DescribeClassicLinkInstances": "ec2-classic",
"DescribeCoipPools": "aws-edge",
"DescribeElasticGpus": "retired-accelerators",
"DescribeFpgaImageAttribute": "fpga",
"DescribeFpgaImages": "fpga",
"DescribeHostReservationOfferings": "purchasing",
"DescribeHostReservations": "purchasing",
"DescribeIdFormat": "id-format",
"DescribeIdentityIdFormat": "id-format",
"DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations": "aws-edge",
"DescribeLocalGatewayRouteTableVpcAssociations": "aws-edge",
"DescribeLocalGatewayRouteTables": "aws-edge",
"DescribeLocalGatewayVirtualInterfaceGroups": "aws-edge",
"DescribeLocalGatewayVirtualInterfaces": "aws-edge",
"DescribeLocalGateways": "aws-edge",
"DescribeMovingAddresses": "ec2-classic",
"DescribePrincipalIdFormat": "id-format",
"DescribeReservedInstances": "purchasing",
"DescribeReservedInstancesListings": "purchasing",
"DescribeReservedInstancesModifications": "purchasing",
"DescribeReservedInstancesOfferings": "purchasing",
"DescribeScheduledInstanceAvailability": "purchasing",
"DescribeScheduledInstances": "purchasing",
"DescribeSpotPriceHistory": "spot-price",
"DescribeVpcClassicLink": "ec2-classic",
"DescribeVpcClassicLinkDnsSupport": "ec2-classic",
"DetachClassicLinkVpc": "ec2-classic",
"DisableAwsNetworkPerformanceMetricSubscription": "aws-backbone",
"DisableVpcClassicLink": "ec2-classic",
"DisableVpcClassicLinkDnsSupport": "ec2-classic",
"EnableAwsNetworkPerformanceMetricSubscription": "aws-backbone",
"EnableVpcClassicLink": "ec2-classic",
"EnableVpcClassicLinkDnsSupport": "ec2-classic",
"GetAwsNetworkPerformanceData": "aws-backbone",
"GetCoipPoolUsage": "aws-edge",
"GetFlowLogsIntegrationTemplate": "aws-analytics",
"GetHostReservationPurchasePreview": "purchasing",
"GetReservedInstancesExchangeQuote": "purchasing",
"ModifyAvailabilityZoneGroup": "aws-edge",
"ModifyFpgaImageAttribute": "fpga",
"ModifyIdFormat": "id-format",
"ModifyIdentityIdFormat": "id-format",
"ModifyLocalGatewayRoute": "aws-edge",
"ModifyReservedInstances": "purchasing",
"MoveAddressToVpc": "ec2-classic",
"MoveByoipCidrToIpam": "byoip",
"ProvisionByoipCidr": "byoip",
"PurchaseCapacityBlock": "purchasing",
"PurchaseHostReservation": "purchasing",
"PurchaseReservedInstancesOffering": "purchasing",
"PurchaseScheduledInstances": "purchasing",
"ReportInstanceStatus": "aws-support",
"ResetFpgaImageAttribute": "fpga",
"RestoreAddressToClassic": "ec2-classic",
"RunScheduledInstances": "purchasing",
"SearchLocalGatewayRoutes": "aws-edge",
"WithdrawByoipCidr": "byoip"
},
"notes": {
"aws-analytics": "The integration template wires flow logs into Athena and CloudFormation, neither of which this platform offers.",
"aws-backbone": "These report performance across AWS's own global network between its regions and zones.",
"aws-edge": "Outposts, Local Zones and Wavelength extend an AWS region into another site; a deployment here is the site.",
"aws-support": "Reporting an instance as impaired files a report with AWS support about AWS hardware.",
"byoip": "Bringing your own IP range means advertising it from AWS's network. The operator already owns the addresses here.",
"ec2-classic": "EC2-Classic is the pre-VPC network AWS retired in 2022. Every instance here is in a VPC.",
"fpga": "FPGA images are built and ingested through AWS's own AFI pipeline for its F1 instances.",
"id-format": "These switched resource IDs between the short and long forms during AWS's 2016 migration, which has long since finished.",
"marketplace": "Product codes belong to AWS Marketplace, which has no equivalent here.",
"purchasing": "Reserved Instances, Scheduled Instances, Capacity Blocks and host reservations buy AWS capacity at an AWS price. Hardware here is already bought.",
"retired-accelerators": "Elastic Graphics was retired by AWS, and attached nothing but an AWS-hosted accelerator while it existed.",
"spot-price": "On owned hardware there is no spot-to-on-demand price differential, so any figure would be invented."
}
},
@@ -228,39 +325,26 @@
],
"notApplicable": {
"CreateSession": "express-one-zone",
"DeleteBucketAnalyticsConfiguration": "analytics",
"DeleteBucketIntelligentTieringConfiguration": "tiering",
"DeleteBucketInventoryConfiguration": "inventory",
"DeleteBucketMetricsConfiguration": "analytics",
"DeleteBucketReplication": "replication",
"GetBucketAccelerateConfiguration": "accelerate",
"GetBucketAnalyticsConfiguration": "analytics",
"GetBucketIntelligentTieringConfiguration": "tiering",
"GetBucketInventoryConfiguration": "inventory",
"GetBucketMetricsConfiguration": "analytics",
"GetBucketReplication": "replication",
"GetBucketRequestPayment": "request-payment",
"ListBucketAnalyticsConfigurations": "analytics",
"ListBucketIntelligentTieringConfigurations": "tiering",
"ListBucketInventoryConfigurations": "inventory",
"ListBucketMetricsConfigurations": "analytics",
"PutBucketAccelerateConfiguration": "accelerate",
"PutBucketAnalyticsConfiguration": "analytics",
"PutBucketIntelligentTieringConfiguration": "tiering",
"PutBucketInventoryConfiguration": "inventory",
"PutBucketMetricsConfiguration": "analytics",
"PutBucketReplication": "replication",
"PutBucketRequestPayment": "request-payment",
"RestoreObject": "tiering",
"WriteGetObjectResponse": "object-lambda"
},
"notes": {
"accelerate": "Transfer acceleration routes uploads over AWS edge locations, which an on-premise deployment has none of.",
"analytics": "Storage class analytics and CloudWatch request metrics are AWS-hosted reporting services with no equivalent here.",
"express-one-zone": "Sessions authenticate S3 Express One Zone directory buckets, a storage class this platform does not offer.",
"inventory": "Inventory reports are an AWS-hosted scheduled export; a listing here is served live from the metadata store.",
"object-lambda": "S3 Object Lambda rewrites a response from a Lambda function, and Lambda is not offered.",
"replication": "Replication copies objects to a bucket in another region, and a deployment is a single region with no peer.",
"request-payment": "Requester Pays shifts transfer charges to the caller, which needs AWS billing behind it.",
"tiering": "Intelligent tiering, archive storage classes and the restores they need are AWS-hosted lifecycle services; objects here are held in one class on local media."
}
+21 -36
View File
@@ -22,15 +22,13 @@ Predastore implements **19 operations** in the S3 `2006-03-01` API model.
### Predastore serves this endpoint
S3 is the one surface the AWS gateway does not answer itself. Object storage runs on [Predastore](https://github.com/mulgadc/predastore), which serves the S3 REST API directly over its own TLS endpoint, with Reed-Solomon erasure coding and AES-256-GCM at rest behind it.
S3 selects an operation by method, path, query parameter and header rather than by an action name, so several operations share one route. The table below is generated from the route table Predastore builds its router from: `GET /{bucket}` answers both `ListObjects` and `ListObjectsV2`, and `PUT /{bucket}/{key}` splits four ways on `?partNumber` and `x-amz-copy-source`.
S3 is the one surface the AWS gateway does not answer itself. Object storage runs on [Predastore](https://github.com/mulgadc/predastore), which serves the S3 REST API directly over its own endpoint.
### Routed is not the same as conforming
This page says an operation is routed to a handler. It does not say the handler's behaviour matches S3 in every case, and for several operations it does not: ETag is not the body MD5, `Marker` is ignored on a v1 listing, and `x-amz-meta-*` does not survive a round trip.
This page says an operation is routed to a handler. It does not say the handler's behaviour matches S3 in every case.
That behaviour is measured separately, against the `ceph/s3-tests` suite Ceph RGW, MinIO and Garage are all validated with, and the results are published in Predastore's [S3 compatibility report](https://github.com/mulgadc/predastore/blob/dev/docs/S3-COMPATIBILITY.md). Read that before porting a client that depends on exact S3 semantics.
That behaviour is measured separately, against the `ceph/s3-tests` suite Ceph RGW, MinIO and Garage are all validated with, and the results are published in Predastore's [S3 compatibility report](https://github.com/mulgadc/predastore/blob/dev/docs/S3-COMPATIBILITY.md).
### Operations
@@ -41,54 +39,41 @@ That behaviour is measured separately, against the `ceph/s3-tests` suite Ceph RG
| `CopyObject` | ✅ Implemented |
| `CreateBucket` | ✅ Implemented |
| `CreateMultipartUpload` | ✅ Implemented |
| `CreateSession` | ⛔ Not applicable [3](#notes) |
| `CreateSession` | ⛔ Not applicable [2](#notes) |
| `DeleteBucket` | ✅ Implemented |
| `DeleteBucketAnalyticsConfiguration` | ⛔ Not applicable [2](#notes) |
| `DeleteBucketIntelligentTieringConfiguration` | ⛔ Not applicable [8](#notes) |
| `DeleteBucketInventoryConfiguration` | ⛔ Not applicable [4](#notes) |
| `DeleteBucketMetricsConfiguration` | ⛔ Not applicable [2](#notes) |
| `DeleteBucketReplication` | ⛔ Not applicable [6](#notes) |
| `DeleteBucketIntelligentTieringConfiguration` | ⛔ Not applicable [6](#notes) |
| `DeleteBucketInventoryConfiguration` | ⛔ Not applicable [3](#notes) |
| `DeleteObject` | ✅ Implemented |
| `DeleteObjects` | ✅ Implemented |
| `GetBucketAccelerateConfiguration` | ⛔ Not applicable [1](#notes) |
| `GetBucketAnalyticsConfiguration` | ⛔ Not applicable [2](#notes) |
| `GetBucketIntelligentTieringConfiguration` | ⛔ Not applicable [8](#notes) |
| `GetBucketInventoryConfiguration` | ⛔ Not applicable [4](#notes) |
| `GetBucketMetricsConfiguration` | ⛔ Not applicable [2](#notes) |
| `GetBucketReplication` | ⛔ Not applicable [6](#notes) |
| `GetBucketRequestPayment` | ⛔ Not applicable [7](#notes) |
| `GetBucketIntelligentTieringConfiguration` | ⛔ Not applicable [6](#notes) |
| `GetBucketInventoryConfiguration` | ⛔ Not applicable [3](#notes) |
| `GetBucketRequestPayment` | ⛔ Not applicable [5](#notes) |
| `GetObject` | ✅ Implemented |
| `HeadBucket` | ✅ Implemented |
| `HeadObject` | ✅ Implemented |
| `ListBucketAnalyticsConfigurations` | ⛔ Not applicable [2](#notes) |
| `ListBucketIntelligentTieringConfigurations` | ⛔ Not applicable [8](#notes) |
| `ListBucketInventoryConfigurations` | ⛔ Not applicable [4](#notes) |
| `ListBucketMetricsConfigurations` | ⛔ Not applicable [2](#notes) |
| `ListBucketIntelligentTieringConfigurations` | ⛔ Not applicable [6](#notes) |
| `ListBucketInventoryConfigurations` | ⛔ Not applicable [3](#notes) |
| `ListBuckets` | ✅ Implemented |
| `ListMultipartUploads` | ✅ Implemented |
| `ListObjects` | ✅ Implemented |
| `ListObjectsV2` | ✅ Implemented |
| `ListParts` | ✅ Implemented |
| `PutBucketAccelerateConfiguration` | ⛔ Not applicable [1](#notes) |
| `PutBucketAnalyticsConfiguration` | ⛔ Not applicable [2](#notes) |
| `PutBucketIntelligentTieringConfiguration` | ⛔ Not applicable [8](#notes) |
| `PutBucketInventoryConfiguration` | ⛔ Not applicable [4](#notes) |
| `PutBucketMetricsConfiguration` | ⛔ Not applicable [2](#notes) |
| `PutBucketReplication` | ⛔ Not applicable [6](#notes) |
| `PutBucketRequestPayment` | ⛔ Not applicable [7](#notes) |
| `PutBucketIntelligentTieringConfiguration` | ⛔ Not applicable [6](#notes) |
| `PutBucketInventoryConfiguration` | ⛔ Not applicable [3](#notes) |
| `PutBucketRequestPayment` | ⛔ Not applicable [5](#notes) |
| `PutObject` | ✅ Implemented |
| `RestoreObject` | ⛔ Not applicable [8](#notes) |
| `RestoreObject` | ⛔ Not applicable [6](#notes) |
| `UploadPart` | ✅ Implemented |
| `UploadPartCopy` | ✅ Implemented |
| `WriteGetObjectResponse` | ⛔ Not applicable [5](#notes) |
| `WriteGetObjectResponse` | ⛔ Not applicable [4](#notes) |
### Notes
1. Transfer acceleration routes uploads over AWS edge locations, which an on-premise deployment has none of.
2. Storage class analytics and CloudWatch request metrics are AWS-hosted reporting services with no equivalent here.
3. Sessions authenticate S3 Express One Zone directory buckets, a storage class this platform does not offer.
4. Inventory reports are an AWS-hosted scheduled export; a listing here is served live from the metadata store.
5. S3 Object Lambda rewrites a response from a Lambda function, and Lambda is not offered.
6. Replication copies objects to a bucket in another region, and a deployment is a single region with no peer.
7. Requester Pays shifts transfer charges to the caller, which needs AWS billing behind it.
8. Intelligent tiering, archive storage classes and the restores they need are AWS-hosted lifecycle services; objects here are held in one class on local media.
2. Sessions authenticate S3 Express One Zone directory buckets, a storage class this platform does not offer.
3. Inventory reports are an AWS-hosted scheduled export; a listing here is served live from the metadata store.
4. S3 Object Lambda rewrites a response from a Lambda function, and Lambda is not offered.
5. Requester Pays shifts transfer charges to the caller, which needs AWS billing behind it.
6. Intelligent tiering, archive storage classes and the restores they need are AWS-hosted lifecycle services; objects here are held in one class on local media.