要记录学习进程:如何在Lambda中使用TypeScript

背景

一位老爷爷在工作中需要使用AWS和JavaScript等技术的学习记录。

在Lambda中无法使用TypeScript,因此我寻找了一种使用它的方法,然后找到了Serverless Framework。

所以,当我尝试的时候,被告知了各种各样的事情发生了…

    • serverless

 

    • SAM

 

    • AWS-ToolKit for VSCode

結局は、SAM ?

对于无服务器的期望

    • TransCompile しながら Lambda への Deploy が出来そう

 

    • Serverless Offline もあるので、うまくいったあとは、開発は Offline で

 

    Google Cloud Functions/Azure Function などへも deploy 出来るので、覚えておくと役立つかも?

山姆和工具包

由于可以获得AWS的支持,所以可能还是选择这边吧……嗯,毕竟我们俩都是业余的。

选择不想要这边的理由可能是因为,如果不安装Docker,则无法进行离线操作。

尝试使用无服务器

 

    まずはインストール
npm install -g serverless

在这个公式中,谈到了如何在无服务器环境下选择模板,但由于我想使用Typescript,所以需要查阅帮助文档。

serverless create --help

所以,查看列表时,只有一个适用于AWS的选项。其他的是适用于Alexa/Azure function/Cloud functions的吗?

“aws-clojure-gradle”, “aws-clojurescript-gradle”, “aws-nodejs”, “aws-nodejs-docker”, “aws-nodejs-typescript”, “aws-alexa-typescript”, “aws-nodejs-ecma-script”, “aws-python”, “aws-python3”, “aws-python-docker”, “aws-groovy-gradle”, “aws-java-maven”, “aws-java-gradle”, “aws-kotlin-jvm-maven”, “aws-kotlin-jvm-gradle”, “aws-kotlin-jvm-gradle-kts”, “aws-kotlin-nodejs-gradle”, “aws-scala-sbt”, “aws-csharp”, “aws-fsharp”, “aws-go”, “aws-go-dep”, “aws-go-mod”, “aws-ruby”, “aws-provided”, “tencent-go”, “tencent-nodejs”, “tencent-python”, “tencent-php”, “azure-csharp”, “azure-nodejs”, “azure-nodejs-typescript”, “azure-python”, “cloudflare-workers”, “cloudflare-workers-enterprise”, “cloudflare-workers-rust”, “fn-nodejs”, “fn-go”, “google-nodejs”, “google-nodejs-typescript”, “google-python”, “google-go”, “kubeless-python”, “kubeless-nodejs””knative-docker”, “openwhisk-java-maven”, “openwhisk-nodejs”, “openwhisk-php”, “openwhisk-python”, “openwhisk-ruby”, “openwhisk-swift”, “spotinst-nodejs”, “spotinst-python”, “spotinst-ruby”, “spotinst-java8”, “twilio-nodejs”, “aliyun-nodejs”, “plugin”, “hello-world”

“aws-clojure-gradle” -> “AWS Clojure Gradle”
“aws-clojurescript-gradle” -> “AWS ClojureScript Gradle”
“aws-nodejs” -> “AWS Node.js”
“aws-nodejs-docker” -> “AWS Node.js Docker”
“aws-nodejs-typescript” -> “AWS Node.js TypeScript”
“aws-alexa-typescript” -> “AWS Alexa TypeScript”
“aws-nodejs-ecma-script” -> “AWS Node.js ECMA Script”
“aws-python” -> “AWS Python”
“aws-python3” -> “AWS Python 3”
“aws-python-docker” -> “AWS Python Docker”
“aws-groovy-gradle” -> “AWS Groovy Gradle”
“aws-java-maven” -> “AWS Java Maven”
“aws-java-gradle” -> “AWS Java Gradle”
“aws-kotlin-jvm-maven” -> “AWS Kotlin JVM Maven”
“aws-kotlin-jvm-gradle” -> “AWS Kotlin JVM Gradle”
“aws-kotlin-jvm-gradle-kts” -> “AWS Kotlin JVM Gradle KTS”
“aws-kotlin-nodejs-gradle” -> “AWS Kotlin Node.js Gradle”
“aws-scala-sbt” -> “AWS Scala SBT”
“aws-csharp” -> “AWS C#”
“aws-fsharp” -> “AWS F#”
“aws-go” -> “AWS Go”
“aws-go-dep” -> “AWS Go Dep”
“aws-go-mod” -> “AWS Go Mod”
“aws-ruby” -> “AWS Ruby”
“aws-provided” -> “AWS Provided”
“tencent-go” -> “Tencent Go”
“tencent-nodejs” -> “Tencent Node.js”
“tencent-python” -> “Tencent Python”
“tencent-php” -> “Tencent PHP”
“azure-csharp” -> “Azure C#”
“azure-nodejs” -> “Azure Node.js”
“azure-nodejs-typescript” -> “Azure Node.js TypeScript”
“azure-python” -> “Azure Python”
“cloudflare-workers” -> “Cloudflare Workers”
“cloudflare-workers-enterprise” -> “Cloudflare Workers Enterprise”
“cloudflare-workers-rust” -> “Cloudflare Workers Rust”
“fn-nodejs” -> “Fn Node.js”
“fn-go” -> “Fn Go”
“google-nodejs” -> “Google Node.js”
“google-nodejs-typescript” -> “Google Node.js TypeScript”
“google-python” -> “Google Python”
“google-go” -> “Google Go”
“kubeless-python” -> “Kubeless Python”
“kubeless-nodejs” -> “Kubeless Node.js”
“knative-docker” -> “Knative Docker”
“openwhisk-java-maven” -> “OpenWhisk Java Maven”
“openwhisk-nodejs” -> “OpenWhisk Node.js”
“openwhisk-php” -> “OpenWhisk PHP”
“openwhisk-python” -> “OpenWhisk Python”
“openwhisk-ruby” -> “OpenWhisk Ruby”
“openwhisk-swift” -> “OpenWhisk Swift”
“spotinst-nodejs” -> “Spotinst Node.js”
“spotinst-python” -> “Spotinst Python”
“spotinst-ruby” -> “Spotinst Ruby”
“spotinst-java8” -> “Spotinst Java 8”
“twilio-nodejs” -> “Twilio Node.js”
“aliyun-nodejs” -> “Aliyun Node.js”
“plugin” -> “Plugin”
“hello-world” -> “Hello World”

