Как мне развернуть свои автоматы aws с помощью облачной информации?
Я использую облачную информацию для обновления своего стека aws. У меня есть несколько государственных машин. Я также обновляю их с помощью облачной информации, получаю их ARN и снова помещаю их в качестве переменных среды в функцию лямбды в моем стеке формирования облаков.
Однако вопрос заключается в следующем: когда я изменяю свои пошаговые функции и обновляю свой стек, облачная информация будет удалять старые конечные автоматы и создавать новые со случайными именами. Я могу получить ARN и использовать их в своей лямбде, это не проблема, но мои старые конечные автоматы будут удалены. Это означает, что любые текущие выполнения будут остановлены следующим переходом состояния. Я мог бы долго выполнять конечные автоматы. Похоже, я не могу сделать это в среде Prod.
Какие-либо предложения?
РЕДАКТИРОВАТЬ:
Я использую пошаговые функции AWS для своих конечных автоматов. Этот вопрос касается функций шага AWS и облачной информации. Как обновить пошаговые функции с запущенными выполнениями с облачной информацией.
3 ответа
Я думаю, я узнал, как это работает.
Документация для DeleteStateMachine гласит:
Удаляет конечный автомат. Это асинхронная операция - она устанавливает состояние конечного автомата на "УДАЛЕНИЕ" и начинает процесс удаления. Каждое выполнение конечного автомата будет удалено при следующем переходе между состояниями. После того как все выполнения завершены или удалены, сам конечный автомат будет удален.
Это заставило меня подумать, что при обновлении конечного автомата с помощью облачной информации он собирался удалить работающий конечный автомат сразу после следующего перехода состояния для каждого выполнения. Я думаю, это не тот случай. Потому что я пытался заменить долго работающий конечный автомат, и теперь он говорит:
Удаление. Операция удаления не будет завершена, пока выполняются любые выполнения. Подумайте об остановке любых длительных выполнений через консоль, API или командную строку.
Этот вид противоречит тому, что в документации говорится об удалении конечного автомата. Однако я предполагаю, что Cloudformation не использует ту же операцию удаления, как указано в документации.
Было бы хорошо получить разъяснение от эксперта AWS по этому вопросу.
Мои недавние уроки с CloudFormation + Step Functions заключаются в том, чтобы всегда сначала создавать конечный автомат с помощью boto3 или любого другого SDK, потому что CloudFormation не сообщит вам, если у вас отсутствуют какие-либо разрешения. вызовы boto3 немедленно завершатся ошибкой с довольно четким сообщением об ошибке. В то время как CloudFormation (CFN) просто будет пытаться повторить попытку в течение почти часа, а затем даже не сможет выполнить откат должным образом. Я думаю, что реализация CFN обновления State Machine также плоха. Я предлагаю всегда удалять машину, а затем создавать новую с новым именем. Это довольно типично для ресурсов CFN, которые не обновляются.Это действительно работает в практических сценариях, потому что удаления являются асинхронными, и я подозреваю, что реализация CFN не учитывает это, и когда ресурс необходимо заменить, он просто пытается сразу создать новый с тем же именем и, очевидно, терпит неудачу. Нет открытого списка ошибок CFN, так что все это домыслы. Ранее на этой неделе я был на саммите AWS, поговорил с архитектором AWS (сотрудником AWS), и он просто покраснел.
Это роль IAM, для которой создание конечного автомата не завершилось неудачей:
StateMachineRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- !Sub "states.${AWS::Region}.amazonaws.com"
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaRole
- arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess
Policies:
- PolicyName: StateMachineAccessPolicy
PolicyDocument:
Statement:
- Effect: Allow
Action:
- events:*
Resource: "*"
Этот вопрос и принятый ответ были написаны до того , как был выпущен API UpdateStateMachine , который позволяет обновлять существующие конечные автоматы.
Вы можете редактировать свойства
AWS::StepFunctions::StateMachine
кроме
StateMachineName
а также
StateMachineType
, и CloudFormation будет обновлять существующий ресурс без перерыва (удаляя конечный автомат и создавая его заново).