WO2021061605A1 - On-demand execution of object filter code in output path of object storage service - Google Patents
On-demand execution of object filter code in output path of object storage service Download PDFInfo
- Publication number
- WO2021061605A1 WO2021061605A1 PCT/US2020/051928 US2020051928W WO2021061605A1 WO 2021061605 A1 WO2021061605 A1 WO 2021061605A1 US 2020051928 W US2020051928 W US 2020051928W WO 2021061605 A1 WO2021061605 A1 WO 2021061605A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- request
- function
- code
- output
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
Definitions
- Computing devices can utilize communication networks to exchange data. Companies and organizations operate computer networks that interconnect a number of computing devices to support operations or to provide services to third parties.
- the computing devices can be located in a single geographic location or located in multiple, distinct geographic locations (e.g., interconnected via private or public communication networks).
- data centers or data processing centers herein generally referred to as a “data center,” may include a number of interconnected computing systems to provide computing resources to users of the data center.
- the data centers may be private data centers operated on behalf of an organization or public data centers operated on behalf, or for the benefit of, the general public.
- virtualization technologies allow a single physical computing device to host one or more instances of virtual machines that appear and operate as independent computing devices to users of a data center.
- the single physical computing device can create, maintain, delete, or otherwise manage virtual machines in a dynamic manner.
- users can request computer resources from a data center, including single computing devices or a configuration of networked computing devices, and be provided with varying numbers of virtual machine resources.
- data centers provide a number of other beneficial services to client devices.
- data centers may provide data storage services configured to store data submitted by client devices, and enable retrieval of that data over a network.
- database services may allow I/O based on a database query language, such as the Structured Query Language (SQL).
- SQL Structured Query Language
- Block storage services may allow I/O based on modification to one or more defined-length blocks, in a manner similar to how an operating system interacts with local storage, and may thus facilitate virtualized disk drives usable, for example, to store an operating system of a virtual machine.
- Object storage services may allow I/O at the level of individual objects or resources, such as individual files, which may vary in content and length.
- an object storage service may provide an interface compliant with the Representational State Transfer (REST) architectural style, such as by allowing I/O based on calls designating input data and a hypertext transport protocol request method (e.g., GET, PUT, POST, DELETE, etc.) to be applied to that data.
- a hypertext transport protocol request method e.g., GET, PUT, POST, DELETE, etc.
- a client can thus retrieve the data from an object storage service, write the data to the object storage service as a new object, modify an existing object, etc.
- FIG.1 is a block diagram depicting an illustrative environment in which an object storage service can operate in conjunction with an on-demand code execution system to implement functions in connection with input/output (I/O) requests to the object storage service.
- FIG. 2 depicts a general architecture of a computing device providing a frontend of the object storage service of FIG.1.
- FIG.3 is a flow diagram depicting illustrative interactions for enabling a client device to modify an I/O path for the object storage service by insertion of a function implemented by execution of a task on the on-demand code execution system.
- FIG.4 is an illustrative visualization of a pipeline of functions to be applied to an I/O path for the object storage service of FIG.1.
- FIGS.5A-5B show a flow diagram depicting illustrative interactions for handling a request to store input data as an object on the object storage service of FIG. 1, including execution of an owner-specified task to the input data and storage of output of the task as the object.
- FIGS.6A-6B show a flow diagram depicting illustrative interactions for handling a request to retrieve data of an object on the object storage service of FIG.1, including execution of an owner-specified task to the object and transmission of an output of the task to a requesting device as the object.
- FIG.7 is a flow chart depicting an illustrative routine for implementing owner-defined functions in connection with an I/O request obtained at the object storage service of FIG. 1 over an I/O path.
- FIG.8 is a flow chart depicting an illustrative routine for executing a task on the on-demand code execution system of FIG. 1 to enable data manipulations during implementation of an owner-defined function.
- FIG. 9 is a flow chart depicting an illustrative routine for executing a task on the on-demand code execution system of FIG.1 to respond to a data object request using a combination of multiple data objects.
- FIG.13 depicting an illustrative routine for implementing owner-defined functions in connection with an I/O request obtained at the object storage service of FIG. 1 over an I/O path.
- FIG.8 is a flow chart depicting an illustrative routine for executing a task on the on-demand code execution system of FIG. 1 to enable data manipulations during implementation of an owner-defined function.
- FIG. 10 is a system diagram of illustrative data flows and interactions between various components of the service provider system in connection with the routine illustrated in FIG.9.
- FIG.11 is a flow chart depicting an illustrative routine for executing a task on the on-demand code execution system of FIG. 1 to respond to a data object request using selectively-obfuscated data.
- FIG. 12 is a system diagram of illustrative data flows and interactions between various components of the service provider system in connection with the routine illustrated in FIG.11.
- FIG.13 is a flow chart depicting an illustrative routine for executing a task on the on-demand code execution system of FIG.1 to respond to a data object request using a dynamically-determined subset of requested data.
- FIG. 14 is a system diagram of illustrative data flows and interactions between various components of the service provider system in connection with the routine illustrated in FIG.13. DETAILED DESCRIPTION [0018] Generally described, aspects of the present disclosure relate to handling requests to read or write to data objects on an object storage system.
- aspects of the present disclosure relate to modification of an input/output (I/O) path for an object storage service, such that one or more data manipulations can be inserted into the I/O path to modify the data to which a called request method is applied, without requiring a calling client device to specify such data manipulations.
- data manipulations occur through execution of user-submitted code, which may be provided for example by an owner of a collection of data objects on an object storage system in order to control interactions with that data object. For example, in cases where an owner of an object collection wishes to ensure that end users do not submit objects to the collection including any personally identifying information (to ensure end user’s privacy), the owner may submit code executable to strip such information from a data input.
- the owner may further specify that such code should be executed during each write of a data object to the collection. Accordingly, when an end user attempts to write input data to the collection as a data object (e.g., via an HTTP PUT method), the code may be first executed against the input data, and resulting output data may be written to the collection as the data object. Notably, this may result in the operation requested by the end user—such as a write operation—being applied not to the end user’s input data, but instead to the data output by the data manipulation (e.g., owner-submitted) code.
- owners of data collections control I/O to those collections without relying on end users to comply with owner requirements. Indeed, end users (or any other client device) may be unaware that modifications to I/O are occurring.
- embodiments of the present disclosure enable modification of I/O to an object storage service without modification of an interface to the service, ensuring inter-compatibility with other pre-existing software utilizing the service.
- data manipulations may occur on an on-demand code execution system, sometimes referred to as a serverless execution system.
- on-demand code execution systems enable execution of arbitrary user-designated code, without requiring the user to create, maintain, or configure an execution environment (e.g., a physical or virtual machine) in which the code is executed.
- an on-demand code execution system may enable a user to submit code and may provide to the user an application programming interface (API) that, when used, enables the user to request execution of the code.
- API application programming interface
- the on-demand code execution system may generate an execution environment for the code, provision the environment with the code, execute the code, and provide a result.
- an on-demand code execution system can remove a need for a user to handle configuration and management of environments for code execution.
- Example techniques for implementing an on-demand code execution system are disclosed, for example, within U.S.
- a system can be used to create a variety of network services. For example, such a system could be used to create a “micro-service,” a network service that implements a small number of functions (or only one function), and that interacts with other services to provide an application.
- one technique for performing data manipulations within the I/O path of an object storage service may be to create a task on an on-demand code execution system that, when executed, performs the required data manipulation.
- the task could provide an interface similar or identical to that of the object storage service, and be operable to obtain input data in response to a request method call (e.g., HTTP PUT or GET calls), execute the code of the task against the input data, and perform a call to the object storage service for implementation of the request method on resulting output data.
- a request method call e.g., HTTP PUT or GET calls
- end users might be required under this scenario to submit I/O requests to the on-demand code execution system, rather than the object storage service, to ensure execution of the task. Should an end user submit a call directly to the object storage service, task execution may not occur, and thus an owner would not be enabled to enforce a desired data manipulation for an object collection.
- this technique may require that code of a task be authored to both provide an interface to end users that enables handling of calls to implement request methods on input data, and an interface that enables performance of calls from the task execution to the object storage service. Implementation of these network interfaces may significantly increase the complexity of the required code, thus disincentivizing owners of data collections from using this technique.
- embodiments of the present disclosure can enable strong integration of serverless task executions with interfaces of an object storage service, such that the service itself is configured to invoke a task execution on receiving an I/O request to a data collection.
- an object storage service and on- demand code execution system can be configured in one embodiment to “stage” input data to a task execution in the form of a handle (e.g., a POSIX-compliant descriptor) to an operating- system-level input/output stream, such that code of a task can manipulate the input data via defined-stream operations (e.g., as if the data existed within a local file system).
- a handle e.g., a POSIX-compliant descriptor
- This stream- level access to input data can be contrasted, for example, with network-level access of input data, which generally requires that code implement network communication to retrieve the input data.
- the object storage service and on-demand code execution system can be configured to provide an output stream handle representing an output stream to which a task execution may write output. On detecting writes to the output stream, the object storage service and on-demand code execution system may handle such writes as output data of the task execution, and apply a called request method to the output data.
- a general-use on-demand code execution system may operate permissively with respect to network communications from a task execution, enabling any network communication from the execution unless such communication is explicitly denied.
- This permissive model is reflective of the use of task executions as micro-services, which often require interaction with a variety of other network services. However, this permissive model also decreases security of the function, since potentially malicious network communications can also reach the execution.
- task executions used to perform data manipulations on an object storage system’s I/O path can utilize a restrictive model, whereby only explicitly-allowed network communications can occur from an environment executing a task.
- a data collection owner may require only a single data manipulation to occur with respect to I/O to the collection.
- the object storage service may detect I/O to the collection, implement the data manipulation (e.g., by executing a serverless task within an environment provisioned with input and output handles), and apply the called request method to the resulting output data.
- an owner may request multiple data manipulations occur with respect to an I/O path. For example, to increase portability and reusability, an owner may author multiple serverless tasks, which may be combined in different manners on different I/O paths. Thus, for each path, the owner may define a series of serverless tasks to be executed on I/O to the path.
- an object storage system may natively provide one or more data manipulations.
- an object storage system may natively accept requests for only portions of an object (e.g., of a defined byte range), or may natively enable execution of queries against data of an object (e.g., SQL queries).
- any combination of various native manipulations and serverless task-based manipulations may be specified for a given I/O path.
- an owner may specify that, for a particular request to read an object, a given SQL query be executed against the object, the output of which is processed via a first task execution, the output of which is processed via a second task execution, etc.
- a particular path modification e.g., the addition of a pipeline
- attributes of the path such as a client device from which an I/O request originates or an object or collection of objects within the request.
- pipelines may be applied to individual objects, such that the pipeline is applied to all I/O requests for the object, or a pipeline may be selectively applied only when certain client devices access the object.
- an object storage service may provide multiple I/O paths for an object or collection.
- the same object or collection may be associated with multiple resource identifiers on the object storage service, such that the object or collection can be accessed through the multiple identifiers (e.g., uniform resource identifiers, or URIs), which illustratively correspond to different network-accessible endpoints.
- identifiers e.g., uniform resource identifiers, or URIs
- different pipelines may be applied to each I/O path for a given object. For example, a first I/O path may be associated with unprivileged access to a data set, and thus be subject to data manipulations that remove confidential information from the data set prior during retrieval. A second I/O path may be associated with privileged access, and thus not be subject to those data manipulations.
- pipelines may be selectively applied based on other criteria. For example, whether a pipeline is applied may be based on time of day, a number or rate of accesses to an object or collection, etc.
- embodiments disclosed herein improve the ability of computing systems, such as object storage systems, to provide and enforce data manipulation functions against data objects. Whereas prior techniques generally depend on external enforcement of data manipulation functions (e.g., requesting that users strip personal information before uploading it), embodiments of the present disclosure enable direct insertion of data manipulation into an I/O path for the object storage system.
- embodiments of the present disclosure provide a secure mechanism for implementing data manipulations, by providing for serverless execution of manipulation functions within an isolated execution environment.
- Embodiments of the present disclosure further improve operation of serverless functions, by enabling such functions to operate on the basis of local stream (e.g., “file”) handles, rather than requiring that functions act as network-accessible services.
- the presently disclosed embodiments therefore address technical problems inherent within computing systems, such as the difficulty of enforcing data manipulations at storage systems and the complexity of creating external services to enforce such data manipulations.
- the on-demand code execution system may provide a network-accessible service enabling users to submit or designate computer- executable source code to be executed by virtual machine instances on the on-demand code execution system.
- Each set of code on the on-demand code execution system may define a “task,” and implement specific functionality corresponding to that task when executed on a virtual machine instance of the on-demand code execution system.
- Individual implementations of the task on the on-demand code execution system may be referred to as an “execution” of the task (or a “task execution”).
- the on-demand code execution system may enable users to directly trigger execution of a task based on a variety of potential events, such as transmission of an application programming interface (“API”) call to the on-demand code execution system, or transmission of a specially formatted hypertext transport protocol (“HTTP”) packet to the on-demand code execution system.
- API application programming interface
- HTTP hypertext transport protocol
- the on-demand code execution system may further interact with an object storage system, in order to execute tasks during application of a data manipulation pipeline to an I/O path.
- the on-demand code execution system can therefore execute any specified executable code “on-demand,” without requiring configuration or maintenance of the underlying hardware or infrastructure on which the code is executed.
- the on-demand code execution system may be configured to execute tasks in a rapid manner (e.g., in under 100 milliseconds [ms]), thus enabling execution of tasks in “real-time” (e.g., with little or no perceptible delay to an end user).
- the on-demand code execution system can include one or more virtual machine instances that are “pre-warmed” or pre-initialized (e.g., booted into an operating system and executing a complete or substantially complete runtime environment) and configured to enable execution of user-defined code, such that the code may be rapidly executed in response to a request to execute the code, without delay caused by initializing the virtual machine instance.
- the code corresponding to that task can be executed within a pre-initialized virtual machine in a very short amount of time.
- the on-demand code execution system described herein may maintain a pool of executing virtual machine instances that are ready for use as soon as a request to execute a task is received. Due to the pre-initialized nature of these virtual machines, delay (sometimes referred to as latency) associated with executing the task code (e.g., instance and language runtime startup time) can be significantly reduced, often to sub-100 millisecond levels.
- the on-demand code execution system may maintain a pool of virtual machine instances on one or more physical computing devices, where each virtual machine instance has one or more software components (e.g., operating systems, language runtimes, libraries, etc.) loaded thereon.
- the on-demand code execution system may select a virtual machine instance for executing the program code of the user based on the one or more computing constraints related to the task (e.g., a required operating system or runtime) and cause the task to be executed on the selected virtual machine instance.
- the tasks can be executed in isolated containers that are created on the virtual machine instances, or may be executed within a virtual machine instance isolated from other virtual machine instances acting as environments for other tasks.
- virtual machine instance is intended to refer to an execution of software or other executable code that emulates hardware to provide an environment or platform on which software may execute (an example “execution environment”).
- Virtual machine instances are generally executed by hardware devices, which may differ from the physical hardware emulated by the virtual machine instance. For example, a virtual machine may emulate a first type of processor and memory while being executed on a second type of processor and memory.
- virtual machines can be utilized to execute software intended for a first execution environment (e.g., a first operating system) on a physical device that is executing a second execution environment (e.g., a second operating system).
- hardware emulated by a virtual machine instance may be the same or similar to hardware of an underlying device.
- a device with a first type of processor may implement a plurality of virtual machine instances, each emulating an instance of that first type of processor.
- virtual machine instances can be used to divide a device into a number of logical sub-devices (each referred to as a “virtual machine instance”). While virtual machine instances can generally provide a level of abstraction away from the hardware of an underlying physical device, this abstraction is not required.
- each virtual machine instance may allow a software application to execute code on the underlying hardware without translation, while maintaining a logical separation between software applications running on other virtual machine instances.
- This process which is generally referred to as “native execution,” may be utilized to increase the speed or performance of virtual machine instances.
- Other techniques that allow direct utilization of underlying hardware such as hardware pass-through techniques, may be used, as well.
- FIG.1 is a block diagram of an illustrative operating environment 100 in which a service provider system 110 operates to enable client devices 102 to perform I/O operations on objects stored within an object storage service 160 and to apply path modifications to such I/O operations, which modifications may include execution of user- defined code on an on-demand code execution system 120.
- client devices 102 are shown in communication with the service provider system 110, including a desktop computer, laptop, and a mobile phone.
- the client devices 102 can be any computing device such as a desktop, laptop or tablet computer, personal computer, wearable computer, server, personal digital assistant (PDA), hybrid PDA/mobile phone, mobile phone, electronic book reader, set-top box, voice command device, camera, digital media player, and the like.
- PDA personal digital assistant
- the object storage service 160 can operate to enable clients to read, write, modify, and delete data objects, each of which represents a set of data associated with an identifier (an “object identifier” or “resource identifier”) that can be interacted with as an individual resource.
- an object may represent a single file submitted by a client device 102 (though the object storage service 160 may or may not store such an object as a single file).
- This object-level interaction can be contrasted with other types of storage services, such as block-based storage services providing data manipulation at the level of individual blocks or database storage services providing data manipulation at the level of tables (or parts thereof) or the like.
- the object storage service 160 illustratively includes one or more frontends 162, which provide an interface (a command-line interface (CLIs), application programing interface (APIs), or other programmatic interface) through which client devices 102 can interface with the service 160 to configure the service 160 on their behalf and to perform I/O operations on the service 160.
- CLIs command-line interface
- APIs application programing interface
- a client device 102 may interact with a frontend 162 to create a collection of data objects on the service 160 (e.g., a “bucket” of objects) and to configure permissions for that collection. Client devices 102 may thereafter create, read, update, or delete objects within the collection based on the interfaces of the frontends 162.
- the frontend 162 provides a REST-compliant HTTP interface supporting a variety of request methods, each of which corresponds to a requested I/O operation on the service 160.
- request methods may include: ⁇ a GET operation requesting retrieval of an object stored on the service 160 by reference to an identifier of the object; ⁇ a PUT operation requesting storage of an object to be stored on the service 160, including an identifier of the object and input data to be stored as the object; ⁇ a DELETE operation requesting deletion of an object stored on the service 160 by reference to an identifier of the object; and ⁇ a LIST operation requesting listing of objects within an object collection stored on the service 160 by reference to an identifier of the collection.
- a variety of other operations may also be supported.
- the service 160 may provide a POST operation similar to a PUT operation but associated with a different upload mechanism (e.g., a browser-based HTML upload), or a HEAD operation enabling retrieval of metadata for an object without retrieving the object itself.
- the service 160 may enable operations that combine one or more of the above operations, or combining an operation with a native data manipulation.
- the service 160 may provide a COPY operation enabling copying of an object stored on the service 160 to another object, which operation combines a GET operation with a PUT operation.
- the service 160 may provide a SELECT operation enabling specification of an SQL query to be applied to an object prior to returning the contents of that object, which combines an application of an SQL query to a data object (a native data manipulation) with a GET operation.
- the service 160 may provide a “byte range” GET, which enables a GET operation on only a portion of a data object.
- the operation requested by a client device 102 on the service 160 may be transmitted to the service via an HTTP request, which itself may include an HTTP method.
- the HTTP method specified within the request may match the operation requested at the service 160.
- the HTTP method of a request may not match the operation requested at the service 160.
- a request may utilize an HTTP POST method to transmit a request to implement a SELECT operation at the service 160.
- frontends 162 may be configured to obtain a call to a request method, and apply that request method to input data for the method.
- a frontend 162 can respond to a request to PUT input data into the service 160 as an object by storing that input data as the object on the service 160.
- Objects may be stored, for example, on object data stores 168, which correspond to any persistent or substantially persistent storage (including hard disk drives (HDDs), solid state drives (SSDs), network accessible storage (NAS), storage area networks (SANs), non-volatile random access memory (NVRAM), or any of a variety of storage devices known in the art).
- the frontend 162 can respond to a request to GET an object from the service 160 by retrieving the object from the stores 168 (the object representing input data to the GET resource request), and returning the object to a requesting client device 102.
- calls to a request method may invoke one or more native data manipulations provided by the service 160.
- a SELECT operation may provide an SQL-formatted query to be applied to an object (also identified within the request), or a GET operation may provide a specific range of bytes of an object to be returned.
- the service 160 illustratively includes an object manipulation engine 170 configured to perform native data manipulations, which illustratively corresponds to a device configured with software executable to implement native data manipulations on the service 160 (e.g., by stripping non-selected bytes from an object for a byte-range GET, by applying an SQL query to an object and returning results of the query, etc.).
- the service 160 can further be configured to enable modification of an I/O path for a given object or collection of objects, such that a called request method is applied to an output of a data manipulation function, rather than the resource identified within the call.
- the service 160 may enable a client device 102 to specify that GET operations for a given object should be subject to execution of a user-defined task on the on-demand code execution system 120, such that the data returned in response to the operation is the output of a task execution rather than the requested object.
- the service 160 may enable a client device 102 to specify that PUT operations to store a given object should be subject to execution of a user-defined task on the on-demand code execution system 120, such that the data stored in response to the operation is the output of a task execution rather than the data provided for storage by a client device 102.
- path modifications may include specification of a pipeline of data manipulations, including native data manipulations, task-based manipulations, or combinations thereof.
- a client device 102 may specify a pipeline or other data manipulation for an object or object collection through the frontend 162, which may store a record of the pipeline or manipulation in the I/O path modification data store 164, which store 164, like the object data stores 168, can represent any persistent or substantially persistent storage. While shown as distinct in FIG.1, in some instances the data stores 164 and 168 may represent a single collection of data stores. For example, data modifications to objects or collections may themselves be stored as objects on the service 160. [0038] To enable data manipulation via execution of user-defined code, the system further includes an on-demand code execution system 120. In one embodiment, the system 120 is solely usable by the object storage service 160 in connection with data manipulations of an I/O path.
- the system 120 is additionally accessible by client devices 102 to directly implement serverless task executions.
- the on-demand code execution system 120 may provide the service 160 (and potentially client devices 102) with one or more user interfaces, command-line interfaces (CLIs), application programing interfaces (APIs), or other programmatic interfaces for generating and uploading user-executable code (e.g., including metadata identifying dependency code objects for the uploaded code), invoking the user-provided code (e.g., submitting a request to execute the user codes on the on-demand code execution system 120), scheduling event-based jobs or timed jobs, tracking the user-provided code, or viewing other logging or monitoring information related to their requests or user codes.
- CLIs command-line interfaces
- APIs application programing interfaces
- other programmatic interfaces for generating and uploading user-executable code (e.g., including metadata identifying dependency code objects for the uploaded code), invoking the user-provided code (e.g., submitting a request to execute the
- the client devices 102, object storage service 160, and on-demand code execution system 120 may communicate via a network 104, which may include any wired network, wireless network, or combination thereof.
- the network 104 may be a personal area network, local area network, wide area network, over-the-air broadcast network (e.g., for radio or television), cable network, satellite network, cellular telephone network, or combination thereof.
- the network 104 may be a publicly accessible network of linked networks, possibly operated by various distinct parties, such as the Internet.
- the network 104 may be a private or semi-private network, such as a corporate or university intranet.
- the network 104 may include one or more wireless networks, such as a Global System for Mobile Communications (GSM) network, a Code Division Multiple Access (CDMA) network, a Long Term Evolution (LTE) network, or any other type of wireless network.
- GSM Global System for Mobile Communications
- CDMA Code Division Multiple Access
- LTE Long Term Evolution
- the network 104 can use protocols and components for communicating via the Internet or any of the other aforementioned types of networks.
- the protocols used by the network 104 may include Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS), Message Queue Telemetry Transport (MQTT), Constrained Application Protocol (CoAP), and the like.
- HTTP Hypertext Transfer Protocol
- HTTPS HTTP Secure
- MQTT Message Queue Telemetry Transport
- CoAP Constrained Application Protocol
- the system 120 includes one or more frontends 130, which enable interaction with the on-demand code execution system 120.
- the frontends 130 serve as a “front door” to the other services provided by the on-demand code execution system 120, enabling users (via client devices 102) or the service 160 to provide, request execution of, and view results of computer executable code.
- the frontends 130 include a variety of components to enable interaction between the on-demand code execution system 120 and other computing devices.
- each frontend 130 may include a request interface providing client devices 102 and the service 160 with the ability to upload or otherwise communication user- specified code to the on-demand code execution system 120 and to thereafter request execution of that code.
- the request interface communicates with external computing devices (e.g., client devices 102, frontend 162, etc.) via a graphical user interface (GUI), CLI, or API.
- GUI graphical user interface
- the frontends 130 process the requests and make sure that the requests are properly authorized. For example, the frontends 130 may determine whether the user associated with the request is authorized to access the user code specified in the request.
- references to user code as used herein may refer to any program code (e.g., a program, routine, subroutine, thread, etc.) written in a specific program language.
- code e.g., a program, routine, subroutine, thread, etc.
- program code may be used interchangeably.
- Such user code may be executed to achieve a specific function, for example, in connection with a particular data transformation developed by the user.
- Tasks individual collections of user code (e.g., to achieve a specific function) are referred to herein as “tasks,” while specific executions of that code (including, e.g., compiling code, interpreting code, or otherwise making the code executable) are referred to as “task executions” or simply “executions.” Tasks may be written, by way of non-limiting example, in JavaScript (e.g., node.js), Java, Python, or Ruby (or another programming language).
- the frontend 130 can include an execution queue, which can maintain a record of requested task executions.
- the number of simultaneous task executions by the on-demand code execution system 120 is limited, and as such, new task executions initiated at the on-demand code execution system 120 (e.g., via an API call, via a call from an executed or executing task, etc.) may be placed on the execution queue and processed, e.g., in a first-in-first-out order.
- the on-demand code execution system 120 may include multiple execution queues, such as individual execution queues for each user account.
- users of the service provider system 110 may desire to limit the rate of task executions on the on-demand code execution system 120 (e.g., for cost reasons).
- the on-demand code execution system 120 may utilize an account-specific execution queue to throttle the rate of simultaneous task executions by a specific user account.
- the on-demand code execution system 120 may prioritize task executions, such that task executions of specific accounts or of specified priorities bypass or are prioritized within the execution queue.
- the on- demand code execution system 120 may execute tasks immediately or substantially immediately after receiving a call for that task, and thus, the execution queue may be omitted.
- the frontend 130 can further include an output interface configured to output information regarding the execution of tasks on the on-demand code execution system 120.
- the output interface may transmit data regarding task executions (e.g., results of a task, errors related to the task execution, or details of the task execution, such as total time required to complete the execution, total data processed via the execution, etc.) to the client devices 102 or the object storage service 160.
- the on-demand code execution system 120 may include multiple frontends 130.
- a load balancer may be provided to distribute the incoming calls to the multiple frontends 130, for example, in a round-robin fashion.
- the manner in which the load balancer distributes incoming calls to the multiple frontends 130 may be based on the location or state of other components of the on-demand code execution system 120.
- a load balancer may distribute calls to a geographically nearby frontend 130, or to a frontend with capacity to service the call.
- each frontend 130 corresponds to an individual instance of another component of the on-demand code execution system 120, such as the active pool 148 described below
- the load balancer may distribute calls according to the capacities or loads on those other components. Calls may in some instances be distributed between frontends 130 deterministically, such that a given call to execute a task will always (or almost always) be routed to the same frontend 130. This may, for example, assist in maintaining an accurate execution record for a task, to ensure that the task executes only a desired number of times. For example, calls may be distributed to load balance between frontends 130.
- the on-demand code execution system 120 further includes one or more worker managers 140 that manage the execution environments, such as virtual machine instances 150 (shown as VM instance 150A and 150B, generally referred to as a “VM”), used for servicing incoming calls to execute tasks. While the following will be described with reference to virtual machine instances 150 as examples of such environments, embodiments of the present disclosure may utilize other environments, such as software containers.
- VM instance 150A and 150B generally referred to as a “VM”
- each worker manager 140 manages an active pool 148, which is a group (sometimes referred to as a pool) of virtual machine instances 150 executing on one or more physical host computing devices that are initialized to execute a given task (e.g., by having the code of the task and any dependency data objects loaded into the instance).
- an active pool 148 which is a group (sometimes referred to as a pool) of virtual machine instances 150 executing on one or more physical host computing devices that are initialized to execute a given task (e.g., by having the code of the task and any dependency data objects loaded into the instance).
- the virtual machine instances 150 are described here as being assigned to a particular task, in some embodiments, the instances may be assigned to a group of tasks, such that the instance is tied to the group of tasks and any tasks of the group can be executed within the instance.
- the tasks in the same group may belong to the same security group (e.g., based on their security credentials) such that executing one task in a container on a particular instance 150 after another task has been executed in another container on the same instance does not pose security risks.
- a task may be associated with permissions encompassing a variety of aspects controlling how a task may execute. For example, permissions of a task may define what network connections (if any) can be initiated by an execution environment of the task. As another example, permissions of a task may define what authentication information is passed to a task, controlling what network-accessible resources are accessible to execution of a task (e.g., objects on the service 160).
- a security group of a task is based on one or more such permissions.
- a security group may be defined based on a combination of permissions to initiate network connections and permissions to access network resources.
- the tasks of the group may share common dependencies, such that an environment used to execute one task of the group can be rapidly modified to support execution of another task within the group.
- each frontend 130 may be associated with a corresponding worker manager 140 (e.g., a worker manager 140 co-located or geographically nearby to the frontend 130) and thus, the frontend 130 may pass most or all requests to that worker manager 140.
- a frontend 130 may include a location selector configured to determine a worker manager 140 to which to pass the execution request.
- the location selector may determine the worker manager 140 to receive a call based on hashing the call, and distributing the call to a worker manager 140 selected based on the hashed value (e.g., via a hash ring).
- Various other mechanisms for distributing calls between worker managers 140 will be apparent to one of skill in the art.
- the worker manager 140 may modify a virtual machine instance 150 (if necessary) and execute the code of the task within the instance 150.
- respective instances 150 may have operating systems (OS) 152 (shown as OS 152A and 152B), language runtimes 154 (shown as runtime 154A and 154B), and user code 156 (shown as user code 156A and 156B).
- OS operating systems
- runtime 154 shown as runtime 154A and 154B
- user code 156 shown as user code 156A and 156B
- the OS 152, runtime 154, and user code 156 may collectively enable execution of the user code to implement the task.
- tasks may be rapidly executed within an execution environment.
- each VM 150 additionally includes staging code 157 executable to facilitate staging of input data on the VM 150 and handling of output data written on the VM 150, as well as a VM data store 158 accessible through a local file system of the VM 150.
- the staging code 157 represents a process executing on the VM 150 (or potentially a host device of the VM 150) and configured to obtain data from the object storage service 160 and place that data into the VM data store 158.
- the staging code 157 can further be configured to obtain data written to a file within the VM data store 158, and to transmit that data to the object storage service 160.
- user code 156 is not required to obtain data over a network, simplifying user code 156 and enabling further restriction of network communications by the user code 156, thus increasing security. Rather, as discussed above, user code 156 may interact with input data and output data as files on the VM data store 158, by use of file handles passed to the code 156 during an execution. In some embodiments, input and output data may be stored as files within a kernel-space file system of the data store 158.
- the staging code 157 may provide a virtual file system, such as a filesystem in userspace (FUSE) interface, which provides an isolated file system accessible to the user code 156, such that the user code’s access to the VM data store 158 is restricted.
- FUSE filesystem in userspace
- the term “local file system” generally refers to a file system as maintained within an execution environment, such that software executing within the environment can access data as file, rather than via a network connection.
- the data storage accessible via a local file system may itself be local (e.g., local physical storage), or may be remote (e.g., accessed via a network protocol, like NFS, or represented as a virtualized block device provided by a network-accessible service).
- a network protocol like NFS, or represented as a virtualized block device provided by a network-accessible service.
- the term “local file system” is intended to describe a mechanism for software to access data, rather than physical location of the data.
- the VM data store 158 can include any persistent or non-persistent data storage device.
- the VM data store 158 is physical storage of the host device, or a virtual disk drive hosted on physical storage of the host device.
- the VM data store 158 is represented as local storage, but is in fact a virtualized storage device provided by a network accessible service.
- the VM data store 158 may be a virtualized disk drive provided by a network-accessible block storage service.
- the object storage service 160 may be configured to provide file-level access to objects stored on the data stores 168, thus enabling the VM data store 158 to be virtualized based on communications between the staging code 157 and the service 160.
- the object storage service 160 can include a file-level interface 166 providing network access to objects within the data stores 168 as files.
- the file-level interface 166 may, for example, represent a network-based file system server (e.g., a network file system (NFS)) providing access to objects as files, and the staging code 157 may implement a client of that server, thus providing file-level access to objects of the service 160.
- the VM data store 158 may represent virtualized access to another data store executing on the same host device of a VM instance 150.
- an active pool 148 may include one or more data staging VM instances (not shown in FIG.1), which may be co-tenanted with VM instances 150 on the same host device.
- a data staging VM instance may be configured to support retrieval and storage of data from the service 160 (e.g., data objects or portions thereof, input data passed by client devices 102, etc.), and storage of that data on a data store of the data staging VM instance.
- the data staging VM instance may, for example, be designated as unavailable to support execution of user code 156, and thus be associated with elevated permissions relative to instances 150 supporting execution of user code.
- the data staging VM instance may make this data accessible to other VM instances 150 within its host device (or, potentially, on nearby host devices), such as by use of a network- based file protocol, like NFS.
- VM instances 150 may then act as clients to the data staging VM instance, enabling creation of virtualized VM data stores 158 that, from the point of view of user code 156A, appear as local data stores.
- network-based access to data stored at a data staging VM can be expected to occur very quickly, given the co-location of a data staging VM and a VM instance 150 within a host device or on nearby host devices.
- IO streams may additionally be used to read from or write to other interfaces of a VM instance 150 (while still removing a need for user code 156 to conduct operations other than stream-level operations, such as creating network connections).
- staging code 157 may “pipe” input data to an execution of user code 156 as an input stream, the output of which may be “piped” to the staging code 157 as an output stream.
- a staging VM instance or a hypervisor to a VM instance 150 may pass input data to a network port of the VM instance 150, which may be read-from by staging code 157 and passed as an input stream to the user code 157.
- data written to an output stream by the task code 156 may be written to a second network port of the instance 150A for retrieval by the staging VM instance or hypervisor.
- a hypervisor to the instance 150 may pass input data as data written to a virtualized hardware input device (e.g., a keyboard) and staging code 157 may pass to the user code 156 a handle to the IO stream corresponding to that input device.
- the hypervisor may similarly pass to the user code 156 a handle for an IO stream corresponding to an virtualized hardware output device, and read data written to that stream as output data.
- file streams may generally be modified to relate to any IO stream.
- the object storage service 160 and on-demand code execution system 120 are depicted in FIG.1 as operating in a distributed computing environment including several computer systems that are interconnected using one or more computer networks (not shown in FIG.1).
- the object storage service 160 and on-demand code execution system 120 could also operate within a computing environment having a fewer or greater number of devices than are illustrated in FIG.1.
- the depiction of the object storage service 160 and on-demand code execution system 120 in FIG.1 should be taken as illustrative and not limiting to the present disclosure.
- the on-demand code execution system 120 or various constituents thereof could implement various Web services components, hosted or “cloud” computing environments, or peer to peer network configurations to implement at least a portion of the processes described herein.
- the object storage service 160 and on-demand code execution system 120 may be combined into a single service.
- the object storage service 160 and on-demand code execution system 120 may be implemented directly in hardware or software executed by hardware devices and may, for instance, include one or more physical or virtual servers implemented on physical computer hardware configured to execute computer executable instructions for performing various features that will be described herein.
- the one or more servers may be geographically dispersed or geographically co-located, for instance, in one or more data centers. In some instances, the one or more servers may operate as part of a system of rapidly provisioned and released computing resources, often referred to as a “cloud computing environment.”
- the object storage service 160 and on-demand code execution system 120 are illustrated as connected to the network 104. In some embodiments, any of the components within the object storage service 160 and on-demand code execution system 120 can communicate with other components of the on-demand code execution system 120 via the network 104. In other embodiments, not all components of the object storage service 160 and on-demand code execution system 120 are capable of communicating with other components of the virtual environment 100.
- only the frontends 130 and 162 may be connected to the network 104, and other components of the object storage service 160 and on- demand code execution system 120 may communicate with other components of the environment 100 via the respective frontends 130 and 162.
- other components or a combination of components may additionally or alternatively implement such functionalities.
- the object storage service 160 is depicted in FIG.1 as including an object manipulation engine 170, functions of that engine 170 may additionally or alternatively be implemented as tasks on the on-demand code execution system 120.
- FIG.2 depicts a general architecture of a frontend server 200 computing device implementing a frontend 162 of FIG. 1.
- the general architecture of the frontend server 200 depicted in FIG.2 includes an arrangement of computer hardware and software that may be used to implement aspects of the present disclosure.
- the hardware may be implemented on physical electronic devices, as discussed in greater detail below.
- the frontend server 200 may include many more (or fewer) elements than those shown in FIG.2. It is not necessary, however, that all of these generally conventional elements be shown in order to provide an enabling disclosure. Additionally, the general architecture illustrated in FIG. 2 may be used to implement one or more of the other components illustrated in FIG.1.
- the frontend server 200 includes a processing unit 290, a network interface 292, a computer readable medium drive 294, and an input/output device interface 296, all of which may communicate with one another by way of a communication bus.
- the network interface 292 may provide connectivity to one or more networks or computing systems.
- the processing unit 290 may thus receive information and instructions from other computing systems or services via the network 104.
- the processing unit 290 may also communicate to and from primary memory 280 or secondary memory 298 and further provide output information for an optional display (not shown) via the input/output device interface 296.
- the input/output device interface 296 may also accept input from an optional input device (not shown).
- the primary memory 280 or secondary memory 298 may contain computer program instructions (grouped as units in some embodiments) that the processing unit 290 executes in order to implement one or more aspects of the present disclosure. These program instructions are shown in FIG. 2 as included within the primary memory 280, but may additionally or alternatively be stored within secondary memory 298.
- the primary memory 280 and secondary memory 298 correspond to one or more tiers of memory devices, including (but not limited to) RAM, 3D XPOINT memory, flash memory, magnetic storage, and the like.
- the primary memory 280 is assumed for the purposes of description to represent a main working memory of the worker manager 140, with a higher speed but lower total capacity than secondary memory 298.
- the primary memory 280 may store an operating system 284 that provides computer program instructions for use by the processing unit 290 in the general administration and operation of the frontend server 200.
- the memory 280 may further include computer program instructions and other information for implementing aspects of the present disclosure.
- the memory 280 includes a user interface unit 282 that generates user interfaces (or instructions therefor) for display upon a computing device, e.g., via a navigation or browsing interface such as a browser or application installed on the computing device.
- the memory 280 may include a control plane unit 286 and data plane unit 288 each executable to implement aspects of the present disclosure.
- the control plane unit 286 may include code executable to enable owners of data objects or collections of objects to attach manipulations, serverless functions, or data processing pipelines to an I/O path, in accordance with embodiments of the present disclosure.
- control plane unit 286 may enable the frontend 162 to implement the interactions of FIG. 3.
- the data plane unit 288 may illustratively include code enabling handling of I/O operations on the object storage service 160, including implementation of manipulations, serverless functions, or data processing pipelines attached to an I/O path (e.g., via the interactions of FIGS. 5A-6B, implementation of the routines of FIGS.7-8, etc.).
- the frontend server 200 of FIG.2 is one illustrative configuration of such a device, of which others are possible. For example, while shown as a single device, a frontend server 200 may in some embodiments be implemented as multiple physical host devices.
- a first device of such a frontend server 200 may implement the control plane unit 286, while a second device may implement the data plane unit 288.
- a similar device may implement a worker manager 140, as described in more detail in U.S. Patent No.9,323,556, entitled “PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE,” and filed September 30, 2014 (the “‘556 Patent”), the entirety of which is hereby incorporated by reference.
- a worker manager 140 as described in more detail in U.S. Patent No.9,323,556, entitled “PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE,” and filed September 30, 2014 (the “‘556 Patent”), the entirety of which is hereby incorporated by reference.
- FIG.3 illustrative interactions are depicted for enabling a client device 102A to modify an I/O path for one or more objects on an object storage service 160 by inserting a data manipulation into the I/O path, which manipulation is implemented within a task executable on the on-demand code execution system 120.
- the interactions of FIG.3 begin at (1), where the client device 102A authors the stream manipulation code.
- the code can illustratively function to access an input file handle provided on execution of the program (which may, for example, be represented by the standard input stream for a program, commonly “stdin”), perform manipulations on data obtained from that file handle, and write data to an output file handle provided on execution of the program (which may, for example, by represented by the standard output stream for a program, commonly “stdout”).
- an input file handle provided on execution of the program which may, for example, be represented by the standard input stream for a program, commonly “stdin”
- an output file handle provided on execution of the program which may, for example, by represented by the standard output stream for a program, commonly “stdout”.
- IO operating- system-level input/output
- operating-system-level input/output stream (or simply an “IO stream”) is intended to refer to a stream of data for which an operating system provides a defined set of functions, such as seeking within the stream, reading from a stream, and writing to a stream.
- Streams may be created in various manners.
- a programming language may generate a stream by use of a function library to open a file on a local operating system, or a stream may be created by use of a “pipe” operator (e.g., within an operating system shell command language).
- pipe e.g., within an operating system shell command language
- task code may be authored to accept, as a parameter of the code, an input handle and an output handle, both representing IO streams (e.g., an input stream and an output stream, respectively).
- the code may then manipulate data of the input stream, and write an output to the output stream.
- any of a variety of functions may be implemented according to the desires of the user. For example, a function may search for and remove confidential information from the input stream.
- a function may search for and remove confidential information from the input stream.
- other code may implement additional interfaces, such as network communication interfaces.
- the need for the code to create such streams is removed.
- streams may be created outside of the code, and potentially outside of an execution environment of the code, stream manipulation code need not necessarily be trusted to conduct certain operations that may be necessary to create a stream.
- a stream may represent information transmitted over a network connection, without the code being provided with access to that network connection.
- use of IO streams to pass data into and out of code executions can simplify code while increasing security.
- the code may be authored in a variety of programming languages. Authoring tools for such languages are known in the art and thus will not be described herein. While authoring is described in FIG. 3 as occurring on the client device 102A, the service 160 may in some instances provide interfaces (e.g., web GUIs) through which to author or select code.
- the client device 102A submits the stream manipulation code to the frontend 162 of the service 160, and requests that an execution of the code be inserted into an I/O path for one or more objects.
- the frontends 162 may provide one or more interfaces to the device 102A enabling submission of the code (e.g., as a compressed file).
- the frontends 162 may further provide interfaces enabling designation of one or more I/O paths to which an execution of the code should be applied.
- Each I/O path may correspond, for example, to an object or collection of objects (e.g., a “bucket” of objects).
- an I/O path may further corresponding to a given way of accessing such object or collection (e.g., a URI through which the object is created), to one or more accounts attempting to access the object or collection, or to other path criteria. Designation of the path modification is then stored in the I/O path modification data store 164, at (3). Additionally, the stream manipulation code is stored within the object data stores 166 at (4). [0070] As such, when an I/O request is received via the specified I/O path, the service 160 is configured to execute the stream manipulation code against input data for the request (e.g., data provided by the client device 102A or an object of the service 160, depending on the I/O request), before then applying the request to the output of the code execution.
- input data for the request e.g., data provided by the client device 102A or an object of the service 160, depending on the I/O request
- a client device 102A (which in FIG. 3 illustratively represents an owner of an object or object collection) can obtain greater control over data stored on and retrieved from the object storage service 160.
- the interactions of FIG. 3 generally relate to insertion of a single data manipulation into the I/O path of an object or collection on the service 160.
- an owner of an object or collection is enabled to insert multiple data manipulations into such an I/O path.
- Each data manipulation may correspond, for example, to a serverless code-based manipulation or a native manipulation of the service 160.
- an owner has submitted a data set to the service 160 as an object, and that the owner wishes to provide an end user with a filtered view of a portion of that data set. While the owner could store that filtered view of the portion as a separate object and provide the end user with access to that separate object, this results in data duplication on the service 160. In the case that the owner wishes to provide multiple end users with different portions of the data set, potentially with customized filters, that data duplication grows, resulting in significant inefficiencies.
- another option may be for the owner to author or obtain custom code to implement different filters on different portions of the object, and to insert that code into the I/O path for the object.
- embodiments of the present disclosure enable an owner to create a pipeline of data manipulations to be applied to an I/O path, linking together multiple data manipulations, each of which may also be inserted into other I/O paths.
- An illustrative visualization of such a pipeline is shown in FIG.4 as pipeline 400.
- the pipeline 400 illustrates a series of data manipulations that an owner specifies are to occur on calling of a request method against an object or object collection.
- the pipeline begins with input data, specified within the call according to a called request method.
- a PUT call may generally include the input data as the data to be stored
- a GET call may generally include the input data by reference to a stored object.
- a LIST call may specify a directory, a manifest of which is the input data to the LIST request method.
- the called request method is not initially applied to the input data.
- the input data is initially passed to an execution of “code A” 404, where code A represents a first set of user-authored code.
- code A represents a first set of user-authored code.
- the output of that execution is then passed to “native function A” 406, which illustratively represents a native function of the service 160, such as a “SELECT” or byte-range function implemented by the object manipulation engine 170.
- the output of that native function 406 is then passed to an execution of “code B” 408, which represents a second set of user-authored code.
- the output of that execution 408 is passed to the called request method 410 (e.g., GET, PUT, LIST, etc.). Accordingly, rather than the request method being applied to the input data as in conventional techniques, in the illustration of FIG.
- the request method is applied to the output of the execution 408, which illustratively represents a transformation of the input data according to one or more owner- specified manipulations 412.
- implementation of the pipeline 400 may not require any action or imply any knowledge of the pipeline 400 on the part of a calling client device 102.
- implementation of pipelines can be expected not to impact existing mechanisms of interacting with the service 160 (other than altering the data stored on or retrieved from the service 160 in accordance with the pipeline).
- implementation of a pipeline can be expected not to require reconfiguration of existing programs utilizing an API of the service 160.
- the service 160 may enable an owner to configure non-linear pipelines, such as by include conditional or branching nodes within the pipeline.
- data manipulations e.g., serverless-based functions
- the return value of a data manipulation may be used to select a conditional branch within a branched pipeline, such that a first return value causes the pipeline to proceed on a first branch, while a second return value causes the pipeline to proceed on a second branch.
- pipelines may include parallel branches, such that data is copied or divided to multiple data manipulations, the outputs of which are passed to a single data manipulation for merging prior to executing the called method.
- the service 160 may illustratively provide a graphical user interface through which owners can create pipelines, such as by specifying nodes within the pipeline and linking those nodes together via logical connections.
- a variety of flow-based development interfaces are known and may be utilized in conjunction with aspects of the present disclosure.
- a pipeline applied to a particular I/O path may be generated on-the-fly, at the time of a request, based on data manipulations applied to the path according to different criteria.
- an owner of a data collection may apply a first data manipulation to all interactions with objects within a collection, and a second data manipulation to all interactions obtained via a given URI.
- the service 160 may generate a pipeline combining the first and second data manipulations.
- the service 160 may illustratively implement a hierarchy of criteria, such that manipulations applied to objects are placed within the pipeline prior to manipulations applied to a URI, etc.
- client devices 102 may be enabled to request inclusion of a data manipulation within a pipeline.
- a client device 102 may specify a particular data manipulation to be included within a pipeline applied in connection with the request.
- a collection owner may specify one or more data manipulations allowed for the collection, and further specify identifiers for those manipulations (e.g., function names).
- identifiers for those manipulations (e.g., function names).
- client-requested manipulations are appended to the end of a pipeline subsequent to owner-specified data manipulations and prior to implementing the requested request method.
- the search function can receive as input data the output of an owner-specified data manipulations for the data set (e.g., manipulations to remove confidential information from the data set).
- requests may in some embodiments specify parameters to be passed to one or more data manipulations (whether specified within the request or not). Accordingly, while embodiments of the present disclosure can enable data manipulations without knowledge of those manipulations on the part of client devices 102, other embodiments may enable client devices 102 to pass information within an I/O request for use in implementing data manipulations.
- a serverless task execution may be passed the content of a request (including, e.g., a called method and parameters) and be configured to modify and return, as a return value to a frontend 162, a modified version of the method or parameters.
- a serverless task execution may be passed a call to “GET” that data object, and may transform parameters of the GET request such that it applies only to a specific byte range of the data object corresponding to the portion that the user may access.
- tasks may be utilized to implement customized parsing or restrictions on called methods, such as by limiting the methods a user may call, the parameters to those methods, or the like.
- application of one or more functions to a request may be viewed as a “pre-data processing” pipeline, and may thus be implemented prior to obtaining the input data within the pipeline 400 (which input data may change due to changes in the request), or may be implemented independently of a data manipulation pipeline 400.
- pre-data processing e.g., to modify the method called or method parameters
- a data object may contain sensitive data that a data owner desires to remove prior to providing the data to a client.
- the owner may further enable a client to specify native manipulations to the data set, such as conducting a database query on the dataset (e.g., via a SELECT resource method). While the owner may specify a pipeline for the data set to cause filtering of sensitive data to be conducted prior to application of the SELECT method, such an order of operations may be undesirable, as filtering may occur with respect to the entire data object rather than solely the portion returned by the SELECT query. Accordingly, additionally or alternatively to specifying manipulations that occur prior to satisfying a request method, embodiments of the present disclosure can enable an owner to specify manipulations to occur subsequent to application of a called method but prior to conducting a final operation to satisfy a request.
- the service 160 may first conduct the SELECT operation against specified input data (e.g., a data object), and then pass the output of that SELECT operation to a data manipulation, such as a serverless task execution. The output of that execution can then be returned to a client device 102 to satisfy the request.
- a data manipulation such as a serverless task execution.
- the output of that execution can then be returned to a client device 102 to satisfy the request.
- FIG.3 and FIG.4 are generally described with reference to serverless tasks authored by an owner of an object or collection, in some instances the service 160 may enable code authors to share their tasks with other users of the service 160, such that code of a first user is executed in the I/O path of an object owned by a second user.
- the service 160 may also provide a library of tasks for use by each user.
- the code of a shared task may be provided to other users.
- the code of the shared task may be hidden from other users, such that the other users can execute the task but not view code of the task.
- other users may illustratively be enabled to modify specific aspects of code execution, such as the permissions under which the code will execute.
- FIGS. 5A and 5B illustrative interactions will be discussed for applying a modification to an I/O path for a request to store an object on the service 160, which request is referred to in connection with these figures as a “PUT” request or “PUT object call.” While shown in two figures, numbering of interactions is maintained across FIGS. 5A and 5B.
- the interactions begin at (1), where a client device 102A submits a PUT object call to the storage service 160, corresponding to a request to store input data (e.g., included or specified within the call) on the service 160.
- the input data may correspond, for example, to a file stored on the client device 102A.
- the call is directed to a frontend 162 of the service 162 that, at (2), retrieves from the I/O path modification data store 164 an indication of modifications to the I/O path for the call.
- the indication may reflect, for example, a pipeline to be applied to calls received on the I/O path.
- the I/O path for a call may generally be specified with respect to a request method included within a call, an object or collection of objects indicated within the call, a specific mechanism of reaching the service 160 (e.g., protocol, URI used, etc.), an identity or authentication status of the client device 102A, or a combination thereof.
- the I/O path used can correspond to use of a PUT request method directed to a particular URI (e.g., associated with the frontend 162) to store an object in a particular logical location on the service 160 (e.g., a specific bucket).
- a particular URI e.g., associated with the frontend 162
- the frontend 162 detects within the modifications for the I/O path inclusion of a serverless task execution.
- the frontend 162 submits a call to the on-demand code execution system 120 to execute the task specified within the modifications against the input data specified within the call.
- the on-demand code execution system 120 at (5), therefore generates an execution environment 502 in which to execute code corresponding to the task.
- the call may be directed to a frontend 130 of the system, which may distribute instructions to a worker manager 140 to select or generate a VM instance 150 in which to execute the task, which VM instance 150 illustratively represents the execution environment 502.
- the system 120 further provisions the environment with code 504 of the task indicated within the I/O path modification (which may be retrieved, for example, from the object data stores 166). While not shown in FIG. 5A, the environment 502 further includes other dependencies of the code, such as access to an operating system, a runtime required to execute the code, etc.
- generation of the execution environment 502 can include configuring the environment 502 with security constraints limiting access to network resources.
- the environment 502 can be configured with no ability to send or receive information via a network.
- a task is intended to utilize network resources
- access to such resources can be provided on a “whitelist” basis, such that network communications from the environment 502 are allowed only for specified domains, network addresses, or the like.
- Network restrictions may be implemented, for example, by a host device hosting the environment 502 (e.g., by a hypervisor or host operating system). In some instances, network access requirements may be utilized to assist in placement of the environment 502, either logically or physically.
- the environment 502 for the task may be placed on a host device that is distant from other network-accessible services of the service provider system 110, such as an “edge” device with a lower-quality communication channel to those services.
- a task requires access to otherwise private network services, such as services implemented within a virtual private cloud (e.g., a local-area-network-like environment implemented on the service 160 on behalf of a given user)
- the environment 502 may be created to exist logically within that cloud, such that a task execution 502 accesses resources within the cloud.
- a task may be configured to execute within a private cloud of a client device 102 that submits an I/O request.
- a task may be configured to execute within a private cloud of an owner of the object or collection referenced within the request.
- the system 120 provisions the environment with stream-level access to an input file handle 506 and an output file handle 508, usable to read from and write to the input data and output data of the task execution, respectively.
- files handle 506 and 508 may point to a (physical or virtual) block storage device (e.g., disk drive) attached to the environment 502, such that the task can interact with a local file system to read input data and write output data.
- the environment 502 may represent a virtual machine with a virtual disk drive, and the system 120 may obtain the input data from the service 160 and store the input data on the virtual disk drive. Thereafter, on execution of the code, the system 120 may pass to the code a handle of the input data as stored on the virtual disk drive, and a handle of a file on the drive to which to write output data.
- files handle 506 and 508 may point to a network file system, such as an NFS-compatible file system, on which the input data has been stored.
- the frontend 162 during processing of the call may store the input data as an object on the object data stores 166, and the file-level interface 166 may provide file-level access to the input data and to a file representing output data.
- the file handles 506 and 508 may point to files on a virtual file system, such as a file system in user space.
- the task code 504 is enabled to read the input data and write output data using stream manipulations, as opposed to being required to implement network transmissions. Creation of the handles 506 and 508 (or streams corresponding to the handles) may illustratively be achieved by execution of staging code 157 within or associated with the environment 502. [0086] The interactions of FIG.5A are continued in FIG.5B, where the system 120 executes the task code 504. As the task code 504 may be user-authored, any number of functionalities may be implemented within the code 504. However, for the purposes of description of FIGS.
- the code 504 when executed, reads input data from the input file handle 506 (which may be passed as a commonly used input stream, such as stdin), manipulates the input data, and writes output data to the output file handle 508 (which may be passed as a commonly used output stream, such as stdout). Accordingly, at (8), the system 120 obtains data written to the output file (e.g., the file referenced in the output file handle) as output data of the execution. In addition, at (9), the system 120 obtains a return value of the code execution (e.g., a value passed in a final call of the function).
- a return value of the code execution e.g., a value passed in a final call of the function.
- output data of a task execution and a return value of that execution may be returned separately.
- task code 504 may write to an output file through the handle 508, and this data may be periodically or iteratively returned to the service 160.
- the staging code may detect and forward each write to the output file to the frontend 162.
- writes to the file may directly cause the written data to be transmitted to the interface 166 and thus the service 160.
- transmitting written data iteratively may reduce the amount of storage required locally to the environment 502, since written data can, according to some embodiments, be deleted from local storage of the environment 502.
- a success return value is assumed in FIGS. 5A and 5B, other types of return value are possible and contemplated.
- an error return value may be used to indicate to the frontend 162 that an error occurred during execution of task code 504.
- user-defined return values may be used to control how conditional branching within a pipeline proceeds.
- the return value may indicate to the frontend 162 a request for further processing.
- a task execution may return to the frontend 162 a call to execute another serverless task (potentially not specified within a path modification for the current I/O path).
- return values may specify to the frontend 162 what return value is to be returned to the client device 102A.
- a typical PUT request method called at the service 160 may be expected to return an HTTP 200 code (“OK”).
- a success return value from the task code may further indicate that the frontend 162 should return an HTTP 200 code to the client device 102A.
- An error return value may, for example, indicate that the frontend 162 should return a 3XX HTTP redirection or 4XX HTTP error code to the client device 102A.
- return values may specify to the frontend 162 content of a return message to the client device 102A other than a return value.
- the frontend 162 may be configured to return a given HTTP code (e.g., 200) for any request from the client device 102A that is successfully retrieved at the frontend 162 and invokes a data processing pipeline.
- a task execution may then be configured to specify, within its return value, data to be passed to the client device 102A in addition to that HTTP code.
- Such data may illustratively include structured data (e.g., extensible markup language (XML) data) providing information generated by the task execution, such as data indicating success or failure of the task.
- structured data e.g., extensible markup language (XML) data
- XML extensible markup language
- This approach may beneficially enable the frontend 162 to quickly respond to requests (e.g., without awaiting execution of a task) while still enabling a task execution to pass information to the client device 102.
- the success return value of the task indicates that an HTTP 2XX success response should be passed to the device 102A.
- the frontend 162 stores the output data as an object within the object data stores 166, (11).
- Interaction (11) illustratively corresponds to implementation of the PUT request method, initially called for by the client device 102A, albeit by storing the output of the task execution rather than the provided input data.
- the frontend 162 After implementing the called PUT request method, the frontend 162, at (12), returns to the client device 102A the success indicator indicated by the success return value of the task (e.g., an HTTP 200 response code).
- the success indicator indicated by the success return value of the task e.g., an HTTP 200 response code.
- the object stored on the service 160 corresponds to output data of an owner-specified task, thus enabling the owner of the object greater control over the contents of that object.
- the service 160 may additionally store the input data as an object (e.g., where the owner-specified task corresponds to code executable to provide output data usable in conjunction with the input data, such as checksum generated from the input data).
- the service 160 may additionally store the input data as an object (e.g., where the owner-specified task corresponds to code executable to provide output data usable in conjunction with the input data, such as checksum generated from the input data).
- FIGS. 6A and 6B illustrative interactions will be discussed for applying a modification to an I/O path for a request to retrieve an object on the service 160, which request is referred to in connection with these figures as a “GET” request or “GET call.” While shown in two figures, numbering of interactions is maintained across FIGS.6A and 6B.
- the interactions begin at (1), where a client device 102A submits a GET call to the storage service 160, corresponding to a request to obtain data of an object (identified within the call) stored on the service 160.
- the call is directed to a frontend 162 of the service 160 that, at (2), retrieves from the I/O path modification data store 164 an indication of modifications to the I/O path for the call.
- the I/O path used can correspond to use of a GET request method directed to a particular URI (e.g., associated with the frontend 162) to retrieve an object in a particular logical location on the service 160 (e.g., a specific bucket).
- URI e.g., associated with the frontend 162
- the frontend 162 detects within the modifications for the I/O path inclusion of a serverless task execution.
- the frontend 162 submits a call to the on-demand code execution system 120 to execute the task specified within the modifications against the object specified within the call.
- the on-demand code execution system 120 at (5), therefore generates an execution environment 502 in which to execute code corresponding to the task.
- the call may be directed to a frontend 130 of the system, which may distribute instructions to a worker manager 140 to select or generate a VM instance 150 in which to execute the task, which VM instance 150 illustratively represents the execution environment 502.
- the system 120 further provisions the environment with code 504 of the task indicated within the I/O path modification (which may be retrieved, for example, from the object data stores 166). While not shown in FIG. 6A, the environment 502 further includes other dependencies of the code, such as access to an operating system, a runtime required to execute the code, etc.
- the system 120 provisions the environment with file-level access to an input file handle 506 and an output file handle 508, usable to read from and write to the input data (the object) and output data of the task execution, respectively.
- files handle 506 and 508 may point to a (physical or virtual) block storage device (e.g., disk drive) attached to the environment 502, such that the task can interact with a local file system to read input data and write output data.
- the environment 502 may represent a virtual machine with a virtual disk drive, and the system 120 may obtain the object referenced within the call from the service 160, at (6'), and store the object on the virtual disk drive.
- the system 120 may pass to the code a handle of the object as stored on the virtual disk drive, and a handle of a file on the drive to which to write output data.
- files handle 506 and 508 may point to a network file system, such as an NFS-compatible file system, on which the object has been stored.
- the file-level interface 166 may provide file-level access to the object as stored within the object data stores, as well as to a file representing output data.
- the task code 504 is enabled to read the input data and write output data using stream manipulations, as opposed to being required to implement network transmissions.
- handles 506 and 508 may illustratively be achieved by execution of staging code 157 within or associated with the environment 502. [0094] The interactions of FIG.6A are continued in FIG.6B, where the system 120 executes the task code 504 at (7). As the task code 504 may be user-authored, any number of functionalities may be implemented within the code 504. However, for the purposes of description of FIGS.
- the code 504 when executed, reads input data (corresponding to the object identified within the call) from the input file handle 506 (which may be passed as a commonly used input stream, such as stdin), manipulates the input data, and writes output data to the output file handle 508 (which may be passed as a commonly used output stream, such as stdout). Accordingly, at (8), the system 120 obtains data written to the output file (e.g., the file referenced in the output file handle) as output data of the execution. In addition, at (9), the system 120 obtains a return value of the code execution (e.g., a value passed in a final call of the function).
- a return value of the code execution e.g., a value passed in a final call of the function.
- the return value indicates success of the execution.
- the output data and the success return value are then passed to the frontend 162.
- the frontend 162 On receiving output data and the return value, the frontend 162 returns the output data of the task execution as the requested object.
- Interaction (11) thus illustratively corresponds to implementation of the GET request method, initially called for by the client device 102A, albeit by returning the output of the task execution rather than the object specified within the call. From the perspective of the client device 102A, a call to GET an object from the storage service 160 therefore results in return of data to the client device 102A as the object.
- the data provided to the client device 102A corresponds to output data of an owner-specified task, thus enabling the owner of the object greater control over the data returned to the client device 102A.
- output data of a task execution and a return value of that execution may be returned separately.
- success return value is assumed in FIGS. 6A and 6B, other types of return value are possible and contemplated, such as error values, pipeline-control values, or calls to execute other data manipulations.
- return values may indicate what return value is to be returned to the client device 102A (e.g., as an HTTP status code).
- the output data may also be iteratively provided by the frontend 162 to the client device 102A.
- iteratively returning output data to the client device 102A can enable that data to be provided as a stream, thus speeding delivery of the content to the device 102A relative to delaying return of the data until execution of the task completes.
- a serverless task may be inserted into the I/O path of the service 160 to perform functions other than data manipulation.
- a serverless task may be utilized to perform validation or authorization with respect to a called request method, to verify that a client device 102A is authorized to perform the method.
- Task-based validation or authorization may enable functions not provided natively by the service 160.
- embodiments of the present disclosure enable the owner to insert into an I/O path to the collection (e.g., a GET path using a given URI to the collection) a serverless task that determines whether the client is authorized to retrieve a requested object based on a creation time of that object.
- the return value provided by an execution of the task may correspond to an “authorized” or “unauthorized” response.
- a task does not perform data manipulation, it may be unnecessary to provision an environment of the task execution with input and output stream handles. Accordingly, the service 160 and system 120 can be configured to forego provisioning the environment with such handles in these cases.
- Whether a task implements data manipulation may be specified, for example, on creation of the task and stored as metadata for the task (e.g., within the object data stores 166). The service 160 may thus determine from that metadata whether data manipulation within the task should be supported by provisioning of appropriate stream handles. [0098] While some embodiments may utilize return values without use of stream handles, other embodiments may instead utilize stream handles without use of return values.
- the system 120 may be configured to detect completion of a function based on interaction with an output stream handle.
- staging code within an environment e.g., providing a file system in user space or network-based file system
- the staging code may interpret such a call as successful completion of the function, and notify the service 160 of successful completion without requiring the task execution to explicitly provide return value.
- such information may include the content of the request from the client device 102 (e.g., the HTTP data transmitted), metadata regarding the request (e.g., a network address from which the request was received or a time of the request), metadata regarding the client device 102 (e.g., an authentication status of the device, account time, or request history), or metadata regarding the requested object or collection (e.g., size, storage location, permissions, or time created, modified, or accessed).
- metadata regarding the request e.g., a network address from which the request was received or a time of the request
- metadata regarding the client device 102 e.g., an authentication status of the device, account time, or request history
- metadata regarding the requested object or collection e.g., size, storage location, permissions, or time created, modified, or accessed.
- task executions may be configured to modify metadata regarding input data, which may be stored together with the input data (e.g., within the object) and thus written by way of an output stream handle, or which may be separately stored and thus modified by way of a metadata stream handle, inclusion of metadata in a return value, or separate network transmission to the service 160.
- an illustrative routine 700 for implementing owner-defined functions in connection with an I/O request obtained at the object storage service of FIG. 1 over an I/O path will be described.
- the routine 700 may illustratively be implemented subsequent to association of an I/O path (e.g., defined in terms of an object or collection, a mechanism of access to the object or collection, such as a URI, an account transmitting an IO request, etc.) with a pipeline of data manipulations.
- an I/O path e.g., defined in terms of an object or collection, a mechanism of access to the object or collection, such as a URI, an account transmitting an IO request, etc.
- the routine 700 may be implemented prior to the interactions of FIG. 3, discussed above.
- the routine 700 is illustratively implemented by a frontend 162. [0101]
- the routine 700 begins at block 702, where the frontend 162 obtains a request to apply an I/O method to input data.
- the request illustratively corresponds to a client device (e.g., an end user device).
- the I/O method may correspond, for example, to an HTTP request method, such as GET, PUT, LIST, DELETE, etc.
- the input data may be included within the request (e.g., within a PUT request), or referenced in the request (e.g., as an existing object on the object storage service 160.
- the frontend 162 determines one or more data manipulations in the I/O path for the request.
- the I/O path may be defined based on a variety of criteria (or combinations thereof), such as the object or collection referenced in the request, a URI through which the request was transmitted, an account associated with the request, etc.
- Manipulations for each defined I/O path may illustratively be stored at the object storage service 160. Accordingly, at block 704, the frontend 162 may compare parameters of the I/O path for the request to stored data manipulations at the object storage service 160to determine data manipulations inserted into the I/O path.
- the manipulations form a pipeline, such as the pipeline 400 of FIG.4, which may be previously stored or constructed by the frontend 162 at block 704 (e.g., by combining multiple manipulations that apply to the I/O path).
- an additional data manipulation may be specified within the request, which data manipulation may be inserted, for example, prior to pre-specified data manipulations (e.g., not specified within the request).
- the request may exclude reference to any data manipulation.
- the frontend 162 passes input data of the I/O request to an initial data manipulation for the I/O path.
- the initial data manipulation may include, for example, a native manipulation of the object storage service 160 or a serverless task defined by an owner of the object or collection referenced in the call.
- the frontend 162 may pass the input to the object manipulation engine 170 of FIG. 1.
- the frontend 162 can pass the input to the on-demand code execution system 120 of FIG.1 for processing via an execution of the task.
- FIG. 7 illustratively describes data manipulations
- other processing may be applied to an I/O path by an owner.
- an owner may insert into an I/O path for an object or collection a serverless task that provides authentication independent of data manipulation.
- block 706 may be modified such that other data, such as metadata regarding a request or an object specified in the request, is passed to an authentication function or other path manipulation.
- the routine 700 proceeds to block 708, where the implementation of the routine 700 varies according to whether additional data manipulations have been associated with the I/O path.
- routine 700 proceeds to block 710, where an output of a prior manipulation is passed to a next manipulation associated with the I/O path (e.g., a subsequent stage of a pipeline). [0106] Subsequent to block 710, the routine 700 then returns to block 708, until no additional manipulations exist to be implemented. The routine 700 then proceeds to block 712, where the frontend 162 applies the called I/O method (e.g., GET, PUT, POST, LIST, DELETE, etc.) to the output of the prior manipulation. For example, the frontend 162 may provide the output as a result of a GET or LIST request, or may store the output as a new object as a result of a PUT or POST request.
- I/O method e.g., GET, PUT, POST, LIST, DELETE, etc.
- the frontend 162 may further provide a response to the request to a requesting device, such as an indication of success of the routine 700 (or, in cases of failure, failure of the routine).
- the response may be determined by a return value provided by a data manipulation implemented at blocks 706 or 710 (e.g., the final manipulation implemented before error or success).
- a manipulation that indicates an error e.g., lack of authorization
- a manipulation that proceeds successfully may instruct the frontend 162 to return an HTTP code indicating success, or may instruct the frontend 162 to return a code otherwise associated with application of the I/O method (e.g., in the absence of data manipulations).
- the routine 700 thereafter ends at block 714.
- routine 700 enables an owner of data objects to assert greater control over I/O to an object or collection stored on the object storage service 160 on behalf of the owner.
- additional or alternative blocks may be included within the routine 700, or implementation of such blocks may include additional or alternative operations.
- serverless task executions may provide a return value.
- this return value may instruct a frontend 162 as to further actions to take in implementing the manipulation.
- an error return value may instruct the frontend 162 to halt implementation of manipulations, and provide a specified error value (e.g., an HTTP error code) to a requesting device.
- a specified error value e.g., an HTTP error code
- Another return value may instruct the frontend 162 to implement an additional serverless task or manipulation.
- the routine 700 may in some cases be modified to include, subsequent to blocks 706 and 710 for example, handling of the return value of a prior manipulation (or block 708 may be modified to include handling of such a value).
- routine 700 is intended to be illustrative in nature.
- an illustrative routine 800 will be described for executing a task on the on-demand code execution system of FIG. 1 to enable data manipulations during implementation of an owner-defined function.
- the routine 800 is illustratively implemented by the on-demand code execution system 120 of FIG.1.
- the routine 800 begins at block 802, where the system 120 obtains a call to implement a stream manipulation task (e.g., a task that manipulations data provided as an input IO stream handle). The call may be obtained, for example, in conjunction with blocks 706 or 710 of the routine 700 of FIG.7.
- a stream manipulation task e.g., a task that manipulations data provided as an input IO stream handle
- the call may include input data for the task, as well as other metadata, such as metadata of a request that preceded the call, metadata of an object referenced within the call, or the like.
- the system 120 generates an execution environment for the task.
- Generation of an environment may include, for example, generation of a container or virtual machine instance in which the task may execute and provisioning of the environment with code of the task, as well as any dependencies of the code (e.g., runtimes, libraries, etc.).
- the environment is generated with network permissions corresponding to permissions specified for the task. As discussed above, such permissions may be restrictively (as opposed to permissively) set, according to a whitelist for example.
- the environment may lack network access. Because the task operates to manipulate streams, rather than network data, this restrictive model can increase security without detrimental effect on functionality.
- the environment may be generated at a logical network location providing access to otherwise restricted network resources.
- the environment may be generated within a virtual private local area network (e.g., a virtual private cloud environment) associated with a calling device.
- the system 120 stages the environment with an IO stream representing to input data.
- the system 120 may configure the environment with a file system that includes the input data, and pass to the task code a handle enabling access of the input data as a file stream.
- the system 120 may configure the environment with a network file system, providing network-based access to the input data (e.g., as stored on the object storage system).
- the system 120 may configure the environment with a “local” file system (e.g., from the point of view of an operating system providing the file system), and copy the input data to the local file system.
- the local file system may, for example, be a filesystem in user space (FUSE).
- the local file system may be implemented on a virtualized disk drive, provided by the host device of the environment or by a network-based device (e.g., as a network-accessible block storage device).
- the system 120 may provide the IO stream by “piping” the input data to the execution environment, by writing the input data to a network socket of the environment (which may not provide access to an external network), etc.
- the system 120 further configures the environment with stream-level access to an output stream, such as by creating a file on the file system for the output data, enabling an execution of the task to create such a file, piping a handle of the environment (e.g., stdout) to a location on another VM instance colocated with the environment or a hypervisor of the environment, etc..
- the task is executed within the environment.
- Execution of the task may include executing code of the task, and passing to the execution handles or handles of the input stream and output stream.
- the system 120 may pass to the execution a handle for the input data, as stored on the file system, as a “stdin” variable.
- the system may further pass to the execution a handle for the output data stream, e.g., as a “stdout” variable.
- the system 120 may pass other information, such as metadata of the request or an object or collection specified within the request, as parameters to the execution.
- the code of the task may thus execute to conduct stream manipulations on the input data according to functions of the code, and to write an output of the execution to the output stream using OS- level stream operations.
- the routine 800 then proceeds to block 810, where the system 120 returns data written to the output stream as output data of the task (e.g., to the frontend 162 of the object storage system).
- block 810 may occur subsequent to the execution of the task completing, and as such, the system 120 may return the data written as the complete output data of the task. In other instances, block 810 may occur during execution of the task. For example, the system 120 may detect new data written to the output stream and return that data immediately, without awaiting execution of the task.
- the system 120 may delete data of the output file after writing, such that sending of new data immediately obviates a need for the file system to maintain sufficient storage to store all output data of the task execution. Still further, in some embodiments, block 810 may occur on detecting a close of the output stream handle describing the output stream. [0115]
- the system 120 returns a return value provided by the execution (e.g., to the frontend 162 of the object storage system).
- the return value may specify an outcome of the execution, such as success or failure. In some instances, the return value may specify a next action to be undertaken, such as implementation an additional data manipulation.
- the return value may specify data to be provided to a calling device requesting an I/O operation on a data object, such as an HTTP code to be returned.
- a data object such as an HTTP code to be returned.
- the frontend 162 may obtain such return value and undertake appropriate action, such as returning an error or HTTP code to a calling device, implementing an additional data manipulation, performing an I/O operation on output data, etc.
- a return value may be explicitly specified within code of the task. In other instances, such as where no return value is specified within the code, a default return value may be returned (e.g., a ‘1’ indicating success).
- the routine 800 then ends at block 814.
- FIG.9 is a flow diagram of an illustrative routine 900 that may be executed by a code execution service, such as the on-demand code execution system 120.
- the routine 900 may be used to dynamically concatenate or otherwise combine multiple data objects or portions thereof at run time (“on-the-fly”) in response to a request for a data object.
- the routine 900 may be used to generate a response that includes a composite of multiple data objects, portions thereof, or data derived therefrom, even if the request does not reference any or all of the multiple data objects.
- FIG. 10 is a system diagram of illustrative data flows and interactions between various components of the service provider system 110.
- the routine 900 may begin in response to an event, such as when the routine illustrated in FIG. 8 reaches block 808.
- the routine 900 may be automatically performed in response to a request from a requestor (e.g., a request for data stored in the object storage service 160), without the request specifying that the routine 900 is to be performed prior to or during generation of a response to the request.
- the routine 900 may be a user-defined task, owner-defined function, or the like (referred to herein simply as a “function” for convenience), in the form of task code 504 that is performed by a VM instance 150 or other execution environment 502 generated during the routine illustrated in FIG.8.
- the routine 900 or portions thereof may be implemented on multiple processors, serially or in parallel.
- routine 900 may not be provided directly as the response to the request, but rather may be used by down-stream processes in preparing the response to the request.
- the output of the routine 900 (also referred to herein as “function output”) may be further processed by another routine in a pipeline, or processed by the object storage service 160 prior to sending a response to the request. Accordingly, descriptions of generating a response may be interpreted as descriptions of generating function output, and vice versa.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can receive parameters associated with a request for a data object.
- FIG.10 illustrates the execution environment 502 receiving parameters associated with the request at (1).
- the parameters may include: reference data comprising a reference to a requested data object; reference data comprising a reference to an output location at which output of the function is to be stored for use by the object storage service 160 in responding to the request; context data regarding the request; other data; or some combination thereof.
- the request may be a resource request, such as a GET request, for a particular data object stored in the object storage service 160.
- the reference to the requested data object may be data that can be used by the execution environment 502 to access the requested data object, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of the requested data object.
- the reference to the output location for responding to the request may be data that can be used by the execution environment 502 to write, store, or otherwise provide function output data, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of a location for providing output of the function.
- the context data may include data regarding the context of the request, such as: an identifier of a user, account or other source of the request; an identifier of an access or security profile under which the request is being make; data representing the access or security rights under which the request is to be processed; an identifier of a location associated with the request; an identifier of a language associated with the request; or data representing preferences or tendencies of a source of the request.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can determine that a response (or function output, if the current instance of the routine 900 is part of a pipeline) is to be generated using one or more additional data objects stored in the object storage service 160.
- the determination may be based on context data and/or the requested data object. For example, data objects in a particular collection may be required to be concatenated with or otherwise combined with one or more additional data objects when requested. If the requested data object is in the particular collection, then one or more additional data objects may be combined with the requested data object to produce function output.
- configuration data such as a record stored in the object storage service 160 or some other data store may identify the additional data object(s) to be combined with the requested data object.
- the execution environment 502 may access the record during the routine 900 to determine whether to perform a combination and which additional data object(s) to combine with the requested data object. In this way, the identity of the additional data object(s) can easily be changed without requiring programming changes to the task code 504 executed by the execution environment 502.
- the execution environment 502 may test one or more items of context data against one or more criteria to determine whether to perform a combination and which additional data object(s) to combine with the requested data object.
- the execution environment 502 can determine that the requested data object is to be combined with one or more additional data objects, and also determine the identity of the additional object(s).
- the requested data object may be a media file, such as a video file, audio file, or the like.
- the media file may belong to a collection of media files, such as a bucket owned or managed by an entity.
- the entity may specify that an additional media file, such as an introduction, preview, or advertisement, may be required to be combined with, or otherwise included in a response with, each media file in the collection.
- the execution environment 502 may determine that the requested data object is a media file in the collection and, based on this property of the media file, the execution environment 502 may determine that the additional media file is to be included in the response.
- the identity of the additional media file (or files) may be specified by the code used to perform the determination, or it may be determined dynamically at run time (e.g., by accessing configuration data in a data store).
- the requested data object may be a data file, such as a spreadsheet, delimited file, or other collection of data records.
- the data records may form a subset of the data records that are to be returned in response to a request for the data object.
- the execution environment 502 may determine that a response to the request is to be generated using one or more additional data objects, such as additional data files comprising additional subsets of data records.
- the specific additional data object(s) may be dynamically determined based on context associated with the request, a property of the requested data object (e.g., the bucket in which the requested data object is stored), etc. For example, a subset of regional data records from one or more additional data objects may be identified based on a location associated with the request, and may be combined with the requested data object when responding to the request.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can obtain a reference to the additional data object(s).
- the execution environment 502 may request, receive, or otherwise have access to a mechanism by which the execution environment 502 can communicate with the object storage service 160 to request data dynamically determined during execution of the routine 900 (e.g., after the execution environment 502 has been staged and provided with access to the requested data object).
- the execution environment 502 may receive a reference to a network socket (e.g., a control plane handle) which the execution environment 502 can use to make additional requests to the object storage service 160. Using this mechanism, the execution environment 502 can request and receive a reference (e.g., file handle, pointer, etc.) for the additional data object(s).
- FIG. 10 illustrates the execution environment 502 obtaining the reference(s) to the additional data object(s) at (2).
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can obtain an initial data object to be used in responding to the request.
- the initial data object is “initial” in the sense that it is obtained and/or used prior to one or more subsequent data objects.
- the initial data object may be the requested data object or an additional data object, depending upon how the response is to be structured. For example, if an additional data object such as an introduction or preview is to be provided before the requested data object, the execution environment 502 can use the reference to the additional data object to access the additional data object. As another example, if an additional data object is to be inserted into or provided after the requested data object, the execution environment 502 can use the reference to the requested data object to access the requested data object.
- FIG. 10 illustrates the execution environment 502 obtaining the initial data object at (3).
- the initial data object may not be obtained from the object storage service 160 at block 908, but may be provided to the execution environment 502 previously.
- the initial data object (e.g., the requested data object) may be obtained and stored on a computing device of the execution environment 502.
- the additional data object may be obtained and stored on a computing device of the execution environment 502 at a location indicated by the reference data.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can prepare the initial part of the response using the initial data object obtained above.
- FIG. 10 illustrates the execution environment 502 preparing the initial part of the response at (4). Preparing the initial part of the response may involve writing a least a portion of the initial data object using the reference to the output location for responding to the request.
- execution environment 502 can determine whether to include the entire initial data object, or a portion thereof, in the response. As another example, the execution environment 502 may determine whether to modify the initial data object or a portion thereof, such as by removing data, adding data, altering data, changing the format of the initial data object, changing metadata associated with the data object, or the like. Illustratively, the execution environment 502 may add or modify a header for the initial data object, adjust the formatting of the initial data object to be compatible with subsequent data objects, etc. These determinations may be based on parameters received above (e.g., a property of the requested data object, context data, etc.). The execution environment 502 can then place the determined data at the output location.
- parameters received above e.g., a property of the requested data object, context data, etc.
- the execution environment 502 may first store the initial data in a temporary internal storage location for later placement in the output location.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can determine whether there is additional data to be included in the response. As discussed above, the response may be based on the requested data object and one or more additional data objects. The execution environment 502 can determine whether all data has been included. If not, the routine 900 may proceed to block 914. Otherwise, if all data to be included in the response has been included, the routine 900 may proceed to block 918.
- FIG. 10 illustrates the execution environment 502 determining that additional data is to be included in the response at (5).
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can obtain a subsequent data object to be used in responding to the request.
- the subsequent data object may be the requested data object or an additional data object, depending upon how the response is to be structured.
- the subsequent data object is “subsequent” in the sense that it is obtained or used after the initial data object. For example, if an additional data object such as an introduction or preview was access and included in the initial part of the response as discussed above, the execution environment 502 can use the reference to the requested data object to access the requested data object for inclusion in a subsequent part of the response.
- FIG. 10 illustrates the execution environment 502 obtaining the subsequent data object at (6).
- the subsequent data object may not be obtained from the object storage service 160 at block 914, but may be provided to the execution environment 502 previously.
- the subsequent data object e.g., the requested data object
- the subsequent data object may be obtained and stored on a computing device of the execution environment 502.
- the additional data object may be obtained and stored on a computing device of the execution environment 502 at a location indicated by the reference data.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can prepare the subsequent part of the response using the subsequent data object obtained above.
- FIG. 10 illustrates the execution environment 502 preparing the subsequent part of the response at (7).
- Preparing the subsequent part of the response may involve writing a least a portion of the subsequent data object using the reference to the output location for responding to the request.
- execution environment 502 can determine whether to include the entire subsequent data object, or a portion thereof, in the response.
- the execution environment 502 may determine whether to modify the subsequent data object or a portion thereof, such as by removing data, adding data, altering data, changing the format of the subsequent data object, changing metadata associated with the data object, or the like.
- the execution environment 502 may remove a header from subsequent data objects, adjust the formatting of subsequent data objects to be compatible with the initial data object, etc.
- the execution environment 502 can then place the determined data at the output location. In some embodiments, the execution environment 502 may first store the initial data in a temporary internal storage location for later placement in the output location. The routine 900 may return to decision block 912 to determine whether additional data is to be included in the response. [0129] At block 918, task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can finalize the output of the function.
- Finalizing output of the function may include closing an output stream or file identified by the reference to the output location and/or providing a return value (e.g., indicating success, failure, or some other characteristic of function execution) to the object storage service 160.
- additional processing may be performed prior to closing the output stream.
- the execution environment 502 may generate and write metadata describing properties of the of the output, such as the size of the output or header information for use by a device consuming the output.
- the routine may terminate at block 920.
- output of the function may be cached so that the function does not need to retrieve and process the requested data object(s) and/or additional data object(s) each time the objects are to be used.
- the function may determine whether the function output has been cached and, if so, whether the cached output has expired. If the cached output has not expired, the function may obtain the cached function output and provide it as the output of the function, or derive current function output from the cached function output.
- the function output may be cached locally within the execution environment (e.g., on the server machine on which the task code 504 or other functional unit of the VM instance 150 is running), or in a network-accessible data store (e.g., a high-speed dedicated cache server, a cache portion of the object storage service 160, etc.).
- cached function output may be tagged or otherwise associated with the context data that was used to determine which data objects to combine to produce the output.
- the function may analyze the associated context data to determine which cached output, if any, is appropriate for use in responding to a subsequent request based on the context data associated with the subsequent request.
- data objects provided as input to the function or otherwise accessed by the function during execution may be cached so that they do not need to be obtained from the object storage service 160 each time the function is executed.
- the data object that is requested and provided by the routine 900 may not be a data object (or portion thereof) stored as such in the object storage service 160. Instead, the routine 900 may dynamically generate a composite object definition, such as a manifest, that references one or more stored data objects or portions thereof, or that includes data derived from one or more stored data objects.
- the requested data object may be media content that corresponds to a data object in the object storage service 160, and an additional data object such as an introduction may be required to be presented prior to the data object.
- the routine 900 may generate a manifest that can be used by a computing device to submit follow-up requests for individual data objects in the correct sequence as dynamically determined during execution of the routine 900.
- the initial data object is the additional data object, and preparation of the initial portion of the response includes referencing the additional data object in the manifest.
- the subsequent data object is the data object for the requested media content, and preparation of the of the subsequent portion of the response includes referencing the data object in the manifest.
- the requested data object, and the output produced by the function is the manifest, which is dynamically generated using data regarding data objects stored in the object storage service 160.
- the requested data object may not be a data object that is actually stored in the object storage service 160.
- the request may include or reference a manifest of data objects (or portions thereof) stored in the object storage service 160. Instead of obtaining the referenced data objects or portions and returning them in combined form (either in a single data stream, or as a combination of multiple data steams), the routine 900 may determine to add and/or remove data objects or portions thereof to and/or from those listed in the manifest.
- routine 900 may use any of the methods described above for determining which additional data object or objects—not specifically requested—are to be included in a response to a request.
- the routine 900 may then provide output that is a combination of the dynamically determined set of data objects or portions, either in a single data stream or as a combination of multiple data streams.
- FIG. 11 is a flow diagram of an illustrative routine 1100 that may be executed by a code execution service, such as the on-demand code execution system 120, to dynamically mask, scramble, obscure, or otherwise render unintelligible (collectively referred to herein as “obfuscate” for convenience) portions of a requested data object at run time in response to a request for the data object.
- code execution service such as the on-demand code execution system 120
- routine 1100 may not be provided directly as the response to the request, but rather may be used by down-stream processes in preparing the response to the request.
- the function output may be further processed by another routine in a pipeline, or processed by the object storage service 160 prior to sending a response to the request. Accordingly, descriptions of generating a response may be interpreted as descriptions of generating function output, and vice versa.
- FIG. 12 is a system diagram of illustrative data flows and interactions between various components of the service provider system 110.
- the routine 1100 may begin in response to an event, such as when the routine illustrated in FIG. 8 reaches block 808.
- the routine 1100 may be automatically performed in response to a request from a requestor (e.g., a request for data stored in the object storage service 160), without the request specifying that the routine 1100 is to be performed prior to or during generation of a response to the request.
- the routine 1100 may be an owner-defined function, also referred to as a user-defined task, that is performed by a VM instance 150 or other execution environment 502 generated during the routine illustrated in FIG.8.
- the routine 1100 or portions thereof may be implemented on multiple processors, serially or in parallel.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can receive parameters associated with a request for a data object.
- FIG. 12 illustrates the execution environment 502 receiving the parameters associated with the request at (1).
- the parameters may include: reference data comprising a reference to a requested data object; a reference to an output location at which output of the function is to be stored for use by the object storage service 160 in responding to the request; context data regarding the request; other data; or some combination thereof.
- the request may be a resource request, such as a GET or SELECT request, for a particular dataset or other data object stored in the object storage service 160.
- the reference to the requested data object may be data that can be used by the execution environment 502 to access the requested data object, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of the requested data object.
- the reference to the output location for responding to the request may be data that can be used by the execution environment 502 to write, store, or otherwise provide output data, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of a location for providing output of the function.
- the context data may include data regarding the context of the request, such as: an identifier of a user, account or other source of the request; an identifier of an access or security profile under which the request is being make; data representing the access or security rights under which the request is to be processed; an identifier of a location associated with the request; an identifier of a language associated with the request; or data representing preferences or tendencies of a source of the request.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can obtain the requested data object using the reference data.
- the requested data object may be obtained in un-obfuscated or substantially un-obfuscated form.
- FIG.12 illustrates the execution environment 502 obtaining the requested data object at (2).
- the requested data object may not be obtained from the object storage service 160 at block 1104, but may be provided to the execution environment 502 previously.
- the requested data object may be obtained and stored on a computing device of the execution environment 502 at a location indicated by the reference data.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can determine that one or more portions of the requested data object are to be obfuscated. In some embodiments, the determination may be based on context data and/or the requested data object.
- the execution environment 502 may test one or more items of context data against one or more criteria to determine whether to perform an obfuscation and which portion(s) of the requested data object to obfuscate. If an item of context data satisfies one or more criteria, then the execution environment 502 can determine that one or more portions of the requested data object are to be obfuscated such that a recipient of the response to the request is unable to understand the obfuscated portion(s). A different request for the same data object, but associated with different context data or other properties, may lead to a different result when testing the criteria and determining whether to obfuscate portions of the data object.
- different portions of a requested data object may be associated with different criteria for un-obfuscated access.
- the execution environment 502 may test the criteria for each of the associated portions.
- FIG.12 illustrates the execution environment 502 determining to obfuscate portions of the requested data object at (3).
- Testing the context data against the criteria may include: determining that a source of the request is prohibited from accessing the portion in un-obfuscated form, determining that a location associated with the request is prohibited from accessing the portion in un-obfuscated form, or determining than an access right or security profile associated with the request is prohibited from accessing the portion in un-obfuscated form.
- testing the testing of context data against the criteria may be performed to determine that a portion of the requested data object is permitted to accessed in un-obfuscated form, rather than determining that the portion is prohibited from being accessed in un-obfuscated form.
- testing the context data against the criteria may include: determining that a source of the request is permitted to access the portion in un-obfuscated form, determining that a location associated with the request is permitted to access the portion in un-obfuscated form, or determining than an access right or security profile associated with the request is permitted to access the portion in un-obfuscated form.
- the requested data object may be a data file, such as a spreadsheet, delimited file, or other collection of data records. Some portions of the data file, such as collections of records, collections of columns or data fields, or the like may only be permitted to be accessed in un-obfuscated form if the request satisfies one or more criteria.
- the execution environment 502 may determine that properties of the request indicated by the context data or otherwise associated with the request fail to satisfy the criteria for particular records, columns, and/or fields of the requested data object.
- the execution environment 502 may determine, based on this failure to satisfy the criteria, that the particular records, columns, and/or fields of the requested data object are to be obfuscated prior to being provided as output of the function. [0140] At block 1108, task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can selectively apply obfuscation to portions of the requested data object determined above.
- FIG. 12 illustrates the execution environment 502 obfuscating portions of the requested data object at (4).
- Obfuscating the content of a portion of the requested data object may involve the use of one or more obfuscation methods, such as scrambling the content in a pseudo random method, generating a hash of the content, replacing the content with a token, or the like.
- the task code 504 may identify a token mapped to the content in a data store such as a key-value database, a relational database, the object storage service 160, or another network-accessible data store.
- different obfuscation methods may be used for different portions of a data object, different data objects, different context data criteria, or the like.
- the obfuscation method may be specified by an entity that owns or is responsible for the data object.
- an entity may specify that particular type of obfuscation (e.g., an industry standard obfuscation method in the medical field) is to be used for a data object or bucket of data objects, while another entity may specify that a different type of obfuscation (e.g., tokenization using a mapping of tokens to data) is to be used for a different data object or bucket of data objects.
- a different type of obfuscation e.g., tokenization using a mapping of tokens to data
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can provide the selectively-obfuscated requested data object as output of the function.
- the execution environment 502 can place the selectively-obfuscated requested data object at the output location indicated by the reference data, and finalize the output.
- Finalizing output of the function may include closing the output stream or file identified by the reference to the output location and/or providing a return value (e.g., indicating success, failure, or some other characteristics of function execution) to the object storage service 160.
- FIG. 12 illustrates the execution environment 502 providing the selectively-obfuscated requested data object as output at (5).
- the routine 1100 may terminate at block 1112.
- output of the function may be cached so that the function does not need to retrieve and process requested data objects to generate selectively- obfuscated data objects each time the objects are to be used. Instead, the function may determine whether the function output has been cached and, if so, whether the cached output has expired. If the cached output has not expired, the function may obtain the cached function output and provide it as the output of the function, or derive current function output from the cached function output.
- the function output may be cached locally within the execution environment (e.g., on the server machine on which the task code 504 or other functional unit of the VM instance 150 is running), or in a network-accessible data store (e.g., a high-speed dedicated cache server, a cache portion of the object storage service 160, etc.).
- cached function output may be tagged or otherwise associated with the context data that was used to determine which portions of the requested data object to selectively obfuscate. In this way, the function may analyze the associated context data to determine which cached output, if any, is appropriate for use in responding to a subsequent request based on the context data associated with the subsequent request.
- FIG. 13 is a flow diagram of an illustrative routine 1300 that may be executed by a code execution service, such as the on-demand code execution system 120, to dynamically determine at run time a filtered subset of a requested data object to provide in response to a request for the data object.
- a code execution service such as the on-demand code execution system 120
- portions of the routine 1300 are described as generating a response to a request for a data object, in some embodiments the output of the routine 1300 may not be provided directly as the response to the request, but rather may be used by down-stream processes in preparing the response to the request.
- the function output may be further processed by another routine in a pipeline, or processed by the object storage service 160 prior to sending a response to the request. Accordingly, descriptions of generating a response may be interpreted as descriptions of generating function output, and vice versa.
- FIG. 14 is a system diagram of illustrative data flows and interactions between various components of the service provider system 110.
- the routine 1300 may begin in response to an event, such as when the routine illustrated in FIG. 8 reaches block 808.
- the routine 1300 may be automatically performed in response to a request from a requestor (e.g., a request for data stored in the object storage service 160), without the request specifying that the routine 1300 is to be performed prior to or during generation of a response to the request.
- the routine 1300 may be an owner-defined function, also referred to as a user-defined task, that is performed by a VM instance 150 or other execution environment 502 generated during the routine illustrated in FIG.8.
- the routine 1300 or portions thereof may be implemented on multiple processors, serially or in parallel.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can receive parameters associated with a request for a data object.
- the parameters may include: reference data comprising a reference to a requested data object; a reference to an output location at which output of the function is to be stored for use by the object storage service 160 in responding to the request; context data regarding the request; other data; or some combination thereof.
- the request may be a resource request, such as a GET request, for a particular data object stored in the object storage service 160.
- the reference to the requested data object may be data that can be used by the execution environment 502 to access the requested data object, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of the requested data object.
- the reference to the output location for responding to the request may be data that can be used by the execution environment 502 to write, store, or otherwise provide output data, such as: a file descriptor; a file handle; a pointer; or some other data representing an address or identifier of a location for providing output of the function.
- the context data may include data regarding the context of the request, such as: an identifier of a user, account or other source of the request; an identifier of an access or security profile under which the request is being make; data representing the access or security rights under which the request is to be processed; an identifier of a location associated with the request; an identifier of a language associated with the request; or data representing preferences or tendencies of a source of the request.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can obtain the requested data object using the reference data.
- FIG. 14 illustrates the execution environment 502 obtaining the requested data object at (2).
- the requested data object may not be obtained from the object storage service 160 at block 1104, but may be provided to the execution environment 502 previously.
- the requested data object may be obtained and stored on a computing device of the execution environment 502 at a location indicated by the reference data.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can determine that one or more portions of the requested data object are to be excluded from the output of the function and thus not provided to a requesting device in response to the request.
- the determination may be based on context data and/or the requested data object.
- the execution environment 502 may test one or more items of context data against one or more criteria to determine whether to exclude a portion or portions of the requested data object, and to determine which portion(s) of the requested data object to exclude. If an item of context data satisfies one or more criteria, then the execution environment 502 can determine that one or more portions of the requested data object are to be excluded from output of the function.
- a different request for the same data object, but associated with different context data or other properties, may lead to a different result when testing the criteria and determining whether to exclude portions of the data object.
- different portions of a requested data object may be associated with different criteria for exclusion.
- the execution environment 502 may test the criteria for each of the associated portions.
- Testing the context data against the criteria may include: determining that a source of the request is prohibited from accessing the portion, determining that a location associated with the request is prohibited from accessing the portion, or determining than an access right or security profile associated with the request is prohibited from accessing the portion.
- testing of context data against the criteria may be performed to determine that a portion of the requested data object is permitted to accessed, rather than determining that the portion is prohibited from being accessed.
- testing the context data against the criteria may include: determining that a source of the request is permitted to access the portion, determining that a location associated with the request is permitted to access the portion, or determining than an access right or security profile associated with the request is permitted to access the portion.
- FIG. 14 illustrates the execution environment 502 determining to exclude portions of the requested data object at (3). In some embodiments, as shown, there may be multiple request sources 1402 and 1404.
- Requests from these request sources 1402 and 1404 may be handled differently by the execution environment 502 such that outputs of the function, and the responses ultimately returned to the respective request sources 1402 and 1404, may be different even if the same data object is requested by both request sources 1402 and 1404.
- the difference in the way the requests are handled may be based on different users using the different request sources 1402 and 1404, the different request sources 1402 and 1404 being in different geographic regions, or the different access permissions assigned to the request sources 1402 and 1404 themselves.
- an owner of a bucket of data objects stored on the object storage service 160 may configure multiple distinct request sources or “portals” (e.g., servers providing interfaces to the object storage service 160) for accessing the data objects in the bucket.
- the requested data object may be a data file, such as a spreadsheet, delimited file, tabular data file, structured data file, or other collection of data records.
- Some portions of the data file such as subsets of records, subsets of columns, subsets of data fields or classes (e.g., those storing personally identifiable information or “PII”) and the like may only be permitted to be accessed if the request satisfies one or more criteria. For example, portions may only be accessed if the request is associated with certain access rights.
- portions may only be accessed if a source of the request is associated with a particular location or region. As a further example, portions may only be accessed if the request is received from a particular source or subset of sources (e.g., portals, endpoints, etc.).
- the execution environment 502 may determine that properties of the request indicated by the context data or otherwise associated with the request satisfy criteria for particular portions of the requested data object to be excluded from the response (or, alternatively, fail to satisfy the criteria for particular portions of the requested data object to be included in the response). The execution environment 502 may determine, based on this test with respect to one or more criteria, that the particular portions of the requested data object are to be excluded from output of the function.
- the requested data object may have metadata, such as data representing an author, editor, creation date, modification date, size, format, location, version, image capture or encoding properties, audio capture or encoding properties, video capture or encoding properties, camera properties, hardware capabilities, software capabilities, and the like.
- the metadata may be embedded within the data object (e.g., in a header or reserved portion of the data object), or externally associated with the data object (e.g., in a directory).
- portions of the metadata may only be permitted to be accessed if the request satisfies one or more criteria (or, alternatively, may be prohibited from being accessed if the request satisfies one or more criteria). For example, portions may only be accessed if the request is associated with certain access rights. As another example, portions may only be accessed if a source of the request is associated with a particular location or region. As a further example, portions may only be accessed if the request is received from a particular source or subset of sources (e.g., portals, endpoints, etc.).
- sources e.g., portals, endpoints, etc.
- the execution environment 502 may determine that properties of the request indicated by the context data or otherwise associated with the request fail to satisfy the criteria for particular portions of the requested data object.
- the execution environment 502 may determine, based on this failure to satisfy the criteria, that the particular portions of the metadata of the requested data object are to be excluded from output of the function such that they are not accessible in the response to the request or by other downstream functions in a pipeline.
- different portions of metadata for a requested data object may be associated with different criteria access. In such cases, the execution environment 502 may test the criteria for each of the associated portions.
- the requested data objects that may be processed using this function are not limited to data objects stored as such on the object storage service 160.
- a requested data object may be a dynamically-generated data object, such as a data object comprising data regarding other data objects stored on the object storage service 160.
- a resource request such as the LIST request is not a request for a pre-existing data object stored on the object storage service 160, but rather a request for information regarding data objects stored the object storage server 160, such as a list of data objects in a particular data object group (e.g., a bucket or directory) of the object storage service 160, information regarding the data object groups of the object storage service 160, information regarding data objects used to represent users or groups of users of the object storage service 160, etc.
- the requested information may be identifiers, summaries, directory information, metadata, or the like.
- sources e.g., portals, endpoints, etc.
- the execution environment 502 may determine, based on this failure to satisfy the criteria, that the particular data objects are not to be identified in output of the function such that they are not identified in the response to the request or by other downstream functions in a pipeline.
- different data objects may be associated with different criteria access. In such cases, the execution environment 502 may test the criteria for each of the associated data objects.
- the requested data object that may be processed using this function may be transformed instead of, or in addition to, having portions of the data object excluded from output of the function.
- the transformations may include modifications to data, modifications to formatting, application of encryption, etc.
- the execution environment 502 may determine, for a resource request such as a GET request for a media file, to modify the media file by applying a watermark, changing the resolution or bitrate, incorporating a copyright notice, and the like.
- the execution environment 502 may apply encryption to the data object.
- the application of these transformations may be dynamically determined based on criteria associated with context data, criteria associated with the requested data object itself, etc.
- the execution environment 502 may determine that properties of the request indicated by the context data or otherwise associated with the request satisfy or fail to satisfy particular criteria.
- different levels of access rights for the source of the request may cause the execution environment 502 to apply a watermark, downscale resolution or bitrate, provide an alternate data object with a watermark or different resolution or bitrate, etc.
- different levels of encryption available to be decrypted by the source of the request may cause the execution environment 502 to dynamically select an encryption method based on the encryption that the source is configured to decrypt.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can selectively exclude portions of the requested data object and/or otherwise apply transformations to the requested data object as determined above.
- FIG. 14 illustrates the execution environment 502 selectively excluding portions of the requested data object at (4).
- Selectively excluding the content of a portion of the requested data object may involve generating an output version of the data object that does not include the portions determined to be excluded.
- the execution environment 502 may read the content of the data object from an input file or stream (e.g., using reference data such as a file descriptor for the requested data object), and write the non- excluded portions to an output file or stream (e.g., using reference data such as a file descriptor for the function output), while not writing the portions to be excluded from the function output.
- the execution environment 502 may also apply one or more transformations to ensure that the data object retains a valid format or configuration.
- excluding certain data from the output of a LIST function may involve not only excluding the identifying data but also excluding or modifying structural or formatting data (e.g., markup tags, field definitions, etc.) that would otherwise appear in the function output as an empty object or null value.
- task code 504 or other functional unit of the VM instance 150 or other execution environment 502 can provide the selectively-filtered requested data object—from which certain portions have been excluded—as output of the function. For example, the execution environment 502 can place the requested data object at the output location indicated by the reference data, and finalize the output.
- Finalizing output of the function may include closing the output stream or file identified by the reference to the output location and/or providing a return value (e.g., indicating success, failure, or some other characteristics of function execution) to the object storage service 160.
- FIG.14 illustrates the execution environment 502 providing the selectively-filtered requested data object as output at (5).
- the routine may terminate at block 1312. [0157]
- output of the function may be cached so that the function does not need to retrieve and process requested data objects to generate selectively- filtered requested data objects each time the objects are to be used. Instead, the function may determine whether the function output has been cached and, if so, whether the cached output has expired.
- the function may obtain the cached function output and provide it as the output of the function, or derive current function output from the cached function output.
- the function output may be cached locally within the execution environment (e.g., on the server machine on which the task code 504 or other functional unit of the VM instance 150 is running), or in a network-accessible data store (e.g., a high-speed dedicated cache server, a cache portion of the object storage service 160, etc.).
- cached function output may be tagged or otherwise associated with the context data that was used to determine which portions of the requested data object to selectively exclude.
- the function may analyze the associated context data to determine which cached output, if any, is appropriate for use in responding to a subsequent request based on the context data associated with the subsequent request.
- data objects provided as input to the function or otherwise accessed by the function during execution may be cached so that they do not need to be obtained from the object storage service 160 each time the function is executed.
- the execution environment 502 may perform transformations on data stored in the object storage service 160 in response to a request for a data object. For example, requirements for content, formatting, and/or retention of data objects may change over time, or due dates for such changes may be reached.
- the data objects may remain in the object storage service 160 unchanged or substantially unchanged until the next time they are to be accessed.
- the object storage service 160 and/or execution environment 502 may determine that a transformation is to be applied, and may apply the transformation prior to responding to the request for the data object.
- the transformation may be applied even if the request is a request only to receive the data object, and is not a request to modify or delete the data object. This “just-in-time” transformation may be desirable in certain cases to reduce the computational expense of applying the transformations to all data objects immediately upon changes to requirements.
- FIG. 14 illustrates the execution environment 502 applying a just-in-time transformation at (2A) to a data object stored in the object storage service 160 in response to receiving a request to receive the data object.
- just-in-time transformation is shown as occurring in connection with operations of routine 1300 for selective exclusion of data object portions, just-in-time transformations may be performed in connection with any of the other routines described herein, with any other owner-defined function or user-defined task, in a pipeline with multiple functions, etc.
- a system comprising: an object storage service comprising one or more computing devices, wherein the object storage service stores a plurality of data objects; and a code execution service comprising one or more computing devices for on-demand execution of functions in an input/output (I/O) path of the object storage service; wherein the object storage service is configured to at least: receive a request for a requested data object of the plurality of data objects, wherein the plurality of data objects comprises an additional data object to be combined with the requested data object, and wherein the request does not reference the additional data object; determine that a function, associated with the requested data object, is to be executed prior to responding to the request; generate a requested file handle, wherein the requested data object is readable from the object storage service using the requested file handle; and send the request and the requested file handle to the code execution service; and wherein the code execution service is configured to at least: receive, from the object storage service, the request for the requested
- Clause 2 The system of clause 1, wherein the requested data object comprises a first media file, wherein the additional data object comprises a second media file, and wherein content of the second media file is to be presented before at least a portion of content of the first media file is to be presented.
- Clause 3 The system of clause 1, wherein the requested data object comprises a first data file representing a first collection of records, wherein the additional data object comprises a second data file representing a second collection of records, and wherein at least a portion of the second collection of records is precede at least a portion of the first collection of records in the response. Clause 4.
- code execution service is further configured to determine a modification, to be made to at least one of the requested data object or the additional data object, to combine the requested data object and the additional data object in the response, wherein the determined modification comprises at least one of: removing a header, replacing a metadata value, or excluding a data object portion.
- a computer-implemented method comprising: under control of a computing system comprising one or more computer processors configured to execute specific instructions, receiving a request for a first data object stored in a data store, wherein the request does not reference a second data object; determining, based at least partly on the request, to execute a function using the first data object prior to providing a response to the request; configuring a code execution system to execute the function, wherein the code execution system provides on-demand execution of functions in an input/output (I/O) path of the data store; executing the function using the code execution system prior to providing the response, wherein executing the function comprises: determining that the response is to be generated using the first data object and the second data object; obtaining the first data object and the second data object; and generating a function output comprising at least a portion of the first data object and at least a portion of the second data object; and providing the response to a computing device based at least partly on the function output.
- a computing system comprising one or more computer processors
- Clause 6 The computer-implemented method of clause 5, further comprising obtaining context data associated with the request, wherein determining that the response is to be generated using the first data object and the second data object is based at least partly on the context data. Clause 7. The computer-implemented method of clause 5, further comprising obtaining a data record associating the first data object with the second data object, wherein determining that the response is to be generated using the first data object and the second data object is based at least partly on the data record. Clause 8. The computer-implemented method of clause 5, further comprising: storing the function output in a cache; receiving a second request for the first data object; and providing a second response to the second request based at least partly on the function output stored in the cache. Clause 9.
- generating the function output comprises storing at least a portion of the second data object within the function output in a location that precedes a location of at least a portion of the first data object.
- Clause 10. The computer-implemented method of clause 5, further comprising receiving first reference data associated with the first data object and second reference data associated with the second data object, wherein obtaining the first data object and the second data object from the data store comprises using the first reference data and the second reference data.
- Clause 11 The computer-implemented method of clause 5, further comprising receiving reference data associated with the function output, wherein generating the function output comprises writing the function output to a location identified by the reference data associated with the function output.
- the computer-implemented method of clause 5, further comprising: receiving a second request for the first data object, wherein the request is associated with first context data, and wherein the second request is associated with second context data different than the first content data; and executing the function using the code execution system to generate a second function output based at least partly on the second context data, wherein the second function output is different than the function output.
- executing the function further comprises modifying at least one of the first data object or the second data object prior to generating the function output.
- receiving the request comprises receiving a manifest referencing the first data object, wherein the manifest does not reference the second data object.
- a system comprising: a data store storing plurality of data objects; and one or more computing devices in communication with the data store and configured to at least: receive a request for a requested data object; determine, based at least partly on the request, to execute a function using one or more data objects of the plurality of data objects prior to providing a response to the request; configure a code execution system to execute the function, wherein the code execution system is thereby configured to: determine that the response is to be generated using a first data object of the plurality of data objects and a second data object of the plurality of data objects; determine a first output portion comprising at least one of: a first portion of the first data object or data representing the first data object; determine a second output portion comprising at least one of: a second portion of the second data object or data representing the second data object; and generate a function output using the first output portion and the second output portion; and provide the response to a computing device based at least partly on the function output, wherein the response comprises the requested data object.
- Clause 17 The system of clause 16, wherein the function output comprises a manifest referencing a sequence in which subsequent requests are to be made for the first data object and the second data object. Clause 18. The system of clause 16, wherein the function output comprises a composite of the first portion of the first data object concatenated with the second portion of the second data object. Clause 19. The system of clause 16, wherein the code execution system is further configured to obtain the first data object using reference data comprising at least one of: a file handle, a pointer, or an identifier. Clause 20. The system of clause 16, wherein the code execution system is further configured to modify at least one of the first portion or the second portion. Clause 21.
- a system comprising: an object storage service comprising one or more computing devices, wherein the object storage service stores a plurality of data objects; and a code execution service comprising one or more computing devices for on-demand execution of functions in an input/output (I/O) path of the object storage service; wherein the object storage service is configured to at least: receive a request for a requested data object of the plurality of data objects, wherein the request is associated with context data representing context of the request; determine that a function, associated with the requested data object, is to be executed prior to responding to the request; generate a requested file handle, wherein the requested data object is readable from the object storage service using the requested file handle; and send the request, the context data, and the requested file handle to the code execution service; and wherein the code execution service is configured to at least: receive, from the object storage service, the request for the requested data object, the context data, and the requested file handle; obtain the requested data object using the requested file handle; determine, based at least partly on the context data satisfying one or more criteria, that
- Clause 22 The system of clause 21, wherein the requested data object comprises a collection of records, wherein the first portion comprises at least a portion of a record of the collection of records, and wherein the first obfuscated portion comprises a masked version of the portion of the record.
- Clause 23 The system of clause 21, wherein the code execution service is further configured to determine an obfuscation type, of a plurality of obfuscation types, to be applied to the first portion.
- the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request
- the one or more criteria comprises at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request.
- a computer-implemented method comprising: under control of a computing system comprising one or more computer processors configured to execute specific instructions, receiving a request for a data object stored in a data store; determining, based at least partly on the request, to execute a function using the data object prior to providing a response to the request; configuring a code execution system to execute the function, wherein the code execution system provides on-demand execution of functions in an input/output (I/O) path of the data store; executing the function using the code execution system prior to providing the response, wherein executing the function comprises: obtaining the data object; determining to obfuscate a first portion of the data object; generating a first obfuscated portion comprising the first portion in obfuscated form; and generating a function output comprising the first obfuscated portion, wherein the function output does not include the first portion in un-obfuscated form; and providing the response to a computing device based at least partly on the function
- Clause 26 The computer-implemented method of clause 25, wherein executing the function further comprises obtaining context data associated with the request, wherein determining to obfuscate the first portion is based at least partly on the context data.
- Clause 27 The computer-implemented method of clause 26, wherein executing the function further comprises determining that the context data satisfies one or more criteria, wherein the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request, and wherein the one or more criteria relate to at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request.
- Clause 28 The computer-implemented method of clause 25, wherein executing the function further comprises: obtaining context data associated with the request; and determining an obfuscation type, of a plurality of obfuscation types, to apply to the first portion based at least partly on the context data.
- determining the obfuscation type comprises determining one of: a customized obfuscation associated with the data object, or a default obfuscation.
- obtaining the data object comprises obtaining a collection of records, wherein the first portion comprises at least a portion of a record of the collection of records, and wherein the first obfuscated portion is a masked version of the portion of the record.
- Clause 31. The computer-implemented method of clause 25, further comprising: receiving a second request for the data object, wherein the request is associated with first context data and wherein the second request is associated with second context data different than the first content data; and executing the function using the code execution system to generate a second function output based at least partly on the second context data, wherein the second function output is different than the function output.
- a system comprising: a data store storing plurality of data objects; and one or more computing devices in communication with the data store and configured to at least: receive a request for a data object of the plurality of data objects; determine, based at least partly on the request, to execute a function using the data object prior to providing a response to the request; configure a code execution system to execute the function, wherein the code execution system is thereby configured to: obtain the data object; determine to transform at least a first portion of the data object, wherein the response is not to include the first portion in an un- transformed state; transform the first portion of the data object to create a transformed first portion; and generate function output comprising the transformed first portion; and provide the response to a computing device based at least partly on the function output.
- Clause 34 The system of clause 33, wherein the code execution system is further configured to store the data object comprising the transformed first portion in the data store.
- Clause 35 The system of clause 33, wherein the code execution system being configured to transform the first portion comprises the code execution system being configured to obfuscate the first portion.
- Clause 36 The system of clause 33, wherein the code execution system being configured to transform the first portion comprises the code execution system being configured to apply a transformation comprising at least one of: addition of a watermark, alteration of a resolution, alteration of a bitrate, or application of encryption.
- Clause 37 The system of clause 33, wherein the code execution system being configured to transform the first portion comprises the code execution system being configured to remove at least a portion of the first portion.
- code execution system being configured to transform the first portion comprises the code execution system being configured to modify a format of the first portion.
- code execution system is further configured to obtain context data associated with the request, wherein determining to transform the first portion is based at least partly on the context data satisfying one or more criteria.
- the code execution system is further configured to determine that the context data satisfies one or more criteria, wherein the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request, and wherein the one or more criteria relate to at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request. Clause 41.
- a system comprising: an object storage service comprising one or more computing devices, wherein the object storage service stores a plurality of data objects; and a code execution service comprising one or more computing devices for on-demand execution of functions in an input/output (I/O) path of the object storage service; wherein the object storage service is configured to at least: receive a request for a requested data object of the plurality of data objects, wherein the request is associated with context data representing context of the request; determine that a function, associated with the requested data object, is to be executed prior to responding to the request; generate a requested file handle, wherein the requested data object is readable from the object storage service using the requested file handle; and send the request, the context data and the requested file handle to the code execution service; and wherein the code execution service is configured to at least: receive, from the object storage service, the request for the requested data object, the context data, and the requested file handle; obtain the requested data object using the requested file handle; determine, based at least partly on the context data satisfying one or more criteria, that
- Clause 42 The system of clause 41, wherein the requested data object comprises a collection of data records, wherein each data record comprises one or more data fields, and wherein the first portion to be excluded from the response comprises at least one of: a subset of the data records, or a subset of the data fields.
- Clause 43 The system of clause 41, wherein the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request, and wherein the one or more criteria comprises at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request.
- the code execution system is further configured to apply a transformation to a third portion of the requested data object, wherein the transformation comprises at least one of: addition of a watermark, alteration of a resolution, alteration of a bitrate, or application of encryption. Clause 45.
- a computer-implemented method comprising: under control of a computing system comprising one or more computer processors configured to execute specific instructions, receiving a request for a data object stored in a data store; determining, based at least partly on the request, to execute a function using the data object prior to providing a response to the request; configuring a code execution system to execute the function, wherein the code execution system provides on-demand execution of functions in an input/output (I/O) path of the data store; executing the function using the code execution system prior to providing the response, wherein executing the function comprises: obtaining the data object; determining to exclude a first portion of the data object from a function output; and generating the function output comprising a second portion of the data object, wherein the function output does not include the first portion; and providing the response to a computing device based at least partly on the function output.
- a computing system comprising one or more computer processors configured to execute specific instructions, receiving a request for a data object stored in a data store; determining,
- Clause 46 The computer-implemented method of clause 45, further comprising obtaining context data associated with the request, wherein determining to exclude the first portion is based at least partly on the context data satisfying one or more criteria.
- Clause 47 The computer-implemented method of clause 46, wherein executing the function further comprises determining that the context data satisfies one or more criteria, wherein the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request, and wherein the one or more criteria relates to at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request.
- obtaining the data object comprises obtaining a collection of data records, wherein each data record comprises one or more data fields, and wherein the first portion comprises at least one of: a subset of the data records, or a subset of the data fields.
- executing the function further comprises applying a transformation to the second portion of the data object, wherein the transformation comprises at least one of: addition of a watermark, alteration of a resolution, alteration of a bitrate, or application of encryption.
- the computer-implemented method of clause 45 further comprising determining to exclude a second data object from the function output, wherein the request comprises a request for both the first data object and the second data object.
- Clause 51 The computer-implemented method of clause 45, further comprising: receiving a second request for the data object, wherein the request is associated with first context data and wherein the second request is associated with second context data different than the first content data; and executing the function using the code execution system to generate a second function output based at least partly on the second context data, wherein the second function output is different than the function output.
- the computer-implemented method of clause 45 further comprising: determining, based at least partly on the request, to execute a second function using the function output prior to providing a response to the request; configuring the code execution system to execute the second function; and executing the second function using the code execution system prior to providing the response, wherein the response is based at least partly on a second function output generated by executing the second function.
- Clause 53 The computer-implemented method of clause 45, further comprising: storing the function output in a cache; receiving a second request for the data object; and providing a second response to the second request based at least partly on the function output stored in the cache.
- a system comprising: a data store storing plurality of data objects; and one or more computing devices in communication with the data store and configured to at least: receive a request for information regarding a subset of the plurality of data objects; determine, based at least partly on the request, to execute a function using the data object prior to providing a response to the request; configure a code execution service to execute the function, wherein the code execution service is thereby configured to: obtain the information regarding the subset of the plurality of data objects; determine to exclude at least a first portion of the information regarding the subset of the plurality of data objects from a function output; generate the function output comprising a second portion of the information regarding the subset of the plurality of data objects, wherein the function output does not include the first portion; and provide the response to a computing device based at least partly on the function output.
- Clause 55 The system of clause 54, wherein the request for information regarding the subset of data objects comprises a request for information regarding data objects in a particular data object group, wherein the data store stores the plurality of data objects grouped into a plurality of different data object groups.
- Clause 56 The system of clause 55, wherein the data object group comprises a group of data objects regarding users.
- Clause 57. The system of clause 54, wherein the data store stores the plurality of data objects grouped into a plurality of different data object groups, and wherein the request for information regarding the subset of data objects comprises a request for information regarding a subset of data object groups.
- Clause 58 The system of clause 54, wherein the request comprises a hypertext transfer protocol request corresponding to a LIST request.
- Clause 59 The system of clause 54, wherein the code execution system is further configured to obtain context data associated with the request, wherein determining to exclude the first portion from the response is based at least partly on the context data satisfying one or more criteria.
- Clause 60 The system of clause 59, wherein the code execution system is further configured to determine that the context data satisfies one or more criteria, wherein the context data represents one of: a source of the request, a location associated with the request, or an access right associated with the request, and wherein the one or more criteria relate to at least one of: a permitted source of the request, a prohibited source of the request, a permitted location of the request, a prohibited location of the request, a permitted access right associated with the request, or a prohibited access right associated with the request.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP20785889.5A EP4035002A1 (en) | 2019-09-27 | 2020-09-22 | On-demand execution of object filter code in output path of object storage service |
CN202080073280.2A CN114586010B (zh) | 2019-09-27 | 2020-09-22 | 对象存储服务的输出路径中对象过滤代码的按需执行 |
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/586,580 | 2019-09-27 | ||
US16/586,580 US11250007B1 (en) | 2019-09-27 | 2019-09-27 | On-demand execution of object combination code in output path of object storage service |
US16/586,562 US11263220B2 (en) | 2019-09-27 | 2019-09-27 | On-demand execution of object transformation code in output path of object storage service |
US16/586,539 | 2019-09-27 | ||
US16/586,539 US10908927B1 (en) | 2019-09-27 | 2019-09-27 | On-demand execution of object filter code in output path of object storage service |
US16/586,562 | 2019-09-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2021061605A1 true WO2021061605A1 (en) | 2021-04-01 |
Family
ID=72717925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/US2020/051928 WO2021061605A1 (en) | 2019-09-27 | 2020-09-22 | On-demand execution of object filter code in output path of object storage service |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4035002A1 (zh) |
CN (1) | CN114586010B (zh) |
WO (1) | WO2021061605A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200273225A1 (en) * | 2019-02-25 | 2020-08-27 | Life Impact Solutions, Inc. | Media Alteration Based On Variable Geolocation Metadata |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
CN115658278A (zh) * | 2022-12-07 | 2023-01-31 | 中国电子科技集团公司第三十研究所 | 一种支持高并发协议交互的微任务调度机 |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US11860879B2 (en) | 2019-09-27 | 2024-01-02 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140351943A1 (en) * | 2011-07-22 | 2014-11-27 | Vodafone Ip Licensing Limited | Anonymization and filtering data |
US9323556B2 (en) | 2014-09-30 | 2016-04-26 | Amazon Technologies, Inc. | Programmatic event detection and message generation for requests to execute program code |
US9584517B1 (en) * | 2014-09-03 | 2017-02-28 | Amazon Technologies, Inc. | Transforms within secure execution environments |
WO2018204530A1 (en) * | 2017-05-02 | 2018-11-08 | Home Box Office, Inc. | Data delivery architecture for transforming client response data |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9881070B2 (en) * | 2014-12-12 | 2018-01-30 | Microsoft Technology Licensing, Llc | Controlling service functions in response to service instigation and service reactivation messages |
EP3436927B1 (en) * | 2016-03-30 | 2023-12-13 | Amazon Technologies Inc. | Processing pre-existing data sets at an on-demand code execution environment |
-
2020
- 2020-09-22 CN CN202080073280.2A patent/CN114586010B/zh active Active
- 2020-09-22 WO PCT/US2020/051928 patent/WO2021061605A1/en active Application Filing
- 2020-09-22 EP EP20785889.5A patent/EP4035002A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140351943A1 (en) * | 2011-07-22 | 2014-11-27 | Vodafone Ip Licensing Limited | Anonymization and filtering data |
US9584517B1 (en) * | 2014-09-03 | 2017-02-28 | Amazon Technologies, Inc. | Transforms within secure execution environments |
US9323556B2 (en) | 2014-09-30 | 2016-04-26 | Amazon Technologies, Inc. | Programmatic event detection and message generation for requests to execute program code |
WO2018204530A1 (en) * | 2017-05-02 | 2018-11-08 | Home Box Office, Inc. | Data delivery architecture for transforming client response data |
Non-Patent Citations (1)
Title |
---|
AMAZON: "AWS Lambda: Developer Guide", 26 June 2016 (2016-06-26), XP055402554, Retrieved from the Internet <URL:https://docs.aws.amazon.com/lambda/latest/dg/welcome.html> [retrieved on 20170830] * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200273225A1 (en) * | 2019-02-25 | 2020-08-27 | Life Impact Solutions, Inc. | Media Alteration Based On Variable Geolocation Metadata |
US11763503B2 (en) * | 2019-02-25 | 2023-09-19 | Life Impact Solutions | Media alteration based on variable geolocation metadata |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US11860879B2 (en) | 2019-09-27 | 2024-01-02 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
CN115658278A (zh) * | 2022-12-07 | 2023-01-31 | 中国电子科技集团公司第三十研究所 | 一种支持高并发协议交互的微任务调度机 |
Also Published As
Publication number | Publication date |
---|---|
CN114586010A (zh) | 2022-06-03 |
CN114586010B (zh) | 2023-05-09 |
EP4035002A1 (en) | 2022-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11860879B2 (en) | On-demand execution of object transformation code in output path of object storage service | |
EP4034998B1 (en) | User-specific data manipulation system for object storage service based on user-submitted code | |
US10908927B1 (en) | On-demand execution of object filter code in output path of object storage service | |
US11386230B2 (en) | On-demand code obfuscation of data in input path of object storage service | |
US11023416B2 (en) | Data access control system for object storage service based on owner-defined code | |
US11250007B1 (en) | On-demand execution of object combination code in output path of object storage service | |
US11550944B2 (en) | Code execution environment customization system for object storage service | |
US11416628B2 (en) | User-specific data manipulation system for object storage service based on user-submitted code | |
US11106477B2 (en) | Execution of owner-specified code during input/output path to object storage service | |
WO2021061605A1 (en) | On-demand execution of object filter code in output path of object storage service | |
US11055112B2 (en) | Inserting executions of owner-specified code into input/output path of object storage service | |
US11023311B2 (en) | On-demand code execution in input path of data uploaded to storage service in multiple data portions | |
US10996961B2 (en) | On-demand indexing of data in input path of object storage service | |
US11360948B2 (en) | Inserting owner-specified data processing pipelines into input/output path of object storage service | |
EP4035047A1 (en) | On-demand code obfuscation of data in input path of object storage service | |
WO2021061620A9 (en) | Inserting owner-specified data processing pipelines into input/output path of object storage service | |
US10223526B2 (en) | Generating packages for managed applications | |
US11394761B1 (en) | Execution of user-submitted code on a stream of data | |
CN107636667B (zh) | 在设备中创建多个工作空间的系统及方法 | |
US11656892B1 (en) | Sequential execution of user-submitted code and native functions | |
GB2561862A (en) | Computer device and method for handling files |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 20785889 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2020785889 Country of ref document: EP |
|
ENP | Entry into the national phase |
Ref document number: 2020785889 Country of ref document: EP Effective date: 20220428 |