【AWS CDK】Rustを使ってLambdaを実装してみる

AWS CDK信者になりつつあるので、Rustを使ってLambdaをデプロイしちゃいましょう。

実行環境とか利用するツールとか

OS

  • Windows 11

ツール

  • PowerShell
  • Visual Studio Code
  • Scoop
  • AWS関連のあれこれ

事前準備

今回は「cargo-lambda」を利用したサンプルを紹介します。
※「rust-aws-cdk-lambda」なんかデプロイできなかったので塩漬け中

Scoopをインストールする

Windowsで操作するにはScoopがあったほうが楽とのことなので、
ScoopInstallerを利用してインストールしてください。 手順はREADMEを参照してください。

cargo-lambdaをインストールする

コマンド
scoop bucket add cargo-lambda https://github.com/cargo-lambda/scoop-cargo-lambda
scoop install cargo-lambda/cargo-lambda

CDKのアレコレを準備する

コマンド
npm i -g aws-cdk
cdk bootstrap aws://xxxxxxxxxxxx/ap-northeast-1

プロジェクトを作成する

以下のコマンドを実行してRust Lambdaプロジェクトを作成します。
コマンド
cargo lambda new rust-lambda-test

> Is this function an HTTP function? Yes
> Which service is this function receiving events from? AWS Lambda function URLs

cd .\rust-lambda-test\

クロスコンパイルのターゲットをインストールする

コマンド
rustup target add aarch64-unknown-linux-gnu

ローカル環境でテストしてみる

ローカル環境起動

以下のコマンドを実行して、ローカル環境で動作確認してみましょう。
コマンド
cargo lambda start

アクセスしてみる

以下のURLにアクセスし、画像と同じレスポンスが返ってきていたらOKです。
URL
http://localhost:9000/lambda-url/rust-based-aws-lambda-example/

ビルドする

あとはビルド&デプロイするだけです。
まずはビルドしちゃいましょう。
コマンド
cargo lambda build --release

デプロイする

デプロイ用のファイルを準備する

コマンド
mkdir deploy && cd deploy
cdk init app --language=typescript
deploy-stack.tsの内容を書き換えます。
lib\deploy-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as path from "path";
import { Code, Function, Runtime, FunctionUrlAuthType } from "aws-cdk-lib/aws-lambda";
import { CfnOutput } from "aws-cdk-lib";

export class DeployStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const handler = new Function(this, "MyFunction", {
      code: Code.fromAsset(path.join(__dirname, "..", "..", "target/lambda/rust-lambda-test")),
      runtime: Runtime.PROVIDED_AL2,
      handler: "does_not_matter",
      functionName: "rust-lambda-function"
    });

    const fnUrl = handler.addFunctionUrl({
      authType: FunctionUrlAuthType.NONE,
    });

    new CfnOutput(this, 'TheUrl', {
      value: fnUrl.url,
    });
  }
}

デプロイコマンドを実行する

コマンド
cdk synth
cdk deploy

アクセスしてみる

実行結果の「DeployStack.TheUrl 」に表示されているURLにアクセスし、ローカル環境でのテスト結果と同じ結果が表示されていればOKです。

参考記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です