如何使用无服务器绿草插件删除堆栈?

2024-09-28 13:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用kepware收集数据并将其发送到AWS greengrass物联网核心。我使用无服务器和插件serverless-plugin-greengrass部署我的项目。这里是我的无服务器文件的一部分:

[...]
functions:
  opcuaPubSub:
    description: Lambda function for get data from kepware.
    handler: src.opcua_pub_sub.handler
    greengrass:
      subscriptions: 
        - target: cloud
          subject: topic/opcua

custom:
  output:
    file: stack.json
  pythonRequirements:
    usePipenv: true
  greengrass:
    autoDeploy: true
    groupId: ${env:GROUP_ID}
    defaults:
      pinned: true 
      memorySize: 262144
      encodingType: json 

plugins:
  - serverless-python-requirements
  - serverless-stack-output
  - serverless-pseudo-parameters
  - serverless-plugin-greengrass

但是我不能用无服务器删除堆栈。当我运行:serverless remove --stage xxx时,我有以下错误:

Greengrass: Execute reset for group id xxxxx-xxxx-xxxx-xxxx...

  Serverless Error ---------------------------------------

  That deployment type is not valid.  Please specify one of the following types: {NewDeployment,Redeployment}.

我不明白,因为“serverless”需要新的部署或重新部署,但我想删除堆栈。在运行“serverless remove…”之前,我尝试使用命令aws greengrass reset-deployments --group-id $GROUP_ID重置greengrass组的部署,但得到了相同的错误。如果我在cloudformation控制台中手动删除堆栈,我的工作组greengrass将被删除。 (当我想更改gitlab ci中的分支时,我运行serverless remove--stage xxx)。 有人知道为什么我不能用serverless删除这个堆栈吗


Tags: 服务器trueforoutputstack堆栈部署plugin
1条回答
网友
1楼 · 发布于 2024-09-28 13:17:49

让我们把你的问题分成三部分

  1. 部署Lambdas
  2. 将lambda关联到一个或多个Greengrass组
  3. 将更新的Greengrass组部署到其目标设备

在过去的6-9个月里,我有一个类似的设置。我没有单独使用serverless来实现所有这些

相反,我用

  • #1的{}

  • #2

  • #3的{}

我更喜欢这种方法,因为它允许我在单回购中保持“静态不变”资源和“动态变化”资源相邻,同时小心处理它们。例如,您只创建了一次Greengrass组,但最终会在以后的某个时间点(多次)添加/删除对各种主题的订阅

TL;DR

#1serverless将其限制为使用源代码包和依赖注入等部署/重新部署lambda

#2serverless & cloudformation是我定义AWS::Greengrass::FunctionDefinitionAWS::Greengrass::SubscriptionDefinition资源的地方,当我想要创建一个新的Greengrass组定义时,我会获取这些资源

#3ci/cd pipelines with aws cli就是我称之为“Flash绿草设备”(包括两个步骤,见下文)。他们几乎每次都工作

# Retrieve Service Role Arn & grant exclusive permissions to Greengrass to use this role.
echo "Associating Greengrass Service Role to AWS Account.."
export GGG_ROLE_NAME=`aws2 cloudformation list-stack-resources  stack-name XXX | jq ".StackResourceSummaries[].PhysicalResourceId"  raw-output | grep YYY`
export GGG_ROLE_ARN=`aws2 iam get-role  role-name $GGG_ROLE_NAME | jq ".Role.Arn"  raw-output`
aws2 greengrass associate-service-role-to-account  role-arn $GGG_ROLE_ARN  region $AWS_DEFAULT_REGION

# Get Group ID, Group Version & Flash it!
export GGG_ID=`aws2 greengrass list-groups  query  "Groups[?Name=='XXX']" | jq ".[0].Id"  raw-output`
export GGG_VERSION_ID=`aws2 greengrass list-groups  query  "Groups[?Name=='XXX']" | jq ".[0].LatestVersion"  raw-output`
export GGG_DEPL_ID=`aws2 greengrass create-deployment  group-id $GGG_ID  group-version-id $GGG_VERSION_ID  deployment-type NewDeployment | jq ".DeploymentId"   raw-output`
export GGG_DEPL_STATUS=`aws2 greengrass get-deployment-status  deployment-id $GGG_DEPL_ID  group-id GGG_ID | jq ".DeploymentStatus"  raw-output`

干杯

相关问题 更多 >

    热门问题