当前位置: 首页 > wzjs >正文

wordpress建站指南方太网站谁做的

wordpress建站指南,方太网站谁做的,发帖平台,中天钢铁 网站建设文章目录 aws(学习笔记第四十二课) serverless-backend学习内容:1. 整体架构1.1 代码链接1.2 整体架构 2 代码分析2.1 创建S3 bucket2.2 创建cognito user pool2.3 创建dynamoDB2.4 创建S3 bucket2.5 创建lambda,并赋予权限2.6 创建API Gateway&#xff…

文章目录

  • aws(学习笔记第四十二课) serverless-backend
  • 学习内容:
    • 1. 整体架构
      • 1.1 代码链接
      • 1.2 整体架构
    • 2 代码分析
      • 2.1 创建`S3 bucket`
      • 2.2 创建`cognito user pool`
      • 2.3 创建`dynamoDB`
      • 2.4 创建`S3 bucket`
      • 2.5 创建`lambda`,并赋予权限
      • 2.6 创建`API Gateway`,并指定为`lambda`函数处理
    • 3. 执行`cdk`
      • 3.1 检查`S3 bucket`和`dynamoDB`
      • 3.2 开始执行`Stack`
        • 3.2.1 修改`lambda`执行环境的代码
        • 3.2.2 开始执行
    • 4 测试程序
      • 4.1 `Create Cognito User`
      • 4.2 获得`API Gateway`的调用`url`
      • 4.3 将图片文件进行`base64`的`encode`
      • 4.4 使用`Postman`进行`post`
        • 4.4.1 设定认证情报`Authorization`
        • 4.4.2 设定`json`
        • 4.4.3 请求保存图片
        • 4.4.4 从`S3 bucket`中取得保存图片
    • 5 注意清除`Stack`

aws(学习笔记第四十二课) serverless-backend

  • 使用Amazon API Gateway以及lamda进行后台处理

学习内容:

  • 使用Amazon API Gateway
  • 使用lambda处理API Gateway请求,接受json参数
  • 使用Amazon S3 - Bucket to store images or files
  • 使用Amazon DynamoDB
  • 使用Amazon Cognito进行用户认证

1. 整体架构

1.1 代码链接

代码连接(serverless-backend)

1.2 整体架构

在这里插入图片描述

2 代码分析

2.1 创建S3 bucket

bucket_name = _cfnParameter(self, "uploadBucketName", type="String",description="The name of the Amazon S3 bucket where uploaded images will be stored.")
my_bucket = _s3.Bucket(self, id='s3bucket',bucket_name=bucket_name.value_as_string)
my_bucket.grant_read_write(my_lambda)

这里,S3 bucket的名字是通过cdk deploy时候,指定的参数uploadBucketName

cdk --require-approval never deploy ServerlessBackendStack --parameters uploadBucketName=finlay-20250524-upload

在这里插入图片描述

2.2 创建cognito user pool

        user_pool = _cognito.UserPool(self, "UserPool")user_pool.add_client("app-client", auth_flows=_cognito.AuthFlow(user_password=True),supported_identity_providers=[_cognito.UserPoolClientIdentityProvider.COGNITO])auth = _apigateway.CognitoUserPoolsAuthorizer(self, "imagesAuthorizer",cognito_user_pools=[user_pool])

这里,创建cognito认证方式,创建user pool。并且创建apigateway.CognitoUserPoolsAuthorizer
在这里插入图片描述

2.3 创建dynamoDB

my_table = _dynamodb.Table(self, id='dynamoTable', table_name='formmetadata', partition_key=_dynamodb.Attribute(name='userid', type=_dynamodb.AttributeType.STRING)) #change primary key here

创建dynamoDB,用来存储image文件的metadata

在这里插入图片描述

2.4 创建S3 bucket

my_bucket = _s3.Bucket(self, id='s3bucket',bucket_name=bucket_name.value_as_string)

在这里插入图片描述
使用S3 bucket来进行保存图片,这里S3 bucket的名字是通过cdk deploy执行时候,指定的参数uploadBucketName

2.5 创建lambda,并赋予权限

my_lambda = _lambda.Function(self, id='lambdafunction', function_name="formlambda", runtime=_lambda.Runtime.PYTHON_3_9,handler='index.handler',code=_lambda.Code.from_asset(os.path.join("./", "lambda-handler")),environment={'bucket': my_bucket.bucket_name,'table': my_table.table_name})
my_bucket.grant_read_write(my_lambda)
my_table.grant_read_write_data(my_lambda)

