Beanstalk 上示例 PHP 应用程序的 AWS CloudFormation 模板失败

Posted

技术标签:

【中文标题】Beanstalk 上示例 PHP 应用程序的 AWS CloudFormation 模板失败【英文标题】:AWS CloudFormation template for sample PHP application on Beanstalk is failing 【发布时间】:2020-11-14 19:30:00 【问题描述】:

我正在将一个 php 应用程序部署到 ElasticBeanstalk。首先,我正在部署一个示例 PHP 应用程序。

这是我的模板。

---
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS CloudFormation Sample Template ElasticBeanstalk_PHP_Sample: Configure
  and launch the AWS Elastic Beanstalk PHP sample application. **WARNING** This template
  creates one or more Amazon EC2 instances. You will be billed for the AWS resources
  used if you create a stack from this template.'
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the AWS Elastic
      Beanstalk instance
    Type: String
    MinLength: '1'
    MaxLength: '255'
    AllowedPattern: "[\\x20-\\x7E]*"
    ConstraintDescription: can contain only ASCII characters.
Resources:
  webApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      Description: AWS Elastic Beanstalk PHP Sample Application
      ApplicationVersions:
        - VersionLabel: Initial Version
          Description: Version 1.0
          SourceBundle:
            S3Bucket:
              Fn::Join:
                - "-"
                - - elasticbeanstalk-samples
                  - Ref: AWS::Region
            S3Key: php-sample.zip
      ConfigurationTemplates:
        - TemplateName: DefaultConfiguration
          Description: Default Configuration Version 1.0 - with SSH access
          SolutionStackName: 64bit Amazon Linux 2 v3.0.3 running PHP 7.3
          OptionSettings:
            - Namespace: aws:autoscaling:launchconfiguration
              OptionName: EC2KeyName
              Value:
                Ref: KeyName
  testEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName:
        Ref: webApplication
      Description: AWS Elastic Beanstalk Environment running PHP Sample Application
      TemplateName: DefaultConfiguration
      VersionLabel: Initial Version
Outputs:
  URL:
    Description: URL of the AWS Elastic Beanstalk Environment
    Value:
      Fn::Join:
        - ''
        - - http://
          - Fn::GetAtt:
              - testEnvironment
              - EndpointURL

