wing lang(cloud-oriented language)を利用したAWSへのリソースのデプロイを体験
wing langでAWSへリソースのデプロイを体験してみる
今回、公式ドキュメント上のチュートリアルをやってみました。内容としてなんら違いはありませんので、英語で構わない方(若しくは画面翻訳すれば)はそちらの方が◎ですが、ブログとして存在することで目につく方もいるかと思いましたので、一応残しました。
ご興味があれば是非ご覧ください。
公式
ドキュメント
GitHub
プレイグラウンド
前提
・Node.js (>= 18.13.0)
・VSCode (必須ではありませんが、現在拡張機能でサポートされています)
・テラフォーム
・認証情報が設定された AWS CLI。
が必要とのこと。
チュートリアル開始
インストール
$ nnpm install -g winglang
added 313 packages in 32s
57 packages are looking for funding
run `npm fund` for details
↓
ヴァージョン確認
$ wing --version
0.48.5
↓
ヘルプ確認
$ wing -h
Usage: wing [options] [command]
Options:
--debug Enable debug logging (same as DEBUG=1)
-h, --help display help for command
--no-analytics Disable analytics collection (same as WING_DISABLE_ANALYTICS=1)
--no-color Disable colors for all output
--no-progress Hide show compilation progress
--no-update-check Skip checking for toolchain updates
--progress Show compilation progress
-V, --version output the version number
Commands:
run|it [options] [entrypoint] Runs a Wing program in the Wing Console
lsp Run the Wing language server on stdio
compile [options] [entrypoint] Compiles a Wing program
test [options] [entrypoint...] Compiles a Wing program and runs all functions with the word
'test' or start with 'test:' in their resource identifiers
pack [options] Package the current directory into an npm library (gzipped
tarball).
docs Open the Wing documentation
help [command] display help for command
↓
VSCode Marketplace からWing VSCode拡張機能をダウンロードしインストールとの事。
VSCODEの中からでもOK
ローカル作業
hello-wingディレクトリを作成・移動し空のファイルmain.wを作成→VS Codeで開きます。
$ mkdir hello-wing && cd hello-wing && touch main.w && code main.w
↓
以下内容を貼付し保存します。
bring cloud;
let bucket = new cloud.Bucket();
let counter = new cloud.Counter(initial: 1);
let queue = new cloud.Queue();
queue.setConsumer(inflight (message: str) => {
let index = counter.inc();
bucket.put("wing-${index}.txt", "Hello, ${message}");
log("file wing-${index}.txt created");
});
コンソールの動作を確認
$ wing it main.w
🧪 This is an early pre-release of the Wing Programming Language.
We are working hard to make this a great tool, but there's still a pretty good
chance you'll encounter missing pieces, rough edges, performance issues and even,
god forbid, bugs 🐞.
Please don't hesitate to ping us at https://t.winglang.io/slack or file an issue at
https://github.com/winglang/wing. We promise to do our best to respond quickly and help out.
To help us identify issues early, we are collecting anonymous analytics.
To turn this off, set WING_DISABLE_ANALYTICS=1.
For more information see https://winglang.io/docs/analytics
(This message will self-destruct after the first run)
The Wing Console is running at http://localhost:3000/
↓
ブラウザがhttp://localhost:3000/を開きモーダルを表示します。
↓
「close」を押すと↓の表示となります。
「自動パイロット中です。今後、ソース ファイルに変更が加えられるたびに、Wing Console がアプリを「ホット リロード」します。コードを保存するたびに、アプリの新しいコピーがコンソールに再ロードされます。」との事です。
↓
cloud.Queueを選択した状態で、Push Message Boxに文字列を入力し「push」をクリックすると「file wing-1.txt created」と表示されました。
↓
cloud.Bucketを選択して、ファイルをUploadしたりDownLoadしたりも可能とのこと。
↓
cloud.Counterの値の操作も出来るよだそうです。
AWSへデプロイ
AWSへのデプロイはTerraformへのコンパイルで実現するそうです。
AzuleやGoogle Cloud、プロビジョニングエンジンとしてCloudFormation や Kubernetesなどのサポートも今後の視野に入れているそうです。
$ wing compile --platform tf-aws main.w
↓
結果です。
「これで、ディレクトリには、このmain.tfawsアプリケーションのすべての Terraform 構成が含まれるtargetディレクトリが作成されます。」
↓
作業dir移動→terraform init
$ cd ./target/main.tfaws
$ export AWS_REGION=us-east-1 # or any other region
$ terraform init
Initializing the backend...
Successfully configured the backend "local"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding hashicorp/aws versions matching "4.65.0"...
- Installing hashicorp/aws v4.65.0...
- Installed hashicorp/aws v4.65.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
↓
デプロイ
$ terraform apply
Terraform used the selected providers to generate the following execution plan. Resource actions
are indicated with the following symbols:
+ create
Terraform will perform the following actions:
#(※中略)
Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
Outputs:
WING_TEST_RUNNER_FUNCTION_IDENTIFIERS = "[]"
結果を確認
cloud.Queueから作成されたもの
cloud.Bucketから作成されたもの
asset.zipもオブジェクトとして確認出来ました。(画像はDLした結果)
cloud.Counterから作成されたもの
お片付け
terraform destroy
#(※中略)
Destroy complete! Resources: 11 destroyed.
以上でした
有難うございました。
Discussion