这里的lambda函数用来接收API Gateway来的请求处理,并且dynamoDBtableS3 bucket都对lambda函数打开了read/write权限。

  • 保存image文件的meta data
  • 保存image文件到S3 bucket

下面是lambda的处理代码。

def upload_metadata(key, userid):table = os.environ['table']bucket = os.environ['bucket']reference = {'Bucket': {'S': bucket}, 'Key': {'S': key}}response = dynamodb.put_item(TableName=table,Item={"userid": {'S': userid}, "photo_reference": {'M': reference}})print(response)def upload_image(image_id, img, userid):bucket = os.environ['bucket']extension = imghdr.what(None, h=img)key = f"{image_id}.{extension}"try:s3.put_object(Bucket=bucket, Key=key, Body=img)upload_metadata(key, userid)except botocore.exceptions.ClientError as e:print(e)return Falsereturn Truedef handler(event, context):print(event)# Generate random image idimage_id = str(uuid.uuid4())data = json.loads(event['body'])userid = data['userid']img = base64.b64decode(data['photo'])if upload_image(image_id, img, userid):return {'statusCode': 200,'headers': {'Access-Control-Allow-Headers': '*','Access-Control-Allow-Origin': '*','Access-Control-Allow-Methods': 'OPTIONS,POST,GET'},'body': json.dumps('Success!')}return {'statusCode': 500,'headers': {'Access-Control-Allow-Headers': '*','Access-Control-Allow-Origin': '*','Access-Control-Allow-Methods': 'OPTIONS,POST,GET'},'body': json.dumps('Request Failed!')}

2.6 创建API Gateway,并指定为lambda函数处理

my_api = _apigateway.LambdaRestApi(self, id='lambdaapi', rest_api_name='formapi', handler=my_lambda, proxy=True)postData = my_api.root.add_resource("form")postData.add_method("POST", authorizer=auth,authorization_type=_apigateway.AuthorizationType.COGNITO)  # POST images/files & metadata

这里,

  • 指定lambda函数作为处理http post请求的handler
  • 指定认证方式为cognitouser pool
    在这里插入图片描述

3. 执行cdk

3.1 检查S3 bucketdynamoDB

如果同样名字的S3 bucketdynamoDB已经存在,那么Stack执行会失败,所以提前检查。

  • dynamoDB在这里插入图片描述
  • S3 bucket
    在这里插入图片描述

3.2 开始执行Stack

3.2.1 修改lambda执行环境的代码
my_lambda = _lambda.Function(self, id='lambdafunction', function_name="formlambda", runtime=_lambda.Runtime.PYTHON_3_9,handler='index.handler',code=_lambda.Code.from_asset(os.path.join("./", "lambda-handler")),environment={'bucket': my_bucket.bucket_name,'table': my_table.table_name})

如果太旧的python执行环境,会导致部署失败,这里指定_lambda.Runtime.PYTHON_3_9

3.2.2 开始执行
cd serverless-backend
python -m venv .venv
source .venv/Script/activate
pip install -r requirement.txt
cdk --require-approval never deploy ServerlessBackendStack --parameters uploadBucketName=finlay-20250524-upload

在这里插入图片描述
到这里,部署成功。

4 测试程序

4.1 Create Cognito User

在这里插入图片描述
之后进入cognitouser配置画面
在这里插入图片描述
创建用户,使用user namepassworduser pool ID

  • 之后使用aws cli,设定用户和密码为permanent。这里,用户名字为finlay,密码自己设定。这里带有XXX都是需要替换的。
    aws cognito-idp admin-set-user-password --user-pool-id ap-northeast-1-XXXXXX --username finlayXXXX --password XXXXXX --permanent
    
  • 之后取得finlay这个user的id token
aws cognito-idp initiate-auth --region ap-northeast-1 --auth-flow USER_PASSWORD_AUTH --client-id XXXXXX --auth-parameters USERNAME=finlay,PASSWORD=XXXXXX

这里的--client-id必须要去cloudformation这里去查找。
在这里插入图片描述
在这里插入图片描述
之后保存IdToken随后使用。

4.2 获得API Gateway的调用url

在这里插入图片描述

4.3 将图片文件进行base64encode

