В вашем шаблоне CloudFormation можно дождаться получения сигнала, прежде чем завершить.Если этот сигнал не будет получен в течение времени ожидания, он откатит шаблон, и ваше развертывание не будет выполнено.Есть несколько способов сделать это.Вот некоторые варианты документации.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-signal.html https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html
Я бы предпочел первый вариант, просто добавьте CreationPolicy
к экземпляру EC2 и затем укажите его в UserData
.Например:
Resources:
AppEC2Instance:
Type: "AWS::EC2::Instance"
CreationPolicy:
ResourceSignal:
Timeout: "PT5M"
Properties:
UserData:
Fn::Base64:
Fn::Join:
- ""
- - "#!/bin/bash -x\n"
- "aws s3 sync s3://mybucket-id/ ./\n"
- "java -jar ./app.jar\n"
- "/opt/aws/bin/cfn-signal -e $? --stack ",
- !Ref AWS::StackName
- " --resource AppEC2Instance --region "
- !Ref AWS::Region
- "\n"
Использование -e $?
должно предоставить код выхода обратно в стек, и, я надеюсь, затем вернет его обратно в конвейер.