Created
April 30, 2024 13:05
-
-
Save WolfangAukang/a803077b2235e7f06b4df24f4d93c337 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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