Created
April 30, 2024 13:05
Revisions
-
WolfangAukang created this gist
Apr 30, 2024 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,63 @@ 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) }