400-638-8808
|
微信公眾號





穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

可以使用無服務(wù)器框架創(chuàng)建和部署 AWS Lambda。它允許您創(chuàng)建 AWS Lambda 觸發(fā)器并通過創(chuàng)建所需的角色來部署它。無服務(wù)器框架允許以更簡單的方式處理大型項(xiàng)目。所需的事件和資源在一處編寫,只需幾個(gè)命令即可在 AWS 控制臺上部署完整功能。
在本章中,您將詳細(xì)了解如何開始使用 AWS 無服務(wù)器框架。
首先,您需要先安裝 nodejs。您可以按如下方式檢查 nodejs-

您必須使用以下命令使用 npm 包安裝無服務(wù)器-
npm install-g serverless

npm 完成后,執(zhí)行無服務(wù)器命令,該命令顯示用于創(chuàng)建和部署 AWS Lambda 函數(shù)的命令列表。觀察下面給出的屏幕截圖-


您也可以使用 sls 代替無服務(wù)器。 sls 是無服務(wù)器的簡寫命令。

如果您需要有關(guān)命令 sls, 的幫助,您可以使用以下命令-
sls create--help

要?jiǎng)?chuàng)建無服務(wù)器框架,您必須按照以下步驟操作-
要開始使用無服務(wù)器框架,我們需要添加憑據(jù)。這樣,您可以首先在 AWS 控制臺中使用用戶,如下所示-

點(diǎn)擊 下一步:權(quán)限按鈕添加權(quán)限。您必須將現(xiàn)有政策或管理員訪問權(quán)限附加到此用戶。


點(diǎn)擊 創(chuàng)建用戶來添加用戶。它將顯示我們需要配置無服務(wù)器框架的訪問密鑰和秘密密鑰-

讓我們看看如何配置 AWS 無服務(wù)器框架。為此,您可以使用以下命令-
sls config credentials--provider aws--key accesskey--secret secretkey

請注意,輸入的憑據(jù)的詳細(xì)信息,即 訪問密鑰 和 秘密密鑰 存儲在 文件/aws/credentials 中。
首先,創(chuàng)建一個(gè)文件夾,用于存儲項(xiàng)目文件。

接下來,我們將在 aws-serverless 文件夾中開始工作。
現(xiàn)在,讓我們使用下面給出的步驟使用無服務(wù)器框架創(chuàng)建一個(gè) Lambda 函數(shù)-
以下是無服務(wù)器 create 命令的詳細(xì)信息-

現(xiàn)在,我們需要分配如下模板-
AWS-nodejs、aws-nodejs-typescript、aws-nodejs-ecma-script、aws-python、aws-python3、aws-groovy-gradle 等
我們將使用 aws-nodejs 模板創(chuàng)建我們的第一個(gè)使用無服務(wù)器框架的項(xiàng)目。用于相同目的的命令如下所示-
sls create--template aws-nodejs

請注意,此命令會為模板 aws-nodejs 創(chuàng)建樣板。
現(xiàn)在,打開在 IDE 中創(chuàng)建的文件夾。這里我們使用的是 Visual Studio 代碼,文件夾結(jié)構(gòu)如下-

