Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert param not found code, update base image, update cargo packages #49

Merged
merged 15 commits into from
Jun 18, 2024
Merged
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/devcontainers/rust:0.202.9-bullseye
FROM mcr.microsoft.com/devcontainers/rust:1-1-bullseye

RUN sudo apt-get update -y \
&& sudo apt-get upgrade -y
8 changes: 3 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -7,13 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

## [2.0.1] - 2024-6-13

- Revert base img due to version `GLIBC_2.34' not found error.

## [2.0.0] - 2024-6-12

- Fail if parameter not found.
- Fix release workflow and update base image
- Update cargo packages
- Improve logging

## [1.1.2] - 2023-05-20

994 changes: 699 additions & 295 deletions Cargo.lock

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -12,18 +12,18 @@ crate-type = ["cdylib"]

[dependencies]
# bin
anyhow = "1.0.57"
tokio = { version = "1.19.2", features = ["full"] }
futures = { version = "0.3.21" }
aws-config = "0.53.0"
aws-sdk-ssm = "0.23.0"
lambda-extension = "0.8.0"
anyhow = "1.0.86"
tokio = { version = "1.38.0", features = ["full"] }
futures = { version = "0.3.30" }
aws-config = "1.5.1"
aws-sdk-ssm = "1.34.0"
lambda-extension = "0.10.0"
# lib
redhook = "2.0"
libc = "0.2.126"
libc = "0.2.155"
lazy_static = "1.4.0"
# both
serde_json = "1.0.81"
serde_json = "1.0.117"

[profile.release]
strip = true
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
@@ -32,4 +32,4 @@ fn write_envs_to_tmp_json(env_map: HashMap<String, String>) {
let envs_json = serde_json::to_string(&env_map).unwrap();
let mut file = File::create(ENV_FILE).unwrap();
file.write_all(envs_json.as_bytes()).unwrap();
}
}
35 changes: 13 additions & 22 deletions src/ssm.rs
Original file line number Diff line number Diff line change
@@ -3,9 +3,10 @@ use anyhow::Result;
use futures::future::join_all;
use std::collections::HashMap;
use tokio::{spawn, task::JoinHandle};
use aws_sdk_ssm::config::BehaviorVersion;

pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<String, String>> {
let sdk_config = aws_config::load_from_env().await;
let sdk_config = aws_config::load_defaults(BehaviorVersion::v2024_03_28()).await;
let ssm_client: aws_sdk_ssm::Client = aws_sdk_ssm::Client::new(&sdk_config);
let mut results: HashMap<String, String> = HashMap::new();
let mut handles: Vec<JoinHandle<Result<HashMap<String, String>>>> = Vec::new();
@@ -31,9 +32,9 @@ pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<Strin
results.insert(key, value);
});
}
Err(error) => return Err(error), // Return error if parameter is not found
Err(error) => log::cloudwatch_metric("ssm", "error", true, Some(error.to_string())),
},
Err(error) => return Err(anyhow::anyhow!(error.to_string())), // Return error if task fails
Err(error) => log::cloudwatch_metric("ssm", "error", true, Some(error.to_string())),
}
}
Ok(results)
@@ -63,11 +64,10 @@ async fn ssm_get_parameter(
"error",
true,
Some(format!(
"Error calling ssm:GetParameter. Environment variable: {} Path: {} Error: {}",
name, path, error
"Error calling ssm:GetParameter. Environment variable: {} Path: {} Error: {:?}",
name, path, error.into_service_error().meta()
)),
);
return Err(anyhow::anyhow!(error.to_string())); // Return error
}
}
Ok(items)
@@ -101,7 +101,7 @@ async fn ssm_get_parameters_by_path(
items.insert(env_name, parameter.value.unwrap());
}
}
if response.next_token.is_none() {
if response.next_token == None {
break;
}
token = response.next_token;
@@ -112,27 +112,28 @@ async fn ssm_get_parameters_by_path(
"error",
true,
Some(format!(
"Error calling ssm:GetParametersByPath. Environment variable: {} Path: {} Error: {}",
name, path, error
"Error calling ssm:GetParametersByPath. Environment variable: {} Path: {} Error: {:?}",
name, path, error.into_service_error().meta()
)),
);
return Err(anyhow::anyhow!(error.to_string())); // Return error
break;
}
}
}
Ok(items)
}


#[cfg(test)]
mod test {
use super::*;
use anyhow::Result;
use aws_sdk_ssm::model::ParameterType;
use aws_sdk_ssm::types::ParameterType;
use std::collections::HashMap;

#[tokio::test]
async fn should_parse() -> Result<()> {
let sdk_config = aws_config::load_from_env().await;
let sdk_config = aws_config::load_defaults(BehaviorVersion::v2024_03_28()).await;
let ssm_client = aws_sdk_ssm::Client::new(&sdk_config);
ssm_client
.put_parameter()
@@ -193,14 +194,4 @@ mod test {
assert_eq!(results, expected);
Ok(())
}

#[tokio::test]
async fn should_fail_if_param_not_found() {
let env_vars: HashMap<String, String> = HashMap::from([
("NON_EXISTENT_PARAM".to_string(), "x-crypteia-ssm:/crypteia/v5/myapp/NON_EXISTENT_PARAM".to_string()),
]);

let result = get_envs(env_vars).await;
assert!(result.is_err(), "Expected an error when parameter is not found");
}
}