import base64with open(r"d:\test.jpg", "rb") as image_file:base64_string = base64.b64encode(image_file.read()).decode('utf-8')print(base64_string)

注意python文件不能为base64,取其他名字即可。

4.4 使用Postman进行post

4.4.1 设定认证情报Authorization

在这里插入图片描述

  • URL设定
    URL这里设定成前面取得的API Gatewayurl,注意,后缀加上form
    https://XXXXXX.execute-api.ap-northeast-1.amazonaws.com/prod/form
  • Authentication设定
    这里设定成前面取得的idToken
4.4.2 设定json

在这里插入图片描述
设定形式为

 { "userid": "myUserID", "photo": "image details" }
4.4.3 请求保存图片

在这里插入图片描述
方法选择post,之后选择send
最后会显示成功success
在这里插入图片描述

4.4.4 从S3 bucket中取得保存图片

在这里插入图片描述

5 注意清除Stack

  • 清除Stack
  • 清除S3 bucket
  • 清除dynamoDB

文章转载自:

http://0EAJvytc.shwtr.cn
http://H41Z9u9Q.shwtr.cn
http://HvSple8h.shwtr.cn
http://hXw9PPTG.shwtr.cn
http://o2g9OQim.shwtr.cn
http://G5RrCRO1.shwtr.cn
http://1UUiDkzQ.shwtr.cn
http://3q72mqqW.shwtr.cn
http://lo1XqR3f.shwtr.cn
http://xh8L60xL.shwtr.cn
http://XATgsBXm.shwtr.cn
http://8qPIrkGv.shwtr.cn
http://asfNAJJw.shwtr.cn
http://ykZWicbx.shwtr.cn
http://8eKFS5Uy.shwtr.cn
http://S43wFGu8.shwtr.cn
http://GFgjCRh3.shwtr.cn
http://0CtWvcN1.shwtr.cn
http://7eOHEIkA.shwtr.cn
http://H8mbYIto.shwtr.cn
http://PZH81dOs.shwtr.cn
http://qocpP3Bz.shwtr.cn
http://vHO1igTn.shwtr.cn
http://EvLyejJW.shwtr.cn
http://Lk9zesfJ.shwtr.cn
http://2FVgis4L.shwtr.cn
http://dTei92pW.shwtr.cn
http://lcYId3Ic.shwtr.cn
http://YA1j2HvA.shwtr.cn
http://YapznRbk.shwtr.cn
http://www.dtcms.com/wzjs/629116.html

相关文章:

  • 企业网站建设研究目的意义用网站模板给人做网站挣钱吗
  • 宁波外贸网站推广优化wordpress打包成app
  • 欧美网站模板 psd俄罗斯ip
  • 公司付网站会员费科目怎么做教育局网站建设方案
  • 创建免费网站需要的工具中介公司注册条件
  • 个人网站可以做导购吗建设旅游网站的市场分析
  • 制作网站注册登录模块的思维导图免费设计头像
  • 黄冈地区免费网站推广平台网站显示百度众测是怎么做的
  • 洛阳市App网站开发公司9377手游平台
  • 阿凡达做网站电话网站建设的一般要素
  • 沈阳做网站优秀公司丹江口市建设局网站
  • 广州企业建站模板WordPress手动切换主题
  • 龙岗商城网站建设哪家便宜抖音代运营公司有哪些
  • 微软雅黑做网站会涉及到侵权吗外国人做汉字网站
  • 做网站安卓客户端上海市各区建设局网站
  • h5网站开发用什么软件制作无锡市建设银行总行网站
  • 中山商城网站建设修改wordpress站点标题
  • 永久免费网站申请注册基于django的电子商务网站开发
  • 已经有了域名和服务器怎么做网站凡科注册的网站怎么被百度收录
  • 门户网站cms高质量视频素材网站
  • 网站开发实习公众号开发所需技术
  • 凡科免费做网站网站分页导航
  • 东莞易进网络专业网站建设 网站网站所有分类中 点击箭头不出现下拉菜单
  • 企业为什么建站外贸推广方式有哪些
  • 彩票网站怎么做代理景区网络推广方案
  • 设计感十足的网站网站推广的岗位要求
  • 排名好的网站建设企业新手自建网站做跨境电商
  • 广州开发区建设局网站网站怎么做搜索
  • 西安专业做淘宝网站的公司深圳建筑设计找工作哪个招聘网站
  • linux系统怎么做网站南宁伯才网络