創(chuàng)建了 2 個(gè)文件: handler.js 和 Serverless.yml
AWS Lambda 基本函數(shù)詳細(xì)信息顯示在 handler.js 中,如下所示-
"use strict";
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: "Go Serverless v1.0! Your function executed successfully!",
input: event,
}),
};
callback(null, response);
// Use this code if you don"t use the http event with the LAMBDA-PROXY integration
// callback(null, { message: "Go Serverless v1.0! Your function executed successfully!", event });
};
此文件 Serverless.yml 包含無服務(wù)器框架的配置詳細(xì)信息,如下所示-
# Welcome to Serverless!
#
# this file is the main config file for your service.
# It"s very minimal at this point and uses default values.
# You can always add more config options for more control.
# We"ve included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# for full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function"s IAM Role here
# iamRoleStatements:
# -Effect: "Allow"
# Action:
# -"s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# -Effect: "Allow"
# Action:
# -"s3:PutObject"
# Resource:
# Fn::Join:
# -""
# --"arn:aws:s3:::"
# -"Ref" : "ServerlessDeploymentBucket"
# -"/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# -include-me.js
# -include-me-dir/**
# exclude:
# -exclude-me.js
# -exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# -http:
# path: users/create
# method: get
# -s3: ${env:BUCKET}
# -schedule: rate(10 minutes)
# -sns: greeter-topic
# -stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# -alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# -alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# -iot:
# sql: "SELECT * FROM "some_topic""
# -cloudwatchEvent:
# event:
# Example:
# -"aws.ec2"
# detail-type:
# -"EC2 Instance State-change Notification"
# detail:
# state:
# -pending
# -cloudwatchLog: "/aws/lambda/hello"
# -cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
現(xiàn)在,我們需要根據(jù)我們的要求在 serverless.yml 文件中添加更改。您可以使用下面給出的命令-
您可以將以下命令用于 服務(wù)-
service: aws-nodejs # NOTE: update this with your service name
現(xiàn)在,在此處更改服務(wù)并將給定的名稱添加到我們的文件夾中,如圖所示-
service: aws-serverless # NOTE: update this with your service name
提供者詳細(xì)信息如圖所示-
provider: name: aws runtime: nodejs6.10
提供程序是 aws,運(yùn)行時(shí)是 nodejs6.10。我們需要添加我們將在其中工作的 region 和 stage,即項(xiàng)目的 dev 或 prod 環(huán)境。所以這里是 provider:provider 的更新細(xì)節(jié)-
name: aws runtime: nodejs6.10 # you can overwrite defaults here stage: prod region: us-east-1
iam 角色,即允許使用 Lambda 的代碼顯示在 .yml 文件中-
# iamRoleStatements:
# -Effect: "Allow"
# Action:
# -"s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# -Effect: "Allow"
# Action:
# -"s3:PutObject"
# Resource:
# Fn::Join:
# -""
# --"arn:aws:s3:::"
# -"Ref" : "ServerlessDeploymentBucket"
# -"/*"
請注意,我們需要在上一節(jié)中提供角色的詳細(xì)信息,即其他 AWS 服務(wù)所需的權(quán)限。
handler.js 中導(dǎo)出函數(shù)的名字是hello。所以處理程序是文件名后跟導(dǎo)出名。
functions:
hello:
handler: handler.hello
此處添加的有關(guān) s3 服務(wù)的資源詳細(xì)信息如下所示-
# you can add CloudFormation resource templates here #resources: # resources: # NewResource: # Type: AWS::S3::Bucket # Properties: # BucketName: my-new-bucket # Outputs: # NewOutput: # Description: "Description for the output" # Value: "Some output value"
讓我們將上述 lambda 函數(shù)部署到 AWS 控制臺。為此,您可以使用以下步驟-
首先,您必須使用以下命令-
sls deploy

現(xiàn)在,您應(yīng)該會在 AWS 控制臺中看到該函數(shù),如圖所示。無服務(wù)器 AWS 的詳細(xì)信息記錄在 AWS 云形成中。為此,請轉(zhuǎn)到 AWS 服務(wù)并選擇 CloudFormation。 AWS Lambda 的詳細(xì)信息顯示如下-

注意給定的名稱是項(xiàng)目名稱后跟使用的階段。

它為 AWS Lambda 創(chuàng)建 iam 角色并為 AWS cloudwatch 創(chuàng)建日志組。已創(chuàng)建 S3 存儲桶,其中存儲了代碼詳細(xì)信息和配置詳細(xì)信息。
這是由命令 sls deploy 創(chuàng)建的。您無需指定 iam 角色,而是在 deploy 階段默認(rèn)創(chuàng)建。

事件的詳細(xì)流程顯示在云形成服務(wù)中。


AWS Lambda 代碼及其執(zhí)行設(shè)置顯示在下面給出的屏幕截圖中-

當(dāng)您測試 Lambda 函數(shù)時(shí),您可以找到以下輸出-


此處顯示了上述函數(shù)的日志輸出-

我們還可以使用無服務(wù)器命令測試 AWS Lambda 函數(shù),如下所示-
sls invoke--function hello

此處顯示了調(diào)用命令的語法-
sls invoke--function hello
此調(diào)用命令觸發(fā) AWS Lambda 函數(shù)并在命令提示符中顯示輸出,如下所示-

您還可以在部署之前測試 Lambda 函數(shù),并使用以下命令測試相同的命令-
sls invoke local--function hello
請注意,由于無法在本地環(huán)境中模擬 S3 和 DynanoDB 等資源,因此并不總是可以在本地進(jìn)行測試。本地只能測試基本的函數(shù)調(diào)用。

讓我們看看如何創(chuàng)建新項(xiàng)目以使用 Lambda 和 api 網(wǎng)關(guān)。為此,您可以使用以下命令-
sls create--template aws-nodejs

