#amazon-cloudformation #aws-codepipeline #aws-serverless
Вопрос:
Я развертываю свои AWS-лямбды с помощью модели приложений AWS без сервера (SAM). Одна из моих Лямбд использует Numpy, на которую я ссылаюсь через сторонний слой от Klayers @keithRozario. Я использовал Klayers-python38-numpy:16, но обнаружил, что он устарел после того, как я развернул его сегодня, что оставило мой стек в состоянии UPDATE_ROLLBACK_FAILED.
Одна из рекомендаций-использовать Stack actions -> Continue update rollback
консоль AWS, которую я пробовал, но она не сработала. Другое решение — удалить стек. Тем не менее, это будет мое первое удаление стека, и я хотел бы знать следующее: если я удалю свой стек с помощью консоли, будет ли мой стек воссоздан при его повторном развертывании? Я искал ответы на свой вопрос, но нахожу только ссылки на удаление ресурсов в стеке.
Что я также хотел бы знать, так это то, что мой стек является первым стеком из многих в AWS CodePipeline, будет ли мой конвейер по-прежнему работать, если я удалю свой стек? Кроме того, буду ли я испытывать больше неудачных стеков при переходе к последующим стекам в моем конвейере?
Наконец, план состоит в том, чтобы обновить до Klayers-python38-numpy:19 при повторном развертывании.
РЕДАКТИРОВАТЬ: согласно @marcin
Проблема в том, что Klayers-python38-numpy:16, который уже развернут во всем моем стеке, больше недоступен. Сегодня утром я попытался внести изменения в свой код, но на этом этапе мой конвейер не удался CreateChangeSet
. Я предполагаю, что тот факт, что этот слой больше недоступен, является причиной того, что мой стек не может откатиться.
Мой трубопровод выглядит так:
{
"pipeline": {
"name": "my-pipeline",
"roleArn": "arn:aws:iam::123456789:role/my-pipeline-CodePipelineExecutionRole-4O8PAUJGLXYZ",
"artifactStore": {
"type": "S3",
"location": "my-pipeline-buildartifactsbucket-62byf2xqaa8z"
},
"stages": [
{
"name": "Source",
"actions": [
{
"name": "SourceCodeRepo",
"actionTypeId": {
"category": "Source",
"owner": "ThirdParty",
"provider": "GitHub",
"version": "1"
},
"runOrder": 1,
"configuration": {
"Branch": "master",
"OAuthToken": "****",
"Owner": "hugo",
"Repo": "my-pipeline"
},
"outputArtifacts": [
{
"name": "SourceCodeAsZip"
}
],
"inputArtifacts": []
}
]
},
{
"name": "Build",
"actions": [
{
"name": "CodeBuild",
"actionTypeId": {
"category": "Build",
"owner": "AWS",
"provider": "CodeBuild",
"version": "1"
},
"runOrder": 1,
"configuration": {
"ProjectName": "my-pipeline"
},
"outputArtifacts": [
{
"name": "BuildArtifactAsZip"
}
],
"inputArtifacts": [
{
"name": "SourceCodeAsZip"
}
]
}
]
},
{
"name": "CI",
"actions": [
{
"name": "CreateChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 1,
"configuration": {
"ActionMode": "CHANGE_SET_REPLACE",
"Capabilities": "CAPABILITY_IAM",
"ChangeSetName": "my-pipeline-ChangeSet-ci",
"ParameterOverrides": "{n "MyEnvironment" : "ci"n}n",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-ci",
"TemplatePath": "BuildArtifactAsZip::packaged.yaml"
},
"outputArtifacts": [],
"inputArtifacts": [
{
"name": "BuildArtifactAsZip"
}
]
},
{
"name": "ExecuteChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 2,
"configuration": {
"ActionMode": "CHANGE_SET_EXECUTE",
"ChangeSetName": "my-pipeline-ChangeSet-ci",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-ci"
},
"outputArtifacts": [
{
"name": "my-pipelineCIChangeSet"
}
],
"inputArtifacts": []
}
]
},
{
"name": "Staging",
"actions": [
{
"name": "CreateChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 1,
"configuration": {
"ActionMode": "CHANGE_SET_REPLACE",
"Capabilities": "CAPABILITY_IAM",
"ChangeSetName": "my-pipeline-ChangeSet-staging",
"ParameterOverrides": "{n "MyEnvironment" : "staging"n}n",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-staging",
"TemplatePath": "BuildArtifactAsZip::packaged.yaml"
},
"outputArtifacts": [],
"inputArtifacts": [
{
"name": "BuildArtifactAsZip"
}
]
},
{
"name": "ExecuteChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 2,
"configuration": {
"ActionMode": "CHANGE_SET_EXECUTE",
"ChangeSetName": "my-pipeline-ChangeSet-staging",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-staging"
},
"outputArtifacts": [
{
"name": "my-pipelineStagingChangeSet"
}
],
"inputArtifacts": []
}
]
},
{
"name": "Prod",
"actions": [
{
"name": "DeploymentApproval",
"actionTypeId": {
"category": "Approval",
"owner": "AWS",
"provider": "Manual",
"version": "1"
},
"runOrder": 1,
"configuration": {},
"outputArtifacts": [],
"inputArtifacts": []
},
{
"name": "CreateChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 2,
"configuration": {
"ActionMode": "CHANGE_SET_REPLACE",
"Capabilities": "CAPABILITY_IAM",
"ChangeSetName": "my-pipeline-ChangeSet-prod",
"ParameterOverrides": "{n "MyEnvironment" : "prod"n}n",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-prod",
"TemplatePath": "BuildArtifactAsZip::packaged.yaml"
},
"outputArtifacts": [],
"inputArtifacts": [
{
"name": "BuildArtifactAsZip"
}
]
},
{
"name": "ExecuteChangeSet",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 3,
"configuration": {
"ActionMode": "CHANGE_SET_EXECUTE",
"ChangeSetName": "my-pipeline-ChangeSet-prod",
"RoleArn": "arn:aws:iam::123456789:role/my-pipeline-CloudFormationExecutionRole-1O8GOB5C2VXYZ",
"StackName": "my-pipeline-prod"
},
"outputArtifacts": [
{
"name": "my-pipelineProdChangeSet"
}
],
"inputArtifacts": []
}
]
}
],
"version": 1
}
}
Ответ №1:
если я удалю свой стек через консоль, будет ли мой стек воссоздан при его повторном развертывании?
ДА. Вы можете попытаться развернуть тот же стек снова, но, вероятно, вам следует в первую очередь выяснить, почему он не удался.
Что я также хотел бы знать, так это то, что мой стек является первым стеком из многих в AWS CodePipeline, будет ли мой конвейер по-прежнему работать, если я удалю свой стек?
Не знаю, но, скорее всего, нет. Его использование зависит от конкретного случая, и вы не предоставили никакой информации о CP.
Кроме того, буду ли я испытывать больше неудачных стеков при переходе к последующим стекам в моем конвейере?
Если одно действие завершится неудачно, вы не сможете приступить к дальнейшим действиям. Даже если бы вы могли, другие стеки могут зависеть от первого, и они также потерпят неудачу.
Комментарии:
1. Я обновил свой ответ заявлением о проблеме и своим кодом конвейера. Мой конвейер потерпел неудачу на этапе CI, на этапе CreateChangeSet. Я предполагаю, что это в файле UPDATE_ROLLBACK_FAILED, потому что шаг CreateChangeSet ссылается на слой, который больше не существует. Все стеки идентичны, их три для наших CI, промежуточных и вспомогательных сред. С учетом сказанного, каков мой лучший подход? Удалить стек? Удалить весь конвейер целиком? Спасибо за вашу помощь.
2. В итоге я щелкнул,
Stack actions -> Continue update rollback
но на этот раз я открыл раздел «дополнительно» и пропустил все ресурсы. Как только я это сделал, я перешел с обновлением на numpy:19, и все работало нормально.3. @хьюго, нет проблем. если бы ответ был полезным, мы были бы признательны за его принятие.