2014-10-23 14 views

risposta

9

AWS Elastic Beanstalk fornisce resource configuration tramite la cartella .ebextensions. In sostanza, è necessario comunicare a Elastic Beanstalk cosa si desidera eseguire in aggiunta alla propria applicazione. Per il provisioning in un vpc predefinito. È necessario

creano un .ebextensions cartella

aggiungere un file elasticache.config

e comprendono i seguenti contenuti.

Resources: 
    MyCacheSecurityGroup: 
    Type: "AWS::EC2::SecurityGroup" 
    Properties: 
     GroupDescription: "Lock cache down to webserver access only" 
     SecurityGroupIngress : 
     - IpProtocol : "tcp" 
      FromPort : 
      Fn::GetOptionSetting: 
       OptionName : "CachePort" 
       DefaultValue: "6379" 
      ToPort : 
      Fn::GetOptionSetting: 
       OptionName : "CachePort" 
       DefaultValue: "6379" 
      SourceSecurityGroupName: 
      Ref: "AWSEBSecurityGroup" 
    MyElastiCache: 
    Type: "AWS::ElastiCache::CacheCluster" 
    Properties: 
     CacheNodeType: 
     Fn::GetOptionSetting: 
      OptionName : "CacheNodeType" 
      DefaultValue : "cache.t1.micro" 
     NumCacheNodes: 
     Fn::GetOptionSetting: 
      OptionName : "NumCacheNodes" 
      DefaultValue : "1" 
     Engine: 
     Fn::GetOptionSetting: 
      OptionName : "Engine" 
      DefaultValue : "redis" 
     VpcSecurityGroupIds: 
     - 
      Fn::GetAtt: 
      - MyCacheSecurityGroup 
      - GroupId 

Outputs: 
    ElastiCache: 
    Description : "ID of ElastiCache Cache Cluster with Redis Engine" 
    Value : 
     Ref : "MyElastiCache" 

referenziato da: "Come aggiungere risorse ElasticCache di Elastic Beanstalk VPC" http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-environment-resources-elasticache.html

+0

Ho fatto questo e ottenere il '[Errore: Errore: connessione Redis a 127.0.0.1:6379 non riuscita - collegare ECONNREFUSED]'. Probabilmente il comando redis-server non è stato avviato. Qualche modo per controllare lo stato di Redis? – theChinmay

+0

@theChinmay redis verrà distribuito autonomamente, l'app dovrebbe ottenere l'IP da una variabile di ambiente e connettersi a quell'IP anziché a localhost –

+0

@LucaG. sai come posso ottenere l'IP o l'host nell'app NodeJS Amazon Elasticbeanstalk? Grazie –

14

La risposta accettata è grande se si utilizza ElastiCache (come RDS, ma per Memcached o Redis). Ma, se ciò che si sta cercando di fare è dire EB a disposizione Redis nella istanza EC2 in cui si gira la vostra applicazione, si desidera un file di configurazione diversa, qualcosa di simile a this gist:

packages: 
    yum: 
    gcc-c++: [] 
    make: [] 
sources: 
    /home/ec2-user: http://download.redis.io/releases/redis-2.8.4.tar.gz 
commands: 
    redis_build: 
    command: make 
    cwd: /home/ec2-user/redis-2.8.4 
    redis_config_001: 
    command: sed -i -e "s/daemonize no/daemonize yes/" redis.conf 
    cwd: /home/ec2-user/redis-2.8.4 
    redis_config_002: 
    command: sed -i -e "s/# maxmemory <bytes>/maxmemory 500MB/" redis.conf 
    cwd: /home/ec2-user/redis-2.8.4 
    redis_config_003: 
    command: sed -i -e "s/# maxmemory-policy volatile-lru/maxmemory-policy allkeys-lru/" redis.conf 
    cwd: /home/ec2-user/redis-2.8.4 
    redis_server: 
    command: src/redis-server redis.conf 
    cwd: /home/ec2-user/redis-2.8.4 

L'altra opzione è quella di containerizza la tua app con Redis usando Docker, quindi distribuisci la tua app come un numero di container Docker, invece di qualsiasi lingua tu abbia scritto. Ciò per l'app Flask è descritto con here.

È possibile bloccare tutto in un unico contenitore e distribuire in questo modo, che è più semplice, ma non è scalabile, oppure è possibile utilizzare le distribuzioni multi-contenitore Elastic Beanstalk di AWS. Se hai utilizzato docker-compose, puoi utilizzare lo strumento this per trasformare un docker-compose.yml nel formato desiderato da AWS, Dockerrun.aws.json.

Problemi correlati