技術ブログ株式会社エーピーコミュニケーションズの技術ブログです。エーピーコミュニケーションズの技術ブログです。>はじめにこんにちは、ACS事業部の髙井です。みなさんRustは使っていますか?母語の次に学ぶべき言語はRustと言われていますよね。母語をRustにすべきとも言われています(どこで?)それは冗談にしてもTURBOPACKが話題になっていたり、Rustによるエコシステム高速化の波は確実にあり、Rustの注目度はどんどん上昇中です。この際、せっかくなので母語にしましょう。PaaSにRustアプリケーションをデプロイしていきたいと思います。いう言葉をよく聞きます。LambdaとRustの組み合わせはサーバレスでよく利用されているようです。aws.amazon.comそういうのを聞くと「ならばあえてAzureで」と意気込むのが真のAzuristというものではないでしょうか。(AKS)といったサービスがあります。どれかひとつを選ぶなら、いったいどれを使うとよさそうかについては以前に別の記事を書きました。techblog.ap-com.co.jp今回も「漢は黙ってACA」と言い放ち、ACAだけ紹介してもいいのですが、それでは味気ないので全部紹介していきましょう。サンプルアプリケーションサンプルのアプリケーションはRust製Webフレームワークであるactix-webを利用してみましょう。actix-webはめっちゃいい感じのフレームワークです。こちらの記事なんかが参考になります。logmi.jpさて、GitHubに公開されているexample集のなかに、いかにもbasicっぽい名前のものがあるのでこちらを使います1。github.comルートページにアクセスすると、静的ファイルにリダイレクトされる仕様になっているようです。こちらはコンテナ化はされていないので、していきます。アプリケーションコードの書き換えまず、この部分にあるbindを書き換えて外部からの呼び出しに対応させます。8080))?これは、具体的には0.0.0.0が入ると思えばよいです。次に、Dockerfileを作成します。Functionsを利用する際に書き換えたりバイナリを利用したりもするので、ローカルでbuildしたものを利用していきます。["./basics"]ローカルでのbuildは以下のコマンドで行います(Rust環境のインストールはされている前提です)。--releaseCIなど、Dockerfile内にビルド工程を含めたマルチステージにしたい場合は、以下のようにしてもよいです。冪等にはなりますが、時間のかかる初回ビルドを毎回走らせることになることにご注意ください。["./basics"]作成したイメージはACRにpushしておきます。Functionsではネイティブ言語としてはRustがサポートされていません。そのため、Rustを利用するなら基本的にはコンテナ化して、コンテナ対応のPaaSにデプロイする流れとなります。Containersを利用します。learn.microsoft.com注意点としてはカスタムコンテナーを利用する場合は、価格レベルBasic以上が必要です。Serviceの制限には書いていないのですが、料金ページを見ると地味に他のSKUには書いてあるカスタムコンテナーに関する記述がFreeには書かれていなかったりします。PortalからもFreeかつカスタムコンテナーという構成でデプロイ自体はできてしまうのでご注意ください(デプロイはできるけど疎通はできない)。Appsが出現したことにより、この機能は永遠にプレビューのままなのではないかという噂2もあります。Functionsの場合は、2通りのデプロイ方法があります。learn.microsoft.comカスタムイメージを利用する場合は、従量課金プランは利用できないので注意してください。Functionsを使う場合は、コードの書き換えとファイルの追加が必要になります。Codeの拡張機能を使って生成するのが楽チンです。Project...することで生成できます。カスタムハンドラーのエントリポイントを指定するためにhost.jsonを編集します。}}上記のように、defaultExecutablePathとenableForwardingHttpRequestを設定すればOKです。Functionsは3000番ポートがデフォルトなので書き換えていきます。環境変数によっても変更できるようにしています。port))?デプロイ以上の処理を完了すると、無事デプロイ可能な状態が揃います。以下の2つを順に実行してAzure環境にデプロイが可能です。Portalからやっていきましょう。アドレスにアクセスできないにもある通り、ポートマッピングには非対応です。そのため、アプリケーション側で80を公開するか、ACIで8080等を公開するように設定する必要があります。Portalで記入すればOKです。Appsへのデプロイこちらはチームメンバーが書いた素晴らしい記事があるのでそちらを見ればすべてがわかります。Serviceへのデプロイさて、AKSはKubernetes自体の知識も必要ですし、準備がそこそこ大変です。逆に考えると普通のKubernetesに載せるだけですので、Azure独自の取り回しのようなことはしなくてよいです。いうことでAKSの標準的なデプロイをしましょう。こちらも以前にチームメンバーの誰かがブログを書いてい......ない!なんてこった、ちょっと詰まりやすい周辺事項ばかり記事になっててシンプルなデプロイに関するブログがありませんでした。仕方がないので、こちらの公式ドキュメントをご参考ください。learn.microsoft.comと言いたいところですが、簡単に書いておきましょう。検証用に安価な構成で作成するなら以下のようなコマンドでデプロイすることになるでしょう。$RG_NAMEここまで出来ればローカルのkubectlからAKSを操作可能です。マニフェストは簡素な構成にするなら以下のようになるかと思います。svcで出てきたEXTERNAL-IPにアクセスすれば疎通できているのが確認できるでしょう。PaaSでは簡単にRustアプリケーションがデプロイできることが分かりました。PaaSは本当に開発者寄りなので、「開発者がインフラのことを極力考えなくても済む」ような状態を目指して作っている印象です。いうことでぶっちゃけRustに限らずコンテナさえあればなんでも簡単にデプロイできます!我々がAzureやコンテナを中心に据えてご支援を提供している理由でもあります。Developers💛って感じがしますね。ACAを使えば今回紹介したようなごくごくシンプルなシングルコンテナー構成にとどまらず、マイクロサービスの構築までいけちゃうってのはすごいことです。いうことで、今回はこれくらいにしておきます。髙井先生の次回作にご期待ください。比文AKSをメインにしたインフラとアプリの領域際をご支援することが多いです。Azureは11冠です。Engineeringの導入支援、データ&AI基盤に関連するサービスを提供しています。わたしたちは「エンジニアとお客様を笑顔にする」というVisionを掲げ、インフラエンジニアの未来を創るNeoSIerとして工夫と挑戦を行い続けます。読者になるこのブログについて引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。