サンプル集  >  other  >  RustをLambdaにデプロイ
RustをLambdaにデプロイ②
2025/06/08

RustをLambdaにデプロイします。

◆環境
OS Windows 10 Home 22H2 64bit

パッケージを作成します。 途中でyを入力しEnterを押します。

>cargo lambda new ymwrust009
> Is this function an HTTP function? Yes

ビルドします。

>cd ymwrust009

>cargo lambda build --output-format zip
    Updating crates.io index
     Locking 123 packages to latest compatible versions
      Adding lambda_http v0.13.0 (available: v0.15.0)
   Compiling proc-macro2 v1.0.95
   Compiling unicode-ident v1.0.18
   :
   Compiling lambda_http v0.13.0
   Compiling ymwrust009 v0.1.0 (C:\Users\xxx-\rust-workspace\ymwrust0
09)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 40.
22s

watchコマンドでLambdaのエミュレーターサーバを起動します。 watchコマンドは以前はstartと呼ばれていたコマンドとのことです。

>cargo lambda watch
 INFO starting Runtime server runtime_addr=127.0.0.1:9000
 INFO starting lambda function function="_" manifest=Some("Cargo.toml
") cmd=Exec { prog: "\\\\?\\C:\\Users\\xxx\\.rustup\\toolchains\
\stable-x86_64-pc-windows-msvc\\bin\\cargo.exe", args: ["run", "
--color", "auto", "--manifest-path", "Cargo.toml"] }
   Compiling proc-macro2 v1.0.95
   Compiling unicode-ident v1.0.18
   :
   Compiling lambda_http v0.13.0
   Compiling ymwrust009 v0.1.0 (C:\Users\xxx\rust-workspace\ymwrust00
9)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 22.
39s
     Running `target\debug\ymwrust009.exe`

別のコマンドプロンプトからcurlコマンドで動作確認します。

>curl -L http://127.0.0.1:9000/lambda-url/ymwrust009
Hello world, this is an AWS Lambda HTTP request

正常に動作したようです。 「Hello world, this is an AWS Lambda HTTP request」とメッセージが表示されました。

watchコマンドを実行中のコマンドプロンプトにもメッセージが表示されました。

 INFO starting lambda function function="ymwrust009" manifest=Some("C
argo.toml") cmd=Exec { prog: "\\\\?\\C:\\Users\\xxx\\.rustup\\to
olchains\\stable-x86_64-pc-windows-msvc\\bin\\cargo.exe", args: 
["run", "--color", "auto", "--manifest-path", "Cargo.toml", "--b
in", "ymwrust009"] }
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.1
4s
     Running `target\debug\ymwrust009.exe`

cargo lambda invokeコマンドで動作確認してみます。

>cargo lambda invoke ymwrust009 --data-example apigw-request
{"statusCode":200,"headers":{},"multiValueHeaders":{"content-type":["
text/html"]},"body":"Hello me, this is an AWS Lambda HTTP reques
t","isBase64Encoded":false}

watchを実行中のウィンドウには何も表示されませんでした。 curlコマンドをもう一度実行してみたところ何も表示されなかったので、前回はcurlの応答としてメッセージが表示されたわけではないかもしれません。

watchを実行中のコマンドプロンプトでCtrl+Cで停止させます。

 INFO terminating lambda scheduler
 INFO terminating lambda function function="ymwrust009"
 INFO terminating lambda function function="_"

AWS上にデプロイします。

>cargo lambda deploy --enable-function-url ymwrust009
✅ function deployed successfully 🎉
🛠️  binary last compiled 2 hours ago
🔍 arn: arn:aws:lambda:ap-northeast-1:806108692701:function:ymwrust0
09
🎭 version: 1
🔗 url: https://zzzzeeffkkrr3355hhbbww77iiooxxoe.lambda-url.ap-north
east-1.on.aws/

urlという行が表示されました。

invokeコマンドに--remoteを付けるとAWS上のLambdaを実行できるようです。

>cargo lambda invoke --remote ymwrust009 --data-example apigw-request
{"statusCode":200,"headers":{},"multiValueHeaders":{"content-type":["
text/html"]},"body":"Hello me, this is an AWS Lambda HTTP reques
t","isBase64Encoded":false}

statusCodeに200が返って来ました!

AWSマネジメントコンソールでLambdaを確認します。


Lambdaが作成されていましたがトリガーは何も設定されていませんでした。

CloudWatchでログを見てみます。


ログが出ていました。

Lambdaの「設定」タブの「関数URL」を選択し「編集」をクリックします。


「認証タイプ」がNONEになっているので、AWS_IAMを選択し「保存」をクリックします。


再度invokeを実施したら前回と同じ結果だったので念のため関数URLを削除しました。 ただ、削除後も同じ結果だったので本当に削除されたのか謎です。

調べたところ、cargo lambda invoke --remoteは関数URLを使わないでLambdaへアクセスしている可能性があるようです。

Lambdaを削除してcargo lambda invoke --remoteを実行したところエラーになりました。

>cargo lambda invoke --remote ymwrust009 --data-example apigw-request
Error:   x failed to invoke remote function
  |-> service error
  |-> ResourceNotFoundException: Function not found: arn:aws:lambda:a
p-northeast-1:888111666777:function:ymwrust009:
  |   $LATEST
  `-> ResourceNotFoundException: Function not found: arn:aws:lambda:a
p-northeast-1:888111666777:function:ymwrust009:
      $LATEST

  Was this behavior unexpected?
  Start a thread in https://github.com/cargo-lambda/cargo-lambda/disc
ussions

■試したコマンド
cargo lambda new ymwrust009
cargo lambda build --output-format zip
cargo lambda watch
cargo lambda invoke ymwrust009 --data-example apigw-request
cargo lambda deploy --enable-function-url ymwrust009
cargo lambda invoke --remote ymwrust009 --data-example apigw-request
curl -L http://127.0.0.1:9000/lambda-url/ymwrust009

▲ PageTop  ■ Home


Copyright (C) 2025 ymlib.com