現(xiàn)在,在可視化代碼中打開 aws-api 項(xiàng)目。您可以看到創(chuàng)建了 handler.js 和 serverless.yml 文件。讓我們在添加api網(wǎng)關(guān)時(shí)進(jìn)行更改。

您必須在 serverless.yml 中進(jìn)行以下更改-

現(xiàn)在,為使用 AWS Lambda 激活 api 網(wǎng)關(guān)添加了事件詳細(xì)信息-

這里添加了一個(gè)名為 事件的新內(nèi)容。我們已將事件指定為 http,以及h 其路徑和方法。
路徑是創(chuàng)建api網(wǎng)關(guān)路徑時(shí)我們將使用的端點(diǎn),使用的方法是GET。
觀察handler是 handler.hello,hello是handler.js的導(dǎo)出名。

請注意,您不必在此處部署 api 網(wǎng)關(guān),因?yàn)闊o服務(wù)器框架會執(zhí)行它。
現(xiàn)在,我們將運(yùn)行 sls deploy 命令來創(chuàng)建 AWS Lambda 函數(shù),觸發(fā)器為 api 網(wǎng)關(guān)。
sls deploy

觀察上面列出的部署詳細(xì)信息。它給出了 Get url,并以端點(diǎn)作為路徑詳細(xì)信息。階段是 prod,因此在 url 中使用相同。該函數(shù)的名稱是 aws-api-prod-hello。
讓我們點(diǎn)擊 url 并查看輸出。您可以看到以下我們從 api-gateway get url 得到的響應(yīng)-

{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
"X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
"queryStringParameters":null,"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
-a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
"isBase64Encoded":false}}
當(dāng)您點(diǎn)擊 url 時(shí),輸出中也會提供事件詳細(xì)信息。 httpMethod 為 GET,queryStringParameters 為空,因?yàn)椴樵冏址袥]有傳遞任何內(nèi)容。事件詳細(xì)信息提供給我們在 AWS Lambda 處理程序中指定的 input-

我們從 api gateway 得到的輸出只是 body 詳細(xì)信息,例如 message 和 input。響應(yīng)完全由api網(wǎng)關(guān)控制以及如何將其顯示為輸出。
現(xiàn)在,讓我們將輸入傳遞給查詢字符串中的 GET url 并查看顯示-

然后您可以看到查詢字符串的輸出如下所示-
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
讓我們更改 AWS Lambda 函數(shù)以僅顯示查詢字符串詳細(xì)信息,如下所示-
"use strict";
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : "Go Serverless v1.0! Your function executed successfully!"
}),
};
callback(null, response);
// Use this code if you don"t use the http event with the LAMBDA-PROXY integration
// callback(null, { message: "Go Serverless v1.0! Your function executed successfully!", event });
};
觀察我們已經(jīng)根據(jù)查詢字符串 顯示消息更改了消息。這將再次部署該函數(shù)并檢查輸出。它顯示查詢字符串變量顯示消息中存在的詳細(xì)信息,如下所示。

現(xiàn)在讓我們將 post 方法添加到創(chuàng)建的事件中,如下所示-

現(xiàn)在,部署所做的更改,您可以從部署命令中看到以下輸出-

請注意,直接在瀏覽器中測試帖子網(wǎng)址不會提供詳細(xì)信息。您應(yīng)該在 postman 中測試帖子 url。
要獲得郵遞員,請轉(zhuǎn)到 https://www.getpostman.com/apps.根據(jù)您的操作系統(tǒng)下載應(yīng)用程序。安裝后,您應(yīng)該能夠測試您的帖子網(wǎng)址,如下所示-

這將顯示我們在 Lambda 函數(shù)中添加的消息。
作為AWS頂級代理商,選擇天.下.數(shù).據(jù)的優(yōu)勢
1、專屬客服協(xié)助注冊AWS,或提供注冊好的賬號直接使用
2、支持收U等多幣種支付代付,無額外服務(wù)費(fèi)用
3、AWS多種產(chǎn)品類型,更高產(chǎn)品租賃權(quán)限
4、針對大客戶,AWS專屬折扣優(yōu)惠
5、7x24小時(shí)專屬客服,在線解答各種疑問
詳詢電話40 0-63 8-88 08 官網(wǎng):http://m.51huadong.com/2023/aws.asp
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國服務(wù)器 韓國服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國云主機(jī) 韓國云主機(jī) 新加坡云主機(jī) 臺灣云主機(jī) 日本云主機(jī) 德國云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營)聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品