Давайте разделим вашу проблему на три части.
- Разверните лямбды
- Свяжите лямбды с одной или несколькими группами Greengrass
- Разверните обновленную группу Greengrass на своей цели устройства
У меня аналогичная установка работает последние 6-9 месяцев. Я не использовал один serverless
для достижения всего этого.
Скорее, я использовал
Я предпочитаю этот подход, потому что он позволял мне поддерживать 'stati c неизменные' ресурсы и 'динамически меняя ресурсы рядом друг с другом в монорепо, но обращайтесь с ними осторожно. Например, вы создаете группу Greengrass один раз, но в конечном итоге вы добавите / удалите подписки на различные темы в более поздний момент времени (несколько раз).
TL; DR
# 1 serverless
Ограничьте его развертыванием / повторным развертыванием Lambdas с пакетами исходного кода и внедрением зависимостей et c.
# 2 serverless & cloudformation
- это где я определите ресурсы AWS::Greengrass::FunctionDefinition
и AWS::Greengrass::SubscriptionDefinition
и захватите эти ресурсы, когда я хочу создать новое определение группы Greengrass.
# 3 ci/cd pipelines with aws cli
- это то место, где я называю это 'Fla sh Устройство Greengrass »(включает 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`
Ура!