当我部署在终端中执行命令时,它失败了。这是日志。


    "StackEvents": [
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "cb6d7aa0-cdf6-11ea-b52a-0af573e17780", 
            "ResourceStatus": "ROLLBACK_COMPLETE", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2020-07-24T21:44:04.668Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "PhysicalResourceId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "LogicalResourceId": "CloudFormationLaravelBeanstalk"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "webApplication-DELETE_COMPLETE-2020-07-24T21:44:04.000Z", 
            "ResourceStatus": "DELETE_COMPLETE", 
            "ResourceType": "AWS::ElasticBeanstalk::Application", 
            "Timestamp": "2020-07-24T21:44:04Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"Description\":\"AWS Elastic Beanstalk PHP Sample Application\",\"ApplicationVersions\":[\"Description\":\"Version 1.0\",\"VersionLabel\":\"Initial Version\",\"SourceBundle\":\"S3Bucket\":\"elasticbeanstalk-samples-eu-west-1\",\"S3Key\":\"php-sample.zip\"],\"ConfigurationTemplates\":[\"Description\":\"Default Configuration Version 1.0 - with SSH access\",\"OptionSettings\":[\"Value\":\"MyanEat\",\"Namespace\":\"aws:autoscaling:launchconfiguration\",\"OptionName\":\"EC2KeyName\"],\"TemplateName\":\"DefaultConfiguration\",\"SolutionStackName\":\"64bit Amazon Linux 2 v3.0.3 running PHP 7.3\"]", 
            "PhysicalResourceId": "CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7", 
            "LogicalResourceId": "webApplication"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "webApplication-DELETE_IN_PROGRESS-2020-07-24T21:43:33.166Z", 
            "ResourceStatus": "DELETE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Application", 
            "Timestamp": "2020-07-24T21:43:33.166Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"Description\":\"AWS Elastic Beanstalk PHP Sample Application\",\"ApplicationVersions\":[\"Description\":\"Version 1.0\",\"VersionLabel\":\"Initial Version\",\"SourceBundle\":\"S3Bucket\":\"elasticbeanstalk-samples-eu-west-1\",\"S3Key\":\"php-sample.zip\"],\"ConfigurationTemplates\":[\"Description\":\"Default Configuration Version 1.0 - with SSH access\",\"OptionSettings\":[\"Value\":\"MyanEat\",\"Namespace\":\"aws:autoscaling:launchconfiguration\",\"OptionName\":\"EC2KeyName\"],\"TemplateName\":\"DefaultConfiguration\",\"SolutionStackName\":\"64bit Amazon Linux 2 v3.0.3 running PHP 7.3\"]", 
            "PhysicalResourceId": "CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7", 
            "LogicalResourceId": "webApplication"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "testEnvironment-DELETE_COMPLETE-2020-07-24T21:43:32.486Z", 
            "ResourceStatus": "DELETE_COMPLETE", 
            "ResourceType": "AWS::ElasticBeanstalk::Environment", 
            "Timestamp": "2020-07-24T21:43:32.486Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"ApplicationName\":\"CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7\",\"Description\":\"AWS Elastic Beanstalk Environment running PHP Sample Application\",\"VersionLabel\":\"Initial Version\",\"TemplateName\":\"DefaultConfiguration\"", 
            "PhysicalResourceId": "Clou-test-2HSOCMRY8B2", 
            "LogicalResourceId": "testEnvironment"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "testEnvironment-DELETE_IN_PROGRESS-2020-07-24T21:43:31.824Z", 
            "ResourceStatus": "DELETE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Environment", 
            "Timestamp": "2020-07-24T21:43:31.824Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"ApplicationName\":\"CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7\",\"Description\":\"AWS Elastic Beanstalk Environment running PHP Sample Application\",\"VersionLabel\":\"Initial Version\",\"TemplateName\":\"DefaultConfiguration\"", 
            "PhysicalResourceId": "Clou-test-2HSOCMRY8B2", 
            "LogicalResourceId": "testEnvironment"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "b5e05bd0-cdf6-11ea-80b1-062b1cfafef6", 
            "ResourceStatus": "ROLLBACK_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2020-07-24T21:43:28.511Z", 
            "ResourceStatusReason": "The following resource(s) failed to create: [testEnvironment]. . Rollback requested by user.", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "PhysicalResourceId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "LogicalResourceId": "CloudFormationLaravelBeanstalk"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "testEnvironment-CREATE_FAILED-2020-07-24T21:43:27.905Z", 
            "ResourceStatus": "CREATE_FAILED", 
            "ResourceType": "AWS::ElasticBeanstalk::Environment", 
            "Timestamp": "2020-07-24T21:43:27.905Z", 
            "ResourceStatusReason": "Environment failed to launch as it entered Terminated state", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"ApplicationName\":\"CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7\",\"Description\":\"AWS Elastic Beanstalk Environment running PHP Sample Application\",\"VersionLabel\":\"Initial Version\",\"TemplateName\":\"DefaultConfiguration\"", 
            "PhysicalResourceId": "Clou-test-2HSOCMRY8B2", 
            "LogicalResourceId": "testEnvironment"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "testEnvironment-CREATE_IN_PROGRESS-2020-07-24T21:42:57.297Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Environment", 
            "Timestamp": "2020-07-24T21:42:57.297Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"ApplicationName\":\"CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7\",\"Description\":\"AWS Elastic Beanstalk Environment running PHP Sample Application\",\"VersionLabel\":\"Initial Version\",\"TemplateName\":\"DefaultConfiguration\"", 
            "PhysicalResourceId": "Clou-test-2HSOCMRY8B2", 
            "LogicalResourceId": "testEnvironment"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "testEnvironment-CREATE_IN_PROGRESS-2020-07-24T21:42:55.237Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Environment", 
            "Timestamp": "2020-07-24T21:42:55.237Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"ApplicationName\":\"CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7\",\"Description\":\"AWS Elastic Beanstalk Environment running PHP Sample Application\",\"VersionLabel\":\"Initial Version\",\"TemplateName\":\"DefaultConfiguration\"", 
            "PhysicalResourceId": "", 
            "LogicalResourceId": "testEnvironment"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "webApplication-CREATE_COMPLETE-2020-07-24T21:42:53.537Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::ElasticBeanstalk::Application", 
            "Timestamp": "2020-07-24T21:42:53.537Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"Description\":\"AWS Elastic Beanstalk PHP Sample Application\",\"ApplicationVersions\":[\"Description\":\"Version 1.0\",\"VersionLabel\":\"Initial Version\",\"SourceBundle\":\"S3Bucket\":\"elasticbeanstalk-samples-eu-west-1\",\"S3Key\":\"php-sample.zip\"],\"ConfigurationTemplates\":[\"Description\":\"Default Configuration Version 1.0 - with SSH access\",\"OptionSettings\":[\"Value\":\"MyanEat\",\"Namespace\":\"aws:autoscaling:launchconfiguration\",\"OptionName\":\"EC2KeyName\"],\"TemplateName\":\"DefaultConfiguration\",\"SolutionStackName\":\"64bit Amazon Linux 2 v3.0.3 running PHP 7.3\"]", 
            "PhysicalResourceId": "CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7", 
            "LogicalResourceId": "webApplication"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "webApplication-CREATE_IN_PROGRESS-2020-07-24T21:42:51.643Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Application", 
            "Timestamp": "2020-07-24T21:42:51.643Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"Description\":\"AWS Elastic Beanstalk PHP Sample Application\",\"ApplicationVersions\":[\"Description\":\"Version 1.0\",\"VersionLabel\":\"Initial Version\",\"SourceBundle\":\"S3Bucket\":\"elasticbeanstalk-samples-eu-west-1\",\"S3Key\":\"php-sample.zip\"],\"ConfigurationTemplates\":[\"Description\":\"Default Configuration Version 1.0 - with SSH access\",\"OptionSettings\":[\"Value\":\"MyanEat\",\"Namespace\":\"aws:autoscaling:launchconfiguration\",\"OptionName\":\"EC2KeyName\"],\"TemplateName\":\"DefaultConfiguration\",\"SolutionStackName\":\"64bit Amazon Linux 2 v3.0.3 running PHP 7.3\"]", 
            "PhysicalResourceId": "CloudFormationLaravelBeanstalk-webApplication-197H2GUL24WJ7", 
            "LogicalResourceId": "webApplication"
        , 
        
            "StackId": "arn:aws:cloudformation:eu-west-1:733553390213:stack/CloudFormationLaravelBeanstalk/9a32a280-cdf6-11ea-8a9a-0aa806e28382", 
            "EventId": "webApplication-CREATE_IN_PROGRESS-2020-07-24T21:42:51.125Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::ElasticBeanstalk::Application", 
            "Timestamp": "2020-07-24T21:42:51.125Z", 
            "StackName": "CloudFormationLaravelBeanstalk", 
            "ResourceProperties": "\"Description\":\"AWS Elastic Beanstalk PHP Sample Application\",\"ApplicationVersions\":[\"Description\":\"Version 1.0\",\"VersionLabel\":\"Initial Version\",\"SourceBundle\":\"S3Bucket\":\"elasticbeanstalk-samples-eu-west-1\",\"S3Key\":\"php-sample.zip\"],\"ConfigurationTemplates\":[\"Description\":\"Default Configuration Version 1.0 - with SSH access\",\"OptionSettings\":[\"Value\":\"MyanEat\",\"Namespace\":\"aws:autoscaling:launchconfiguration\",\"OptionName\":\"EC2KeyName\"],\"TemplateName\":\"DefaultConfiguration\",\"SolutionStackName\":\"64bit Amazon Linux 2 v3.0.3 running PHP 7.3\"]", 
            "PhysicalResourceId": "", 
            "LogicalResourceId": "webApplication"
        , 
        

我的代码有什么问题,我该如何解决?

【问题讨论】:

【参考方案1】:

我尝试验证问题并将您的模板部署到我的沙盒帐户。

我发现由于ConfigurationTemplates缺少实例配置文件导致部署失败:

            - Namespace: aws:autoscaling:launchconfiguration
              OptionName: IamInstanceProfile
              Value: !Ref MyInstanceProfile

因此,您必须使用您的 EB 实例将拥有的 IAM 角色创建 AWS::IAM::InstanceProfile。在基本形式中,您可以这样做:

  MyInstanceRole:
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument:                   
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - sts:AssumeRole
      Description: Beanstalk EC2 role
      ManagedPolicyArns: 
        - arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier
        - arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker
        - arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier

  MyInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties: 
      Roles: 
        - !Ref MyInstanceRole

【讨论】:

嗨@Marcin。这只是 ElasticBeanstalk 与 CloudFomration 的另一个问题。如何为 ElasticBeanstalk 显式设置 VPC?我也无法在文档中找到该选项。有可能吗? @WaiYanHein 您不能对现有的 EB 执行此操作。必须创建新的 EB 环境。您在 options 中指定它。 好的。这就是我所追求的。谢谢。 @WaiYanHein 没问题 :-)

以上是关于Beanstalk 上示例 PHP 应用程序的 AWS CloudFormation 模板失败的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon Elastic Beanstalk 或一般实例或服务器上运行的 PHP 应用程序有啥区别?

通过 Jenkins 在所有 AWS Beanstalk 实例上部署新的 PHP 代码并运行 Composer?

具有 laravel 权限的 PHP Beanstalk 在存储/框架/缓存上被拒绝

在 BeanStalk 中运行 PHP 应用程序与手动 EC2 实例

在 Amazon Elastic Beanstalk 上守护 PHP 脚本(SQS 侦听器)

在 Elastic Beanstalk 上部署 Docker 环境