serverless create -t aws-nodejs-typescript

说明是yaml文件,但实际上是typescript。

image.png

所以,部署

serverless deploy

如果以正常方式操作,它会默认选择位于美国东部的us-east-1作为设置,所以要先在提供者中添加区域(region)然后进行操作。

    region: "ap-northeast-1",
image.png

非常容易啊,让人感到非常感动。

只是……以下对于业余者来说是一个挑战

image.png

所以,既然我只是个业余爱好者,我决定也试试调查和分析模型SAM。

错误和处理

image.png
image.png

 

npm install ts-node

权限不足

image.png

首先,隨意添加訪問權限並處理問題。
有指定像這樣適切地限制,請正確選擇。
最後,請使用IAM Access Analyzer根據訪問情況制定策略。

image.png

 

无法验证第一个证书。

由于使用了代理,需要更改设置并进行确认。

$env:http_proxy="http://*.*.*.*:****"
$env:https_proxy="http://*.*.*.*:****"
Get-ChildItem env:h*

SLS(无服务器 alias)不起作用。

image.png

如果觉得部署速度慢的话

看到这里,试试使用”-f”选项…非常快!

serverless deploy function -f {functionName}

函数名称:module.exports.hello = 的 “hello” 部分?
由于只更新Zip部分,所以非常快。

离线化

 

不安装Docker也可以运行是很方便的,但目前来看,优先级不是很高吧。。可能

错误处理

    • npm ERR! code ERR_INVALID_URL

 

    • プロキシの設定でプロトコルを消してた・・

 

    以下な感じになってたので、”http://” を追加

10.10.10.10的端口为8080。

如果您已经安装了NVM,那么代理设置应在以下目录以版本为单位进行配置:%appdata%\nvm{version}\etc\npmrc。

我試試看使用 SAM。

 

从SAM软件的安装开始

 

下载后,安装。

如果提前启动终端,为了反映环境变量,需要重新启动终端。

sam --version
image.png

AWS 认证信息的设置

既然已经做过了,所以跳过。

教程:部署Hello World应用程序

首先试试看。

sam init
image.png
    Template の利用を選択
image.png
    一番簡単な Hello World で
image.png
    Node.js を選択
image.png
    Zip で

可以部署的选项有容器或者代码压缩文件。

 

image.png
    TypeScript が選択出来た!
image.png
    X-Ray は、本番の時にしか使わなくてよさげ

AWS X-Ray通过使用请求跟踪、异常收集和分析器的功能,方便开发人员对分布式应用程序进行性能分析。

 

image.png

由于初始化已经完成,现在可以进行构建了。

cd sam-app
sam build

无论是使用 npm 还是 serverless,在当前目录进行初始化,但是 sam 在初始化时会创建一个文件夹呢。我提前创建了文件夹。

image.png

所以,终于开始部署。

sam deploy --guided
image.png
image.png
image.png
image.png
image.png

错误及处理

image.png

 

image.png

AWS工具包

 

只用VS Code也行,虽然用原版VS也可以,但是因为VS 2022在工作上还不能使用,而且还要找2019的许可证码,太麻烦了。

工具包

前提条件

    • node.js は nvm で対応済み。npm download

AWS SAM CLI もSAM で対処済み
Docker は とりあえず放置

安装 AWS Toolkit

image.png

AWS Explorer 的设置

image.png
image.png

正好借此机会,我已将以下功能作为反馈发送了出去。

    • 「No Custers found] の非表示☑

 

    • custers 数をサービス名の横に表示

 

    フィルター機能 in Explorer

实际应用了吗?

 

既经在SAM中创建了sam-app,因此将继续利用那里的内容。

调试设置

image.png

如果要这样做的话,需要安装Docker,所以稍后再说吧。

部署的方式

image.png

如果这样的话,应该有一些更容易的设置选项。

    1. 按下CTRL键和@键

 

    sam部署

现在我们了解了 ToolKit 的好处。

image.png

我觉得除了输入多个 sam 命令,还有更简便的方法,但现在情况还不清楚。
嗯,我打算继续与 sam 命令结合,逐渐寻找方便的功能……吧。

总结/尾声

暂时来说,我已经了解到在 TypeScript 代码中可以提供 Lambda 函数。

虽然有很多任务非常困扰,只能一点一点地努力。

这个是现在的问题吗?

    • SAM でのトリガー変更方法(デフォルトは API Gateway なので)

 

    • ToolKit の便利な使い方

 

    • AWS config の理解

 

    TypeScript の基礎(そもそも JavaScript すら知らん人なんですけどね
广告
将在 10 秒后关闭
bannerAds