はじめに
今回はAWS SDK for Rustを試します。
Lambda, DynamoDB, S3を利用し簡易な画像掲示板を作ります。
DynamoDB・S3周りはaws-sdk-rustを利用し、Lambda周りやビルド・デプロイはaws-lambda-rust-runtimeを利用します。
AWS SDK for Rustの利点
すべてのクレートは crates.io で入手できます。SDK は、EC2、ECS、Lambda などの環境で実行する場合の自動構成、組み込みの再試行サポート、およびお客様のニーズを満たすためのさまざまな認証メカニズムを提供します。AWS SDK for Rust は、CPU とメモリの使用率を削減し、アプリケーションのためにより多くのリソースを解放するために、不要なコピーと割り当てを最小限に抑えるシリアライザーとデシリアライザーを使用した高速化設計です。
準備
- AWS SAMの準備
- Rust環境の準備
API作成
DynamoDBのテーブルから要素を取得するにはscanを使います。
let client = Client::new(&shared_config);
let res: Result<Vec<_>, _> = client
.scan()
.table_name(env_table)
.into_paginator()
.items()
.send()
.collect()
.await;
DynamoDBのテーブルへ要素を挿入するにはput_itemを使います。
let dynamodb_client = DynamodbClient::new(&shared_config);
let id_av = AttributeValue::N(image_id);
let url_av = AttributeValue::S(image_uri);
let created_av = AttributeValue::S(created);
let request = dynamodb_client
.put_item()
.table_name(env_table.clone())
.item("img_id", id_av)
.item("url", url_av)
.item("created", created_av);
request.send().await?;
S3にオブジェクトをアップロードするにはput_objectを使います。
let s3_client = S3Client::new(&shared_config);
s3_client
.put_object()
.acl(ObjectCannedAcl::PublicRead)
.bucket(&env_bucket)
.key(&filename)
.body(ByteStream::from(decode(base64data).unwrap()))
.content_type(content_type)
.send()
.await?;
ビルド
cargo lambda build --release --arm64
デプロイ
sam deploy --guided
簡易画像掲示板の動作確認
終わりに
AWS SDK for Rustを試しました。
aws-sdk-rustの更新が頻繁で、今後大きなバージョンアップがあるかもしれませんので継続的に試していこうと思います。
- 今回作成した簡易画像掲示板のソースコードは以下のリポジトリにあります。
以下の記事・資料を参考にしました。
新しい AWS SDK for Rust のアルファリリース
DynamoDB examples using SDK for Rust
Amazon S3 examples using SDK for Rust
Enum aws_sdk_s3::model::ObjectCannedAcl