#amazon-web-services #web-services #aws-sdk

rw-aws-sdk-ec2

AWS SDK for Amazon Elastic Compute Cloud (with only APIs needed by RisingWave)

1 stable release

1.2.0 Mar 1, 2024

#2310 in Network programming

Download history 706/week @ 2024-06-17 529/week @ 2024-06-24 908/week @ 2024-07-01 623/week @ 2024-07-08 692/week @ 2024-07-15 471/week @ 2024-07-22 537/week @ 2024-07-29 445/week @ 2024-08-05 746/week @ 2024-08-12 734/week @ 2024-08-19 515/week @ 2024-08-26 633/week @ 2024-09-02 486/week @ 2024-09-09 550/week @ 2024-09-16 1125/week @ 2024-09-23 352/week @ 2024-09-30

2,538 downloads per month

Apache-2.0

46MB
661K SLoC

Minimal AWS SDK EC2

Only keep the following APIs

  • create_vpc_endpoint
  • delete_vpc_endpoints
  • describe_vpc_endpoints
  • describe_vpc_endpoint_services
  • describe_subnets

How is this done?

Copy the original version

cp -R ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aws-sdk-ec2-1.2.0/src .
cp ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aws-sdk-ec2-1.2.0/Cargo.toml .
  1. Modify client.rs and operation.rs to only keep the required mods.
  2. Update protocol_serde.rs and types.rs. This need to contain not only the required APIs, but also some other depended types. So manual work is needed.

lib.rs:

Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable computing capacity in the Amazon Web Services Cloud. Using Amazon EC2 eliminates the need to invest in hardware up front, so you can develop and deploy applications faster. Amazon Virtual Private Cloud (Amazon VPC) enables you to provision a logically isolated section of the Amazon Web Services Cloud where you can launch Amazon Web Services resources in a virtual network that you've defined. Amazon Elastic Block Store (Amazon EBS) provides block level storage volumes for use with EC2 instances. EBS volumes are highly available and reliable storage volumes that can be attached to any running instance and used like a hard drive.

To learn more, see the following resources:

Getting Started

Examples are available for many services and operations, check out the examples folder in GitHub.

The SDK provides one crate per AWS service. You must add Tokio as a dependency within your Rust project to execute asynchronous code. To add aws-sdk-ec2 to your project, add the following to your Cargo.toml file:

[dependencies]
aws-config = { version = "1.0.1", features = ["behavior-version-latest"] }
aws-sdk-ec2 = "1.2.0"
tokio = { version = "1", features = ["full"] }

Then in code, a client can be created with the following:

use aws_sdk_ec2 as ec2;

#[::tokio::main]
async fn main() -> Result<(), ec2::Error> {
    let config = aws_config::load_from_env().await;
    let client = aws_sdk_ec2::Client::new(&config);

    // ... make some calls with the client

    Ok(())
}

See the client documentation for information on what calls can be made, and the inputs and outputs for each of those calls.

Using the SDK

Until the SDK is released, we will be adding information about using the SDK to the Developer Guide. Feel free to suggest additional sections for the guide by opening an issue and describing what you are trying to do.

Getting Help

Crate Organization

The entry point for most customers will be Client, which exposes one method for each API offered by Amazon Elastic Compute Cloud. The return value of each of these methods is a "fluent builder", where the different inputs for that API are added by builder-style function call chaining, followed by calling send() to get a Future that will result in either a successful output or a SdkError.

Some of these API inputs may be structs or enums to provide more complex structured information. These structs and enums live in types. There are some simpler types for representing data such as date times or binary blobs that live in primitives.

All types required to configure a client via the Config struct live in config.

The operation module has a submodule for every API, and in each submodule is the input, output, and error type for that API, as well as builders to construct each of those.

There is a top-level Error type that encompasses all the errors that the client can return. Any other error type can be converted to this Error type via the From trait.

The other modules within this crate are not required for normal usage.

Dependencies

~10–22MB
~328K SLoC