2017-02-17 5 views
0

Я создаю шаблон облачной информации, который создает некоторые ресурсы в качестве экземпляра EC2, autoscaling group и launchConfiguration. По userData свойству launchConfiguration ресурса, я попытался установить Cloudwatch agent следующим образом:Не удается установить агент облачной погоды по облачной информации на Amazon ECS-оптимизированный AMI

"UserData":{ "Fn::Base64" : { 
      "Fn::Join" : ["", [ 
       "#!/bin/bash -xe\n", 
       "yum -y install aws-cfn-bootstrap\n", 
       "/opt/aws/bin/cfn-init -v", 
       "   --stack ", { "Ref": "AWS::StackName" }, 
       "   --resource LaunchCongig", 
       "   --region ", { "Ref" : "AWS::Region" },"\n", 
       "yum -y install wget\n", 
       "# Get the CloudWatch Logs agent\n", 
       "wget https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py\n", 
       "# Install the CloudWatch Logs agent\n", 
       "python ./awslogs-agent-setup.py -n -r ", { "Ref" : "AWS::Region" }, " -c /etc/cwlogs.cfg || error_exit 'Failed to run CloudWatch Logs agent setup'\n", 
       "service awslogs start" 
      ]]} 

После SSH в случае, я проверил файл /var/log/cloud-init-output.log, чтобы увидеть, если все в порядке, но вот то, что я получил :

+ wget https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py 
--2017-02-17 14:36:10-- https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py 
Resolving s3.amazonaws.com (s3.amazonaws.com)... 52.216.226.59 
Connecting to s3.amazonaws.com (s3.amazonaws.com)|52.216.226.59|:443... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 47998 (47K) [text/x-python] 
Saving to: ‘awslogs-agent-setup.py’ 

    0K .......... .......... .......... .......... ...... 100% 196K=0.2s 

2017-02-17 14:36:10 (196 KB/s) - ‘awslogs-agent-setup.py’ saved [47998/47998] 

+ python ./awslogs-agent-setup.py -n -r eu-west-1 -c /etc/cwlogs.cfg 

Step 1 of 5: Installing pip ...Traceback (most recent call last): 
    File "./awslogs-agent-setup.py", line 1144, in <module> 
    main() 
    File "./awslogs-agent-setup.py", line 1140, in main 
    setup.setup_artifacts() 
    File "./awslogs-agent-setup.py", line 693, in setup_artifacts 
    self.install_pip() 
    File "./awslogs-agent-setup.py", line 600, in install_pip 
    fail("Could not install pip. Please try again or see " + AGENT_SETUP_LOG_FILE + " for more details") 
TypeError: fail() takes exactly 2 arguments (1 given) 
+ error_exit 'Failed to run CloudWatch Logs agent setup' 
/var/lib/cloud/instance/scripts/part-001: line 8: error_exit: command not found 
Feb 17 14:36:12 cloud-init[2798]: util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/part-001 [127] 
Feb 17 14:36:12 cloud-init[2798]: cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts) 
Feb 17 14:36:12 cloud-init[2798]: util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python2.7/dist-packages/cloudinit/config/cc_scripts_user.pyc'>) failed 
Cloud-init v. 0.7.6 finished at Fri, 17 Feb 2017 14:36:12 +0000. Datasource DataSourceEc2. Up 85.78 seconds 

Что не так в этом скрипте? Есть ли другой способ установить агент? Спасибо.

EDIT:

я понял, что это потому, что, возможно, пакет python-pip не получил установлен таким образом, я добавил это к userData:

"yum -y install python-pip\n", 

После этого я снова играл шаблон и странно, я получил ту же ошибку.

Я usinh Amazon ECS-optimized AMI

ответ

1

Я решил эту проблему путем установки агента непосредственно yum awslogs:

 "UserData":{ "Fn::Base64" : { 
     "Fn::Join" : ["", [ 
      "#!/bin/bash -xe\n", 
      "yum -y install aws-cfn-bootstrap\n", 
      "/opt/aws/bin/cfn-init -v", 
      "   --stack ", { "Ref": "AWS::StackName" }, 
      "   --resource launchConfig", 
      "   --region ", { "Ref" : "AWS::Region" },"\n", 
      "yum -y install awslogs\n", 
      "service awslogs start" 
     ]]} 

Вот выход из лог-файла:

Installed: 
    awslogs.noarch 0:1.1.2-1.10.amzn1            

Dependency Installed: 
    aws-cli.noarch 0:1.11.29-1.45.amzn1           
    aws-cli-plugin-cloudwatch-logs.noarch 0:1.3.3-1.15.amzn1      
    freetype.x86_64 0:2.3.11-15.14.amzn1           
    libjpeg-turbo.x86_64 0:1.2.90-5.14.amzn1          
    mailcap.noarch 0:2.1.31-2.7.amzn1            
    python27-botocore.noarch 0:1.4.86-1.62.amzn1         
    python27-colorama.noarch 0:0.2.5-1.7.amzn1          
    python27-dateutil.noarch 0:2.1-1.3.amzn1          
    python27-docutils.noarch 0:0.11-1.15.amzn1          
    python27-futures.noarch 0:3.0.3-1.3.amzn1          
    python27-imaging.x86_64 0:1.1.6-19.9.amzn1          
    python27-jmespath.noarch 0:0.9.0-1.11.amzn1         
    python27-ply.noarch 0:3.4-3.12.amzn1           
    python27-pyasn1.noarch 0:0.1.7-2.9.amzn1          
    python27-rsa.noarch 0:3.4.1-1.8.amzn1           

Complete! 
+ service awslogs start 
Starting awslogs: [ OK ] 
Cloud-init v. 0.7.6 finished at Fri, 17 Feb 2017 15:33:42 +0000. Datasource DataSourceEc2. Up 83.47 seconds 

все работает хорошо это так. Надеюсь, что когда-нибудь кто-нибудь поможет!

2

Подробную информацию о настройке журналов CloudWatch см. В документе Using CloudWatch Logs with Container Instances в документации по обслуживанию контейнера EC2. В документации рекомендуется использовать yum install -y awslogs вместо сценария установки Python.

В документации приведен полный образец в разделе Configuring CloudWatch Logs at Launch with User Data.

В вашем случае, поскольку вы уже управляете своими конфигурационными файлами с использованием cfn-init и CloudFormation::Init метаданных в CloudFormation, вам не нужен комплексный синтаксический анализ файлов конфигурации в вашем сценарии User-Data, но вы все равно можете использовать скрипт как ссылка. Одна вещь, которую стоит добавить к вашему сценарию User-Data, выполняется chkconfig awslogs on, чтобы убедиться, что служба продолжает работать в экземпляре после перезагрузки.

+0

в CloudFormation :: Init; Я сделал это так: '{" Ref ":" ClusterName "},"/", {" Ref ":" ContainerInstances "}' Я еще не тестировал, но это то же самое, что делать с помощью userData? – Somar

+0

Не могли бы вы рассказать мне, как поставить этот скрипт в UserData? – Somar

+0

Поскольку вы используете CloudFormation, я думаю, что использование «CloudFormation :: Init» для ссылки на эти поля, вероятно, является лучшим выбором и проще в управлении. Этот пример из документации предназначен для полной настройки только из пользовательских данных, если вы запускаете экземпляр непосредственно из консоли, например. Я придерживаюсь того, что у вас уже есть, и просто использую детали в документации в качестве ссылки для сравнения - возможно, добавьте 'chkconfig awslogs on', чтобы убедиться, что служба всегда запускается даже после перезагрузки экземпляра. – wjordan

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