在 AWS CloudFormation 中创建堆栈时如何解决“资源不稳定”问题?

Lee*_*e D 2 amazon-web-services aws-cloudformation amazon-elastic-beanstalk

我在尝试使用 CloudFormation 模板创建堆栈时收到以下错误:

资源处理程序返回消息:“类型为‘AWS::ElasticBeanstalk::Environment’且标识符为‘[AppName]-Env-lee-test’的资源不稳定。” (RequestToken:[请求 GUID],HandlerErrorCode:NotStabilized)

该项目是一个 ASP.NET Core 网站,模板包含以下资源:

  • Elastic Beanstalk 应用程序。
  • 使用 S3 中的源包的应用程序版本。
  • Elastic Beanstalk 环境。

云形成模板:

AWSTemplateFormatVersion: "2010-09-09"

Parameters:  
  BuildNumber:
  Description: The build number which specified the build of software we want to deploy. This should exist as a folder in the artifacts bucket.
  Type: String

Resources:
  DashboardApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: !Join [ "-", [ "AppName", !Ref AWS::StackName ] ]
      Description: App Name Web Dashboard

  DashboardAppVersion:
    Type: AWS::ElasticBeanstalk::ApplicationVersion
    Properties:
      ApplicationName: !Ref DashboardApplication
      Description: !Join [ " ", [ "App Name Web Dashboard ", !Ref BuildNumber ] ]
      SourceBundle:
        S3Bucket: artifacts
        S3Key: !Join [ "/", [ !Ref BuildNumber, Dashboard.zip ] ]

  DashboardEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName: !Ref DashboardApplication
      EnvironmentName: !Join [ "-", [ "AppName-Env", !Ref AWS::StackName ] ]
      SolutionStackName: 64bit Amazon Linux 2 v2.5.0 running .NET Core
      Tags:
        - Key: Name
          Value: !Join [ "-", [ "AppName-Env", !Ref AWS::StackName ] ]
      Tier: 
        Name: WebServer
        Type: Standard
      VersionLabel: !Ref DashboardAppVersion
Run Code Online (Sandbox Code Playgroud)

我发现此故障排除链接建议将堆栈创建作为服务角色运行。我正在这样做,但错误仍然存​​在。唯一的其他建议是联系 AWS Support,我们的价格计划不提供技术支持。

我通过 AWS 控制台使用相同的源包创建了一个 Elastic Beanstalk 应用程序和环境,并且成功了。

我不知道到哪里去获取有关这里出了什么问题的更多信息。我的模板中是否犯了错误或遗漏了某些内容?

Lee*_*e D 5

此错误的原因是环境资源上缺少“IamInstanceProfile”选项设置。这个 YAML 解决了这个问题:

OptionSettings:
- Namespace: aws:autoscaling:launchconfiguration
  OptionName: IamInstanceProfile
  Value: aws-elasticbeanstalk-ec2-role
Run Code Online (Sandbox Code Playgroud)

尽管堆栈创建页面上显示的错误不包含有用信息,但如果您在控制台中打开失败的环境(应该处于终止状态),您可以通过查看事件来获取更详细的错误。