Serverless雲の最初の観察
28983 ワード
Serverless Cloud からの新しいServerlessアプリプラットフォームですServerless, Inc. 会社の初期製品とは異なりServerless Framework , AWSに直接アプリケーションを配備しません.代わりに、あなたのアプリは即座に展開され、ダッシュボードとリアルタイムのログでクラウド内の新しいホスティングサービスに住んでいます.
このプロジェクトのすべてのコードを見つけることができますon my GitHub .
インストールクラウド
インストール
初期化サービス
お使いのローカルマシン上の空白のフォルダーをサービスのコードに作成し、
ステージング環境への配備
サービス名を指定し、
いくつかのTodosを追加します.
プロジェクトコード
この関数は、異なるAPIパスで再利用できます.
カスタムエラーハンドラミドルウェア
この関数はエラー処理のためのミドルウェアを提供します.エラーも、devモードであなたの端末にライブ配信されます.
時間の経過を追って
サンプル・トード
テスト
テストがあります.ある日、テストを書きます.
静的資産
あなたからの静的資産を提供することができます
変更する
変更する
ダッシュボード
これは、ダッシュボードを持っていることを意味雲ですので、右?どのように、私は私のClickops任務を実行することができますか?
サービス
Serverless雲を使用すると、チームの組織内のサービスを構築することができます.
あなたは、さまざまなサービスとしては、さまざまなユースケースやアプリケーションのように作成することができます.
インスタンス
各インスタンスは、サービス内のすべての他のインスタンスと完全に分離され、データの独自のコピーを格納します.
インスタンス内の環境は同一であるため、アプリケーション全体を完全に同じように動作させることができます.
計量
数字についての情報を教えてください.
概要
かなりクール.何も爆破、それは予想通りに動作し、私は10秒未満で配備されたアプリケーションを持っていた.
資源 Documentation GitHub repository
このプロジェクトのすべてのコードを見つけることができますon my GitHub .
インストールクラウド
インストール
@serverless/cloud
からnpm
.npm i -g @serverless/cloud
初期化サービス
お使いのローカルマシン上の空白のフォルダーをサービスのコードに作成し、
cloud
コマンド.mkdir ajcwebdev-serverless-cloud
cd ajcwebdev-serverless-cloud
cloud
お使いのブラウザが自動的に開き、CLIを介してログインしたり、ログインリンクを端末に提供します.したら、起動時に入力するアクティベーションコードを与えられる接続されます.ステージング環境への配備
サービス名を指定し、
deploy dev
対話型端末で.deploy dev
また、使用することができますcloud deploy dev
これらのプロジェクトのうちの1つをRepoからクローン化して、すぐにそれを展開したいならば.cloud deploy dev
配備されますendpoint サンプルtodoアプリで.いくつかのTodosを追加します.
プロジェクトコード
package.json
The @serverless/cloud
パッケージはデフォルトでクラウドランタイムに含まれています.したがって、package.json
.{
"name": "ajcwebdev-serverless-cloud",
"version": "1.0.0",
"description": "Serverless Cloud todo api",
"main": "index.js",
"type": "module",
"scripts": {
"start": "cloud",
"test": "cloud test"
},
"devDependencies": {
"@jest/globals": "^27.1.0",
"@serverless/cloud": "^0.0.22"
},
"serverless": {
"org": "ajcwebdev",
"service": "ajcwebdev-serverless-cloud"
}
}
index.js
我々はモジュールから一握りのモジュールをインポートする@serverless/cloud
我々のトップでindex.js
ファイル.// index.js
import {
api,
data,
schedule,
params
} from '@serverless/cloud'
api
は、残りのAPIをビルドするために使用されます.api.get
- GET
方法api.post
- POST
方法api.delete
- DELETE
方法api.use
- ミドルウェアdata
はサーバレスデータにアクセスする.data.get
- データを読み込むdata.getByLabel
- 指定したラベルでデータを読み込むdata.set
- データを記憶に書き込むdata.remove
- データを削除するschedule
は、スケジュールされたタスクを作成するために使用されます.schedule.every
- 60分ごとに指定された時間間隔で走るgetTodos
機能この関数は、異なるAPIパスで再利用できます.
// index.js
const getTodos = async (status, meta) => {
let result
if (status === 'all') {
result = await data.get('todo:*', meta)
} else if (status === 'complete') {
result = await data.getByLabel('label1','complete:*', meta)
} else {
result = await data.getByLabel('label1','incomplete:*', meta)
}
return {
items: result.items.map(
item => item.value
)
}
}
GET
藤堂項目/todos
この関数はgetTodos
ステータスで関数を返し、結果を返します.// index.js
api.get('/todos', async (req, res) => {
let result = await getTodos(
req.query.status,
req.query.meta ? true : {}
)
console.log(params.CLOUD_URL)
res.send({
items: result.items
})
})
POST
TODO項目への更新'/todos/:id'
この関数はbody
を返します.data
. The body
を含めることができますduedate
. また、含まれてid
, createdAt
日付と時刻status
それでcomplete
or incomplete
. TODOの設定後getTodos
クエリはすべてのtodosで再度実行され、更新されたリストが返されます.// index.js
api.post('/todos/:id', async (req, res) => {
console.log(new Date().toISOString())
let body = req.body
if (body.duedate) {
body.duedate = new Date(body.duedate).toISOString()
}
await data.set(
`todo:${req.params.id}`,
{
...body,
createdAt: Date.now()
},
Object.assign({},
req.body.status ?
{
label1: body.status === 'complete'
? `complete:${new Date().toISOString()}`
: `incomplete:${body.duedate ? body.duedate : '9999' }` }
: null
)
)
let result = await getTodos(
req.query.status
)
res.send({
items: result.items
})
})
に注意を払わないternary soup インObject.assign
それが何の意味もないならば.だけでそれを残して、それを触れないでください.DELETE
藤堂項目'/todos/:id'
この関数は、data.remove
そして、リストの残りのtodosを検索して返します.// index.js
api.delete('/todos/:id', async (req, res) => {
await data.remove(`todo:${req.params.id}`)
let result = await getTodos(req.query.status)
res.send({
items: result.items
})
})
カスタムエラーハンドラミドルウェア
この関数はエラー処理のためのミドルウェアを提供します.エラーも、devモードであなたの端末にライブ配信されます.
// index.js
api.use((err, req, res, next) => {
console.error(err.stack)
if (!err.statusCode) {
err.statusCode = 500
}
const error = {
name: err.name,
statusCode: err.statusCode,
message: err.message,
}
res.status(err.statusCode).json(error)
})
時間の経過を追って
schedule.every
場合によっては、スケジュールのコードを実行する必要があります場合は、警告のときにアイテムが期限切れに送信したい.この関数は、期限切れになったアイテムをループし、必要な場合は警告を送ります.// index.js
schedule.every("60 minutes", async () => {
console.log(`Checking for overdue TODOs...`)
let overdueItems = await data.getByLabel(
'label1',
`incomplete:<${new Date().toISOString()}`
)
if (overdueItems.items.length === 0) {
console.log(`Nothing overdue!`)
}
for (let item of overdueItems.items) {
console.log(
`ALERT: '${item.value.name}' is overdue!!!`
)
}
})
サンプル・トード
data.json
{
"key": "todo:1",
"value": {
"id": "1",
"name": "Deploy an amazing Serverless Cloud app",
"status": "complete",
"completed": "2021-07-01T12:00:00.000Z",
"createdAt": 1627316142196
},
"label1": "complete:2021-07-01T012:00:00.000Z"
},
テスト
テストがあります.ある日、テストを書きます.
静的資産
あなたからの静的資産を提供することができます
static
フォルダ.現在使用中のフォルダassets
画像のフォルダindex.html
メインページstyles.css
スタイリングtodos.js
すべての反応コードのためにあなたのチームのバックエンド開発者を怖がらせることができます変更する
index.html
と展開する変更する
<header>
インindex.html
.<header>
<div>
<h1 class="text-center">
ajcwebdev serverless cloud
</h1>
<h3 class="grey text-center">
Seriously, there are so few servers you wouldn't believe it
</h3>
</div>
</header>
での展開cloud deploy prod
or deploy prod
対話型端末セッションで.cloud deploy prod
The link あなたのクリップボードの原因に自動的に貼り付けられたリンクをコピーする必要がありますnoobsのです.ダッシュボード
これは、ダッシュボードを持っていることを意味雲ですので、右?どのように、私は私のClickops任務を実行することができますか?
サービス
Serverless雲を使用すると、チームの組織内のサービスを構築することができます.
あなたは、さまざまなサービスとしては、さまざまなユースケースやアプリケーションのように作成することができます.
インスタンス
各インスタンスは、サービス内のすべての他のインスタンスと完全に分離され、データの独自のコピーを格納します.
インスタンス内の環境は同一であるため、アプリケーション全体を完全に同じように動作させることができます.
計量
数字についての情報を教えてください.
概要
かなりクール.何も爆破、それは予想通りに動作し、私は10秒未満で配備されたアプリケーションを持っていた.
資源
Reference
この問題について(Serverless雲の最初の観察), 我々は、より多くの情報をここで見つけました https://dev.to/ajcwebdev/a-first-look-at-serverless-cloud-3e18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol