4

Я пытаюсь получить эластичный бобовый стебель, автоматически создавая экземпляр эластичной масти. Я пытаюсь выяснить, как я могу получить доступ к адресу экземпляра кеша во время выполнения из моей среды докеров. Я запускаю python (на gevent).Получить адрес Elasticache из докеры Эластичный контейнер для фасоли

Вот мой конфигурационный файл в .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 

Я последовал за руководство здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-environment-resources-elasticache.html#customize-environment-resources-elasticache-defaultvpc. Добавлена ​​поддержка использования нашего сертификата tls.

Моя проблема заключается в том, что файл /tmp/elasticache.env не будет доступен из экземпляра докера. Есть ли лучший способ получить верительные грамоты?

ответ

2

Если у вас уже есть конечная точка ElastiCache, вы можете привнести в Докер переменной емкости среды, используя крюк развертывания приложения:

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 

Смотреть подробнее в https://stackoverflow.com/a/32458281/3427434 (на варианте # 2 раздела).

+0

Спасибо! Это поможет с некоторыми другими переменными среды. Тем не менее, я пытаюсь выяснить, как правильно заставить Elasticache работать в Elastic Beanstalk. –

+2

Это не будет работать с Redis, что и использует OP, он будет работать только с Memcache, Для Redis используйте {"Fn :: GetAtt": ["MyElastiCache", "RedisEndpoint.Address"]} Для справки: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#d0e52037 –

 Смежные вопросы

  • Нет связанных вопросов^_^