🦀
Rust で AWS Systems Manager のパラメータストアからパラメータを取得する
Rust の Lambda 関数から api を叩きたいと思ったけれど、 api key とかをベタ書きする訳には行かないので、 AWS Systems Manager のパラメータストアを使うことにしました。
らしいです
例にもれずドキュメントと AWS SDK for Rust API referenceを参考にやっていきます。
目標
- Rust で構築した Lambda 関数上で AWS SDK for Rust を利用する
- http リクエストの body から JSON パラメータを受け取る
- パラメータストアからパラメータを取得する。
- 取得したパラメータをそのまま返す
- Lambda 関数の構築 は aws sam , cargo lambda を使って実施する
ライブラリの追加
今回必要なのはココらへん
- aws-sdk-ssm : Systems Manager まわりの色々をやってくれる
- aws-congfig : aws アカウント周りの色々をやってくれる
- serde_json : json シリアライズ用
- lambda_http : http リクエスト周りを色々やってくれる
cargo add aws-sdk-ssm aws-config serde_json lambda_http
それではやっていきます。
ライブラリの宣言
使うのはココらへんです
Json 用 struct
body に含まれている json を受け取るための構造体です。
Lambda 初期化
初期化時に ssm_client を作成し、 Lambda の関数ハンドラに引き渡します
関数ハンドラ
Lambda の実際にロジックを記載する関数部分です
受け取った JSON をシリアライズした後、指定の path に対して、パラメータストアから値を取得します。
パラメータストアからの値の取得
作成した Client に対して、 get_parameter() でパラメータを取得します。
with_decryption(true) とすることで、KMS暗号化された値を取得できます。
デプロイ・動作確認
以下のコマンドでデプロイを実施
sam build --beta-features
sam deploy --guided
デプロイ後 curl で値が取れることを確認します
curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/description -d '{"path": "ssm-test"}'
>ssm-test-done
まとめ
- 今回のケースだと、POST じゃなくて GET のほうが適切ですね
- aws sdk 使いやすくて助かる
Discussion