1. okuda_h

    No comment

    okuda_h
Changes in title
-Rust Runtime for AWS Lambdaの実行ファイルをWindows環境でWSLを利用せずにビルドしたらデプロイできなかった話
+Rust Runtime for AWS Lambdaの実行ファイルをWindows環境ビルドしたんだけど・・
Changes in body
Source | HTML | Preview
@@ -1,172 +1,172 @@
# Rust Lambda のビルド
Rustを勉強するついでにあえてWLSを利用せずにWindows環境でRust実行環境の構築と
-Lambda with Rustを構築してみる.
+Lambda with Rustを構築してみたんだけども・・
需要?しらぬ。
## 今回の動作環境
* Windows 10
* Rustインストール(rustup-init.exe)
* VSCode, rls extensionsインストール済み
* Windows 10 SDK, dev toolsをインストール済み
* Docker on Windowsインストール済み
## 参考
[AWS Blog:Rust Runtime for AWS Lambda](https://aws.amazon.com/jp/blogs/opensource/rust-runtime-for-aws-lambda/)
```powershell
PS C:\Users\h\OneDrive\ドキュメント\rust> cargo new rustlambdasample --bin
Created binary (application) `rustlambdasample` package
PS C:\Users\h\OneDrive\ドキュメント\rust>
```
## x86_64-unknown-linux-muslターゲットを追加
```
rustup target add x86_64-unknown-linux-musl
```
## 失敗
VS 2019 Visual C++ optionをインストールしろとな。
```
Compiling futures v0.1.29
error: linker `link.exe` not found
|
= note: 指定されたファイルが見つかりません。 (os error 2)
note: the msvc targets depend on the msvc linker but `link.exe` was not found
note: please ensure that VS 2013, VS 2015, VS 2017 or VS 2019 was installed with the Visual C++ option
error: aborting due to previous error
error: could not compile `libc`.
warning: build failed, waiting for other jobs to finish...
error: build failed
```
windows上でのビルド環境がそろっていなかったのでbuildtoolとwindows 10 SDKをインストール。
[ビルド環境参考](https://github.com/rust-lang/rust#building-on-windows)
[Windows 10SDK](https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk)
[visualcppbuildtools_full.exeダウンロードぺージ](https://www.microsoft.com/ja-JP/download/details.aspx?id=48159)
x86_64-unknown-linux-muslの取り込み成功
crossを利用すると簡単にクロスコンパイルできるらしいのでインストールしコンパイル実行する。
```
cargo install cross
cross build --release --target x86_64-unknown-linux-musl
PS C:\Users\h\OneDrive\ドキュメント\rust\rustlambdasample> cross build --release --target x86_64-unknown-linux-musl
Unable to find image 'rustembedded/cross:x86_64-unknown-linux-musl-0.1.16' locally
x86_64-unknown-linux-musl-0.1.16: Pulling from rustembedded/cross
35c102085707: Pull complete
251f5509d51d: Pull complete
8e829fe70a46: Pull complete
6001e1789921: Pull complete
1361eb413a0a: Pull complete
e23741e5f3bc: Pull complete
33fbfcc5c23e: Pull complete
924e4a072267: Pull complete
661205389135: Pull complete
e782bbff3ee6: Pull complete
cf883c10f870: Pull complete
Digest: sha256:e6a64723b28e7874b643a09a173a78f5e5d1841271b980632a9c479e200bba87
Status: Downloaded newer image for rustembedded/cross:x86_64-unknown-linux-musl-0.1.16
Compiling libc v0.2.66
Compiling cfg-if v0.1.10
Compiling semver-parser v0.7.0
Compiling autocfg v0.1.7
Compiling futures v0.1.29
  
~~~ 中略 ~~~
Compiling tokio-uds v0.2.5
Compiling tokio-udp v0.1.5
Compiling tokio-tcp v0.1.3
Compiling tokio-threadpool v0.1.17
Compiling tokio-fs v0.1.6
Compiling tokio v0.1.22
Compiling lambda_runtime_client v0.1.0
Compiling lambda_runtime v0.1.0
Compiling rustlambdasample v0.1.0 (/project)
Finished release [optimized] target(s) in 4m 30s
PS C:\Users\h\OneDrive\ドキュメント\rust\rustlambdasample>
```
コンパイル成功!!
ユニットテストも実行してみる。
~~~cmd
PS C:\Users\h\OneDrive\ドキュメント\rust\rustlambdasample> cross test --release --target x86_64-unknown-linux-musl
Compiling rustlambdasample v0.1.0 (/project)
Finished release [optimized] target(s) in 8.31s
Running /target/x86_64-unknown-linux-musl/release/deps/bootstrap-6074c8f123664827
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
~~~
zip化してLambda環境にデプロイしてみる。
```
Compress-Archive -Path ./target/x86_64-unknown-linux-musl/release/bootstrap -DestinationPath rust.zip
```
#### Lambda関数設定値
- カスタム関数
- provided(ユーザー独自)
#### テストJSONリクエスト
```json
{
"firstName": "Rustacean"
}
```
そして、実行!!
<img width="1032" alt="fail.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36221/1ff1e664-c3f7-629b-4270-94b21d3c3748.jpeg">
失敗・・・・。
実行権限がWindows上でのアーカイブだと設定できおらず、AWS Lambda内で実行できず失敗する模様。
方法わからなかったので分かる方いらっしゃったら教えてください・・・。
## 仕方ないので・・・
ここまできたらどうにかビルドしたbootstrapの動作確認がしたいので・・。
(結局)WSLを介してzip化を行い再度デプロイしてみる。
```
/mnt/c/Users/h/OneDrive/ドキュメント/rust/rustlambdasample# zip -j rust.zip ./target/x86_64-unknown-linux-musl/release/bootstrap
```
## 再実行
成功!!
<img width="1044" alt="suc.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36221/a17c9dee-9c7f-c76d-9f20-c0fe32ab62bd.jpeg">
おとなしく公式のいうとおり、WSL上でビルドします・・・。
## まとめ
* windows 10なら迷わずwslを使いましょう。
* crossを利用すればクロスコンパイルの環境が簡単に用意できる。(ただしdocker環境が必要)
-* windows 7などでもdocker on Windowsがインストールできてればローカル環境でAWS Lambdaの実行環境でユニットテストできそう
+* windows 7などでもdocker on Windowsがインストールできてればローカル環境でAWS Lambdaの実行環境でユニットテストできそう