実行環境とか利用するツールとか
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
デプロイする
デプロイ用のファイルを準備する
コマンド
deploy-stack.tsの内容を書き換えます。
mkdir deploy && cd deploy
cdk init app --language=typescript
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