6

create-environment veya aws elasticbeanstalk'un başka bir alt komutuyla bir RDS örneği nasıl oluşturabilirim? Pek çok parametre kombinasyonunu boşuna kullanıyorum. Aşağıda bir örnek. Bu başarısız nedenAWS CLI elastikbeanstalk oluşturma ortamı ile RDS oluştur

[ 
{ 
    "OptionName": "EC2KeyName", 
    "Namespace": "aws:autoscaling:launchconfiguration", 
    "Value": "a-key-is-here" 
}, 
{ 
    "OptionName": "EnvironmentType", 
    "Namespace": "aws:elasticbeanstalk:environment", 
    "Value": "SingleInstance" 
}, 
{ 
    "OptionName": "SECRET_KEY_BASE", 
    "Namespace": "aws:elasticbeanstalk:application:environment", 
    "Value": "HAHAHAHAHAHA" 
}, 
{ 
    "OptionName": "DBPassword", 
    "Namespace": "aws:rds:dbinstance", 
    "Value": "hunter2" 
}, 
{ 
    "OptionName": "DBUser", 
    "Namespace": "aws:rds:dbinstance", 
    "Value": "random" 
}, 
{ 
    "OptionName": "DBEngineVersion", 
    "Namespace": "aws:rds:dbinstance", 
    "Value": "9.3" 
}, 
{ 
    "OptionName": "DBEngine", 
    "Namespace": "aws:rds:dbinstance", 
    "Value": "postgres" 
} 
] 

bilen var:

APP_NAME="randall-railsapp" 
aws s3api create-bucket --bucket "$APP_NAME" 
APP_VERSION="$(git describe --always)" 
APP_FILE="deploy-$APP_NAME-$APP_VERSION.zip" 
git archive -o "$APP_FILE" HEAD 
aws s3 cp "$APP_FILE" "s3://$APP_NAME/$APP_FILE" 

aws --region us-east-1 elasticbeanstalk create-application-version \ 
--auto-create-application \ 
--application-name "$APP_NAME" \ 
--version-label "$APP_VERSION" \ 
--source-bundle S3Bucket="$APP_NAME",S3Key="$APP_FILE" 

aws --region us-east-1 elasticbeanstalk create-environment \ 
--application-name "$APP_NAME" \ 
--version-label "$APP_VERSION" \ 
--environment-name "$APP_NAME-env" \ 
--description "randall's rails app environment" \ 
--solution-stack-name "64bit Amazon Linux 2014.03 v1.0.0 running Ruby 2.1 (Puma)" \ 
--cname-prefix "$APP_NAME-test" \ 
--option-settings file://test.json 

Ve test.json içerikleri

? aws:rds:dbinstance ad alanı ile belirttiğim her şey yapılandırmadan kaldırılmış gibi görünüyor.

cevap

6

Yalnızca aws ayarı: rds: dbinstance seçenekleri bir RDS veritabanı oluşturmaz. Şu aşağıdaki tekniklerden birini kullanarak bir RDS örneğini oluşturabilirsiniz:

  1. bir RDS kaynak yönetmek

