From 6f776959d7c959f0bb66a2a9793849e680beaac1 Mon Sep 17 00:00:00 2001 From: Doug Date: Mon, 21 Jun 2021 12:19:09 -0700 Subject: [PATCH 1/2] Updated SageMaker examples to take a region arg. --- .../examples/sagemaker-helloworld/src/main.rs | 24 ------ .../sagemaker-list-training-jobs/Cargo.toml | 13 ---- .../sagemaker-list-training-jobs/src/main.rs | 26 ------- .../Cargo.toml | 13 +++- .../sagemaker/src/bin/list-training-jobs.rs | 75 +++++++++++++++++++ .../sagemaker/src/bin/sagemaker-helloworld.rs | 67 +++++++++++++++++ 6 files changed, 151 insertions(+), 67 deletions(-) delete mode 100644 aws/sdk/examples/sagemaker-helloworld/src/main.rs delete mode 100644 aws/sdk/examples/sagemaker-list-training-jobs/Cargo.toml delete mode 100644 aws/sdk/examples/sagemaker-list-training-jobs/src/main.rs rename aws/sdk/examples/{sagemaker-helloworld => sagemaker}/Cargo.toml (52%) create mode 100644 aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs create mode 100644 aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs diff --git a/aws/sdk/examples/sagemaker-helloworld/src/main.rs b/aws/sdk/examples/sagemaker-helloworld/src/main.rs deleted file mode 100644 index 1c2fda2947..0000000000 --- a/aws/sdk/examples/sagemaker-helloworld/src/main.rs +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ - -#[tokio::main] -async fn main() -> Result<(), sagemaker::Error> { - let client = sagemaker::Client::from_env(); - let notebooks = client.list_notebook_instances().send().await?; - - for n in notebooks.notebook_instances.unwrap_or_default() { - let n_instance_type = n.instance_type.unwrap(); - let n_status = n.notebook_instance_status.unwrap(); - let n_name = n.notebook_instance_name.as_deref().unwrap_or_default(); - - let details = format!( - "Notebook Name : {}, Notebook Status : {:#?}, Notebook Instance Type : {:#?}", - n_name, n_status, n_instance_type - ); - println!("{}", details); - } - - Ok(()) -} diff --git a/aws/sdk/examples/sagemaker-list-training-jobs/Cargo.toml b/aws/sdk/examples/sagemaker-list-training-jobs/Cargo.toml deleted file mode 100644 index 20c2f40cd8..0000000000 --- a/aws/sdk/examples/sagemaker-list-training-jobs/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "sagemaker-list-training-jobs" -version = "0.1.0" -authors = ["Alistair McLean "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -env_logger = "0.8.2" -sagemaker = {package = "aws-sdk-sagemaker", path = "../../build/aws-sdk/sagemaker"} -tokio = { version = "1", features = ["full"] } -chrono = "0.4.19" \ No newline at end of file diff --git a/aws/sdk/examples/sagemaker-list-training-jobs/src/main.rs b/aws/sdk/examples/sagemaker-list-training-jobs/src/main.rs deleted file mode 100644 index 217107e49c..0000000000 --- a/aws/sdk/examples/sagemaker-list-training-jobs/src/main.rs +++ /dev/null @@ -1,26 +0,0 @@ -#[tokio::main] -async fn main() -> Result<(), sagemaker::Error> { - let client = sagemaker::Client::from_env(); - let job_details = client.list_training_jobs().send().await?; - - println!("Job Name\tCreation DateTime\tDuration\tStatus"); - for j in job_details.training_job_summaries.unwrap_or_default() { - let name = j.training_job_name.as_deref().unwrap_or_default(); - let creation_time = j.creation_time.unwrap().to_chrono(); - let training_end_time = j.training_end_time.unwrap().to_chrono(); - - let status = j.training_job_status.unwrap(); - let duration = training_end_time - creation_time; - - let deets = format!( - "{}\t{}\t{}\t{:#?}", - name, - creation_time.format("%Y-%m-%d@%H:%M:%S"), - duration.num_seconds(), - status - ); - println!("{}", deets); - } - - Ok(()) -} diff --git a/aws/sdk/examples/sagemaker-helloworld/Cargo.toml b/aws/sdk/examples/sagemaker/Cargo.toml similarity index 52% rename from aws/sdk/examples/sagemaker-helloworld/Cargo.toml rename to aws/sdk/examples/sagemaker/Cargo.toml index 6ec8de4fa4..c4090b603e 100644 --- a/aws/sdk/examples/sagemaker-helloworld/Cargo.toml +++ b/aws/sdk/examples/sagemaker/Cargo.toml @@ -1,13 +1,18 @@ [package] -name = "sagemaker-helloworld" +name = "sagemaker-code-examples" version = "0.1.0" -authors = ["Alistair McLean "] +authors = ["Alistair McLean ", "Doug Schwartz "] edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -env_logger = "0.8.2" sagemaker = {package = "aws-sdk-sagemaker", path = "../../build/aws-sdk/sagemaker"} +aws-types = { path = "../../build/aws-sdk/aws-types" } + tokio = { version = "1", features = ["full"] } - \ No newline at end of file + +env_logger = "0.8.2" +chrono = "0.4.19" +structopt = { version = "0.3", default-features = false } +tracing-subscriber = "0.2.18" \ No newline at end of file diff --git a/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs b/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs new file mode 100644 index 0000000000..cd8e48dfa0 --- /dev/null +++ b/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs @@ -0,0 +1,75 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + +use aws_types::region::ProvideRegion; + +use sagemaker::{Client, Config, Region}; + +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +struct Opt { + /// The AWS Region. Overrides environment variable AWS_DEFAULT_REGION. + #[structopt(short, long)] + default_region: Option, + + /// Whether to display additional runtime information + #[structopt(short, long)] + verbose: bool, +} + +/// Lists the your SageMaker jobs in an AWS Region. +/// /// # Arguments +/// +/// * `[-d DEFAULT-REGION]` - The region in which the client is created. +/// If not supplied, uses the value of the **AWS_DEFAULT_REGION** environment variable. +/// If the environment variable is not set, defaults to **us-west-2**. +/// * `[-v]` - Whether to display additional information.#[tokio::main] +#[tokio::main] +async fn main() -> Result<(), sagemaker::Error> { + tracing_subscriber::fmt::init(); + + let Opt { + default_region, + verbose, + } = Opt::from_args(); + + let region = default_region + .as_ref() + .map(|region| Region::new(region.clone())) + .or_else(|| aws_types::region::default_provider().region()) + .unwrap_or_else(|| Region::new("us-west-2")); + + if verbose { + println!("SageMaker client version: {}", sagemaker::PKG_VERSION); + println!("Region: {:?}", ®ion); + println!(); + } + + let conf = Config::builder().region(region).build(); + let client = Client::from_conf(conf); + let job_details = client.list_training_jobs().send().await?; + + println!("Job Name\tCreation DateTime\tDuration\tStatus"); + for j in job_details.training_job_summaries.unwrap_or_default() { + let name = j.training_job_name.as_deref().unwrap_or_default(); + let creation_time = j.creation_time.unwrap().to_chrono(); + let training_end_time = j.training_end_time.unwrap().to_chrono(); + + let status = j.training_job_status.unwrap(); + let duration = training_end_time - creation_time; + + let deets = format!( + "{}\t{}\t{}\t{:#?}", + name, + creation_time.format("%Y-%m-%d@%H:%M:%S"), + duration.num_seconds(), + status + ); + println!("{}", deets); + } + + Ok(()) +} diff --git a/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs b/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs new file mode 100644 index 0000000000..4ec0121109 --- /dev/null +++ b/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs @@ -0,0 +1,67 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + +use aws_types::region::ProvideRegion; + +use sagemaker::{Client, Config, Region}; + +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +struct Opt { + /// The region. Overrides environment variable AWS_DEFAULT_REGION. + #[structopt(short, long)] + default_region: Option, + + /// Whether to display additional runtime information + #[structopt(short, long)] + verbose: bool, +} + +/// Lists the name, status, and type of your SageMaker instances in an AWS Region. +/// /// # Arguments +/// +/// * `[-d DEFAULT-REGION]` - The region in which the client is created. +/// If not supplied, uses the value of the **AWS_DEFAULT_REGION** environment variable. +/// If the environment variable is not set, defaults to **us-west-2**. +/// * `[-v]` - Whether to display additional information. +#[tokio::main] +async fn main() -> Result<(), sagemaker::Error> { + tracing_subscriber::fmt::init(); + + let Opt { + default_region, + verbose, + } = Opt::from_args(); + + let region = default_region + .as_ref() + .map(|region| Region::new(region.clone())) + .or_else(|| aws_types::region::default_provider().region()) + .unwrap_or_else(|| Region::new("us-west-2")); + + if verbose { + println!("SageMaker client version: {}", sagemaker::PKG_VERSION); + println!("Region: {:?}", ®ion); + } + + let conf = Config::builder().region(region).build(); + let client = Client::from_conf(conf); + let notebooks = client.list_notebook_instances().send().await?; + + for n in notebooks.notebook_instances.unwrap_or_default() { + let n_instance_type = n.instance_type.unwrap(); + let n_status = n.notebook_instance_status.unwrap(); + let n_name = n.notebook_instance_name.as_deref().unwrap_or_default(); + + let details = format!( + "Notebook Name : {}, Notebook Status : {:#?}, Notebook Instance Type : {:#?}", + n_name, n_status, n_instance_type + ); + println!("{}", details); + } + + Ok(()) +} From c1efb9862ef6c8924ea6a2bd736347587f8fd149 Mon Sep 17 00:00:00 2001 From: Doug Date: Tue, 22 Jun 2021 05:29:52 -0700 Subject: [PATCH 2/2] Updated SageMaker code examples based on feedback --- aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs | 3 +-- aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs b/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs index cd8e48dfa0..177a6b5477 100644 --- a/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs +++ b/aws/sdk/examples/sagemaker/src/bin/list-training-jobs.rs @@ -61,14 +61,13 @@ async fn main() -> Result<(), sagemaker::Error> { let status = j.training_job_status.unwrap(); let duration = training_end_time - creation_time; - let deets = format!( + println!( "{}\t{}\t{}\t{:#?}", name, creation_time.format("%Y-%m-%d@%H:%M:%S"), duration.num_seconds(), status ); - println!("{}", deets); } Ok(()) diff --git a/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs b/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs index 4ec0121109..90f6eba2cd 100644 --- a/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs +++ b/aws/sdk/examples/sagemaker/src/bin/sagemaker-helloworld.rs @@ -56,11 +56,10 @@ async fn main() -> Result<(), sagemaker::Error> { let n_status = n.notebook_instance_status.unwrap(); let n_name = n.notebook_instance_name.as_deref().unwrap_or_default(); - let details = format!( + println!( "Notebook Name : {}, Notebook Status : {:#?}, Notebook Instance Type : {:#?}", n_name, n_status, n_instance_type ); - println!("{}", details); } Ok(())