如何使用无服务器 greengrass 插件删除堆栈?
How can I remove a stack with serverless greengrass plugin?
我正在使用 kepware 收集数据并将其发送到 AWS greengrass IoT Core。我使用无服务器和插件 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' 期待 NewDeployment 或 Redeployment,但我想要的是删除堆栈。我尝试使用命令 aws greengrass reset-deployments --group-id $GROUP_ID
在 运行: 'serverless remove...' 之前重置 greengrass 组的部署,但我得到了同样的错误。如果我在 cloudformation 控制台中手动删除堆栈,我的组 greengrass 将被删除。
(我 运行 serverless remove --stage xxx when I want to change branch in gitlab-ci)。
有人知道为什么我不能用无服务器删除这个堆栈吗?
让我们把你的问题分成三个部分。
- 部署 Lambdas
- 将 Lambda 关联到一个或多个 Greengrass 组
- 将更新后的 Greengrass 组部署到其目标设备
在过去的 6-9 个月里,我有一个类似的设置 运行。我没有单独使用 serverless
来实现所有这些。
相反,我使用了
serverless
#1
serverless & cloudformation
#2
ci/cd pipelines with aws cli
#3
我更喜欢这种方法,因为它允许我在单一存储库中维护 'static unchanging' 资源和 'dynamically changing' 资源,但要小心处理它们。例如。您创建了一次 Greengrass 组,但您最终会在稍后的时间点(多次)adding/removing 订阅各种主题。
TL;博士
#1 serverless
将其限制为使用源代码包和依赖注入等部署/重新部署 Lambdas
#2 serverless & cloudformation
是我定义 AWS::Greengrass::FunctionDefinition
和 AWS::Greengrass::SubscriptionDefinition
资源的地方,并在我想创建新的 Greengrass 组定义时获取这些资源。
#3 ci/cd pipelines with aws cli
是我称之为 'Flash Greengrass Device' 的地方(涉及 2 个步骤,见下文)。他们几乎每次都有效。
# 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`
干杯!
我正在使用 kepware 收集数据并将其发送到 AWS greengrass IoT Core。我使用无服务器和插件 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' 期待 NewDeployment 或 Redeployment,但我想要的是删除堆栈。我尝试使用命令 aws greengrass reset-deployments --group-id $GROUP_ID
在 运行: 'serverless remove...' 之前重置 greengrass 组的部署,但我得到了同样的错误。如果我在 cloudformation 控制台中手动删除堆栈,我的组 greengrass 将被删除。
(我 运行 serverless remove --stage xxx when I want to change branch in gitlab-ci)。
有人知道为什么我不能用无服务器删除这个堆栈吗?
让我们把你的问题分成三个部分。
- 部署 Lambdas
- 将 Lambda 关联到一个或多个 Greengrass 组
- 将更新后的 Greengrass 组部署到其目标设备
在过去的 6-9 个月里,我有一个类似的设置 运行。我没有单独使用 serverless
来实现所有这些。
相反,我使用了
serverless
#1serverless & cloudformation
#2ci/cd pipelines with aws cli
#3
我更喜欢这种方法,因为它允许我在单一存储库中维护 'static unchanging' 资源和 'dynamically changing' 资源,但要小心处理它们。例如。您创建了一次 Greengrass 组,但您最终会在稍后的时间点(多次)adding/removing 订阅各种主题。
TL;博士
#1 serverless
将其限制为使用源代码包和依赖注入等部署/重新部署 Lambdas
#2 serverless & cloudformation
是我定义 AWS::Greengrass::FunctionDefinition
和 AWS::Greengrass::SubscriptionDefinition
资源的地方,并在我想创建新的 Greengrass 组定义时获取这些资源。
#3 ci/cd pipelines with aws cli
是我称之为 'Flash Greengrass Device' 的地方(涉及 2 个步骤,见下文)。他们几乎每次都有效。
# 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`
干杯!