ilk iki yaklaşımı oluşturmak için AWS Konsolu

  • Kullanım eb cli
  • Kullanım Resources section of ebextensions kullanarak oluşturun Sizin için tüm ağır yükleri yaptıkları için en uygun olanıdır, ancak üçüncüsü için fazladan iş yapmak zorundasınız. Üçüncü yaklaşım, konsol veya eb CLI kullanmıyorsanız kullanmak istediğiniz şeydir.

    Fasulye ortamı ortamınız için aşağıdaki ebadlık snippet'ini kullanarak bir RDS kaynağı oluşturabilirsiniz. Uygulama kaynağınızın .ebextensions dizininde 01-rds.config adlı bir dosya oluşturun.

    Resources: 
        AWSEBRDSDatabase: 
         Type: AWS::RDS::DBInstance 
         Properties: 
          AllocatedStorage: 5 
          DBInstanceClass: db.t2.micro 
          DBName: myawesomeapp 
          Engine: postgres 
          EngineVersion: 9.3 
          MasterUsername: myAwesomeUsername 
          MasterUserPassword: myCrazyPassword 
    

    Bu dosya YAML biçimindedir, bu nedenle girinti önemlidir. İsterseniz JSON kullanabilirsiniz. Bunlar, seçenek ayarlarında değildir, dolayısıyla bunu --option-settings test.json olarak iletemezsiniz. Bu dosyayı uygulama kaynağınızla birlikte yüklemeniz yeterlidir.

    RDS veritabanınızda hangi özellikleri yapılandırabileceğiniz hakkında daha fazla bilgi edinin here. Bu sayfada hangi özelliklerin gerektiğini ve hangi özelliklerin isteğe bağlı olduğunu da bulabilirsiniz. Yukarıdakiler sizin için işe yaramıyorsa veya başka sorularınız varsa bildirin.

  • +0

    Yani 01-rds.config' EB komut satırı araçlarının bunu nasıl yapıyor? – ranman

    +0

    Ayrıca bunu denediniz mi? Denediğimde, ortamlarım anında sona erecek ve onlardan herhangi bir kayıt alamıyorum. – ranman

    +0

    SWEET Bunu çözdüm. Şu anda yaşıyorum kendinden geçmiş sevinç harika. Sizler rock. 01-rds.config için parametre adlarını düzelterek cevabınıza küçük bir düzenleme yaptım. Bunu anladım, eb komut satırı araçları bunu böyle yapıyor. – ranman

    1

    Aynı sorunu yaşadım, .ebextensions ile çalışamadım ve EB CLI aracını beğenmedim.

    EB CLI belgesiz bir API özelliği ve bu çalışmayı yapmak için botocore kitaplığının ('eb_botocore') özelleştirilmiş bir sürümünü kullanır. :(

    Yani devam ettim ve botocore çatallı ve eb_botocore tarafından kullanılan API veri dosyasındaki birleşti: https://github.com/boto/botocore/pull/396

    Sonra

    koştum üzerinde 'setup.py install piton' hem my modified botocore ve aws-cli (hem ana at) ., ve aws-cli şimdi Yaşasın komutunu 'çevre oluşturmak elasticbeanstalk aws' konulu --template-şartname seçeneği kabul

    Örnek kullanım:

    aws elasticbeanstalk create-environment\ 
        ...various options...\ 
        --option-settings file://option-settings.json 
        --template-specification file://rds.us-west-2.json 
    

    nerede rds.us-batı-2.json şudur: (EB bölgenize özgü bir kod parçacığı seçmeniz gerektiği anlaşılıyor) görünür.

    ve option-settings.json, sorunda listelenenlere benzer RDS ile ilgili ayarları içerir (DBEngine, DBInstanceClass, DBAllocatedStorage, DBPassword).

    Harika çalışıyor. Umarım AWS CLI ekibi, bu özelliği gelecekte resmi araçlarda kullanmamıza izin verir. Sanırım bu önemli bir değişiklik değil ya da zaten yapmıştı, ama Elastic Beanstalk API'sı ve AWS CLI aracından oldukça büyük bir ihmal işlevselliği var, bu yüzden umarım bir çatlak alırlar.

    diğer cevaplar çok deneme yanılma sonra Eylül 2015 itibariyle benim ortamında işe yaramadı
    +1

    Sadece bu güncellemenin 9/2015 itibariyle güncel olmadığına dair bir güncelleme şu anda CLI'den oldukça farklı. – ranman

    1

    , benim için çalıştı aşağıdaki:

    yapılandırma şablonu pasajı (YAML):

    aws:rds:dbinstance: 
        DBAllocatedStorage: '5' 
        DBDeletionPolicy: Delete 
        DBEngine: postgres 
        DBEngineVersion: 9.3.9 
        DBInstanceClass: db.t2.micro 
        DBPassword: PASSWORD_HERE 
        DBUser: USERNAME_HERE 
        MultiAZDatabase: false 
    

    .ebextensions /rds.config dosyası (JSON): Aralık 2017 tarihi itibariyle

    { 
        "Parameters": { 
        "AWSEBDBUser": { 
         "NoEcho": "true", 
         "Description": "The name of master user for the client DB Instance.", 
         "Default": "ebroot", 
         "Type": "String", 
         "ConstraintDescription": "must begin with a letter and contain only alphanumeric characters" 
        }, 
        "AWSEBDBPassword": { 
         "NoEcho": "true", 
         "Description": "The master password for the DB instance.", 
         "Type": "String", 
         "ConstraintDescription": "must contain only alphanumeric characters" 
        }, 
        "AWSEBDBName": { 
         "NoEcho": "true", 
         "Description": "The DB Name of the RDS instance", 
         "Default": "ebdb", 
         "Type": "String", 
         "ConstraintDescription": "must contain only alphanumeric characters" 
        } 
        }, 
        "Resources": { 
        "AWSEBAutoScalingGroup": { 
         "Metadata": { 
         "AWS::ElasticBeanstalk::Ext": { 
          "_ParameterTriggers": { 
          "_TriggerConfigDeployment": { 
           "CmpFn::Insert": { 
           "values": [ 
            { 
            "CmpFn::Ref": "Parameter.AWSEBDBUser" 
            }, 
            { 
            "CmpFn::Ref": "Parameter.AWSEBDBPassword" 
            }, 
            { 
            "CmpFn::Ref": "Parameter.AWSEBDBName" 
            } 
           ] 
           } 
          } 
          }, 
          "_ContainerConfigFileContent": { 
          "plugins": { 
           "rds": { 
           "Description": "RDS Environment variables", 
           "env": { 
            "RDS_USERNAME": { 
            "Ref": { 
             "CmpFn::Ref": "Parameter.AWSEBDBUser" 
            } 
            }, 
            "RDS_PASSWORD": { 
            "Ref": { 
             "CmpFn::Ref": "Parameter.AWSEBDBPassword" 
            } 
            }, 
            "RDS_DB_NAME": { 
            "Ref": { 
             "CmpFn::Ref": "Parameter.AWSEBDBName" 
            } 
            }, 
            "RDS_HOSTNAME": { 
            "Fn::GetAtt": [ 
             "AWSEBRDSDatabase", 
             "Endpoint.Address" 
            ] 
            }, 
            "RDS_PORT": { 
            "Fn::GetAtt": [ 
             "AWSEBRDSDatabase", 
             "Endpoint.Port" 
            ] 
            } 
           } 
           } 
          } 
          } 
         } 
         } 
        }, 
        "AWSEBRDSDatabase": { 
         "Type": "AWS::RDS::DBInstance", 
         "DeletionPolicy": "Delete", 
         "Properties": { 
         "DBName": { 
          "Ref": { 
          "CmpFn::Ref": "Parameter.AWSEBDBName" 
          } 
         }, 
         "AllocatedStorage": "5", 
         "DBInstanceClass": "db.t2.micro", 
         "Engine": "postgres", 
         "DBSecurityGroups": [ 
          { 
          "Ref": "AWSEBRDSDBSecurityGroup" 
          } 
         ], 
         "MasterUsername": { 
          "Ref": { 
          "CmpFn::Ref": "Parameter.AWSEBDBUser" 
          } 
         }, 
         "MasterUserPassword": { 
          "Ref": { 
          "CmpFn::Ref": "Parameter.AWSEBDBPassword" 
          } 
         }, 
         "MultiAZ": false 
         } 
        }, 
        "AWSEBRDSDBSecurityGroup": { 
         "Type": "AWS::RDS::DBSecurityGroup", 
         "Properties": { 
         "DBSecurityGroupIngress": { 
          "EC2SecurityGroupName": { 
          "Ref": "AWSEBSecurityGroup" 
          } 
         }, 
         "GroupDescription": "Enable database access to Beanstalk application" 
         } 
        } 
        } 
    } 
    
    +0

    Güncelleştirmeyi Ocak 2016'dan itibaren güncelleştirmek artık işe yaramıyor. –

    0

    kullandığımız aşağıdaki ebextensions

    Bununla birlikte, özel seçenekleri
    $ cat .ebextensions/custom-options.config 
    option_settings: 
        "aws:elasticbeanstalk:customoption": 
         DBSubnets: subnet-1234567,subnet-7654321 
         VpcId: vpc-1234567 
    

    tek şey

    ile
    $ cat .ebextensions/rds.config 
    Resources: 
        AWSEBRDSDBSecurityGroup: 
         Type: AWS::RDS::DBSecurityGroup 
         Properties: 
          EC2VpcId: 
           Fn::GetOptionSetting: 
            OptionName: "VpcId" 
          GroupDescription: RDS DB VPC Security Group 
          DBSecurityGroupIngress: 
           - EC2SecurityGroupId: 
            Ref: AWSEBSecurityGroup 
    
        AWSEBRDSDBSubnetGroup: 
         Type: AWS::RDS::DBSubnetGroup 
         Properties: 
          DBSubnetGroupDescription: RDS DB Subnet Group 
          SubnetIds: 
           Fn::Split: 
            - "," 
            - Fn::GetOptionSetting: 
             OptionName: DBSubnets 
    
        AWSEBRDSDatabase: 
         Type: AWS::RDS::DBInstance 
         DeletionPolicy: Delete 
         Properties: 
          PubliclyAccessible: true 
          MultiAZ: false 
          Engine: mysql 
          EngineVersion: 5.7 
          BackupRetentionPeriod: 0 
          DBName: test 
          MasterUsername: toor 
          MasterUserPassword: 123456789 
          AllocatedStorage: 10 
          DBInstanceClass: db.t2.micro 
          DBSecurityGroups: 
           - Ref: AWSEBRDSDBSecurityGroup 
          DBSubnetGroupName: 
           Ref: AWSEBRDSDBSubnetGroup 
    
    Outputs: 
        RDSId: 
         Description: "RDS instance identifier" 
         Value: 
          Ref: "AWSEBRDSDatabase" 
    
        RDSEndpointAddress: 
         Description: "RDS endpoint address" 
         Value: 
          Fn::GetAtt: ["AWSEBRDSDatabase", "Endpoint.Address"] 
    
        RDSEndpointPort: 
         Description: "RDS endpoint port" 
         Value: 
          Fn::GetAtt: ["AWSEBRDSDatabase", "Endpoint.Port"] 
    
        AWSEBRDSDatabaseProperties: 
         Description: Properties associated with the RDS database instance 
         Value: 
          Fn::Join: 
           - "," 
           - - Ref: AWSEBRDSDatabase 
            - Fn::GetAtt: ["AWSEBRDSDatabase", "Endpoint.Address"] 
            - Fn::GetAtt: ["AWSEBRDSDatabase", "Endpoint.Port"] 
    

    - Açıkça uygulamanıza * RDS_ env değişkenleri geçmek zorunda.