4

J'essaie d'avoir un beanstalk élastique pour provisionner une instance élastique. J'essaie de comprendre comment je peux accéder à l'adresse de l'instance de cache à l'exécution à partir de mon environnement de docker. Je cours python (sur gevent).Récupère l'adresse Elasticache à partir d'un docker Elastic Beanstalk container

Voici mon fichier de configuration au sein .ebextensions:

Resources: 
    sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress 
    Properties: 
     GroupName: {Ref : AWSEBSecurityGroup} 
     IpProtocol: tcp 
     ToPort: 443 
     FromPort: 443 
     CidrIp: 0.0.0.0/0 

    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 

option_settings: 
    "aws:elasticbeanstalk:customoption": 
    CacheNodeType : cache.t1.micro 
    NumCacheNodes : 1 
    Engine : redis 
    CachePort : 6379 

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

files: 
    /etc/nginx/conf.d/ssl.conf: 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     # HTTPS Server 

     server { 
     listen 443; 
     server_name localhost; 

     ssl on; 
     ssl_certificate /etc/pki/tls/certs/server.crt; 
     ssl_certificate_key /etc/pki/tls/certs/server.key; 

     ssl_session_timeout 5m; 

     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; 
     ssl_prefer_server_ciphers on; 

     location/{ 
      proxy_pass http://docker; 
      proxy_http_version 1.1; 

      proxy_set_header Connection ""; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 
     } 
    /tmp/elasticache.env: 
    mode: "000444" 
    content: | 
     export ELASTICACHE_CONFIGURATION_ENDPOINT="'{"Fn::GetAtt": ["MyElastiCache", "ConfigurationEndpoint.Address"]}':'{"Fn::GetAtt": ["MyElastiCache", "ConfigurationEndpoint.Port"]}'" 

option_settings: 
    - option_name: ELASTICACHE_DATA_FILE 
    value: /var/app/elasticache 

container_commands: 
    copy_crt: 
    command: cp .ebextensions/server.crt /etc/pki/tls/certs/server.crt 
    copy_key: 
    command: cp .ebextensions/server.key /etc/pki/tls/certs/server.key 

J'ai suivi le guide ici: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-environment-resources-elasticache.html#customize-environment-resources-elasticache-defaultvpc. Et ajouté un support pour l'utilisation de notre certificat tls.

Mon problème est que le fichier /tmp/elasticache.env ne sera pas accessible depuis l'instance du docker. Existe-t-il un meilleur moyen d'obtenir les informations d'identification elasticache?

Répondre

2

Si vous avez déjà le point final ElastiCache, vous pouvez l'injecter dans la variable d'environnement conteneur Docker en utilisant le crochet de déploiement de l'application:

files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/pre/02injectdockerfile.sh": 
    mode: "000755" 
    content: | 
     . /opt/elasticbeanstalk/hooks/common.sh 
     EB_CONFIG_APP_CURRENT=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir) 
     cd $EB_CONFIG_APP_CURRENT 
     echo "ENV ELASTICACHE_CONFIGURATION_ENDPOINT \"'{"Fn::GetAtt": ["MyElastiCache", "ConfigurationEndpoint.Address"]}':'{"Fn::GetAtt": ["MyElastiCache", "ConfigurationEndpoint.Port"]}'\"" >> Dockerfile 

Voir plus de détails à https://stackoverflow.com/a/32458281/3427434 (en option # 2 section).

+0

Merci! Cela aidera avec d'autres variables d'environnement. Cependant, j'essaie de comprendre comment utiliser Elasticache correctement dans Elastic Beanstalk. –

+2

Cela ne fonctionnera pas avec Redis, qui est ce que l'OP utilise, il ne fonctionnera qu'avec Memcache, Pour l'utilisation de Redis {"Fn :: GetAtt": ["MyElastiCache", "RedisEndpoint.Address"]} Pour référence: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#d0e52037 –