Skip to content

Instantly share code, notes, and snippets.

@WolfangAukang
Created April 30, 2024 13:05
Show Gist options
  • Save WolfangAukang/a803077b2235e7f06b4df24f4d93c337 to your computer and use it in GitHub Desktop.
Save WolfangAukang/a803077b2235e7f06b4df24f4d93c337 to your computer and use it in GitHub Desktop.
use aws_config::{meta::region::RegionProviderChain, BehaviorVersion, SdkConfig};
use aws_sdk_ec2::Client;
const DEFAULT_REGION: &str = "us-east-1";
const INSTANCE_ID_STATUS: &str = "i-0d10de49d69d7ed57";
const INSTANCE_ID_START: &str = "i-06360477f59dd461d";
enum InstanceStatus {
IP,
Status,
}
async fn generate_config() -> SdkConfig {
let region_provider = RegionProviderChain::default_provider().or_else(DEFAULT_REGION);
aws_config::defaults(BehaviorVersion::latest())
.region(region_provider)
.load()
.await
}
async fn start_instance() -> Result<Option<String>, aws_sdk_ec2::Error> {
let instance_id = std::env::var("INSTANCE_ID").expect("missing INSTANCE_ID");
let config = generate_config().await;
let client = Client::new(&config);
let resp = client
.start_instances()
.instance_ids(instance_id)
.send()
.await?;
for instance in resp.starting_instances() {
let prev_state = instance.previous_state().unwrap();
let prev_state_name = prev_state.name().unwrap();
return Ok(Some(String::from(prev_state_name.as_str())));
}
Ok(None)
}
async fn get_instance_property(
property: InstanceStatus,
) -> Result<Option<String>, aws_sdk_ec2::Error> {
let instance_id = std::env::var("INSTANCE_ID").expect("missing INSTANCE_ID");
let config = generate_config().await;
let client = Client::new(&config);
let resp = client
.describe_instances()
.instance_ids(instance_id)
.send()
.await?;
for reservation in resp.reservations() {
for instance in reservation.instances() {
println!("Instance ID: {}", instance.instance_id().unwrap());
match property {
InstanceStatus::IP => return Ok(instance.public_ip_address.clone()),
InstanceStatus::Status => {
let status = instance.state().unwrap();
let status_name = status.name().unwrap();
return Ok(Some(String::from(status_name.as_str())));
}
}
}
}
Ok(None)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment