Том EC2 EBS Chef с использованием AWS Cookbook InvalidInstanceIDNotFound

Я использую книгу рецептов AWS, предоставленную Chef (v2.7.2), чтобы создать и прикрепить том EBS на сервере Ubuntu 14.04.02 LTS HVM ec2 во время первоначального запуска Chef-клиента с начальной загрузкой. Я размещаю свой собственный сервер шеф-повара (12.1.0-1_amd64). Используя нож-ec2, я создаю экземпляр aws и загружаю список выполнения с помощью следующей команды:

knife ec2 server create --region us-east-1 --availability-zone us-east-1a --node-name my-server --run-list "role[my-role]" --image ami-d05e75b8 --flavor c3.large --ebs-size 16 --ebs-volume-type gp2 --subnet subnet-mySubnetId --associate-public-ip --server-connect-attribute public_ip_address --ssh-user ubuntu --ssh-key my-pem --identity-file /path/to/my-pem.pem -y

Однако, когда выполняется рецепт, который создает и присоединяет том, том успешно создается, но не может присоединиться к моему экземпляру. Продолжает возникать следующая ошибка:

Aws::EC2::Errors::InvalidInstanceIDNotFound: The instance ID 'i-36a93b84' does not exist

В моем рецепте есть следующий код (взятый из примера на странице кулинарной книги):

include_recipe 'aws'

aws_ebs_volume "backup_volume" do
  aws_access_key aws['aws_access_key_id']
  aws_secret_access_key aws['aws_secret_access_key']
  size 16
  device "/dev/sdi"
  availability_zone "us-east-1a"
  action [ :create, :attach ]
end

Я подтвердил, что «i-36a93b84» - это идентификатор экземпляра, который создает Knife-ec2 и на котором выполняется клиент-шеф-повар, поэтому он существует. Кроме того, я подтвердил, что создаю том в той же зоне доступности, что и экземпляр.

Я прочитал несколько сообщений о AWS Eventual Согласованность, но понятия не имею, как с этим справиться во время запуска шеф-клиента с начальной загрузкой, поскольку рецепт запускается сразу после создания экземпляра.

Есть ли способ создать дополнительное монтирование в то время, когда Knife-ec2 создает сервер aws, или я пытаюсь подключить том неортодоксальным образом?

Вывод клиента Chef во время рецепта:

  Recipe: my-cookbook::backupvolume
      * aws_ebs_volume[backup_volume] action create[2015-07-17T11:57:05+00:00] INFO: Processing aws_ebs_volume[backup_volume] action create (my-cookbook::backupvolume line 49)
      [2015-07-17T11:57:05+00:00] DEBUG: Providers for generic aws_ebs_volume resource enabled on node include: [LWRP provider aws_ebs_volume from cookbook aws]
      [2015-07-17T11:57:05+00:00] DEBUG: Provider for action create on resource aws_ebs_volume[backup_volume] is LWRP provider aws_ebs_volume from cookbook aws
      [2015-07-17T11:57:05+00:00] DEBUG: Instance ID is i-36a93b84
      [2015-07-17T11:57:05+00:00] DEBUG: Instance's availability zone is us-east-1a
      [2015-07-17T11:57:05+00:00] DEBUG: Created new  volume vol-4842ecc4
      [2015-07-17T11:57:05+00:00] DEBUG: Volume is creating
      [2015-07-17T11:57:08+00:00] INFO: Volume vol-4842ecc4 is available
        - create a volume with id= size=16 availability_zone=us-east-1a and update the node data with created volume's id
        * aws_ebs_volume[backup_volume] action attach[2015-07-17T11:57:08+00:00] INFO: Processing aws_ebs_volume[backup_volume] action attach (my-cookbook::backupvolume line 49)
      [2015-07-17T11:57:08+00:00] DEBUG: Providers for generic aws_ebs_volume resource enabled on node include: [LWRP provider aws_ebs_volume from cookbook aws]
      [2015-07-17T11:57:08+00:00] DEBUG: Provider for action attach on resource aws_ebs_volume[backup_volume] is LWRP provider aws_ebs_volume from cookbook aws
      [2015-07-17T11:57:08+00:00] DEBUG: Attaching vol-4842ecc4 as /dev/sdi


        ================================================================================
        Error executing action `attach` on resource 'aws_ebs_volume[backup_volume]'
        ================================================================================

        Aws::EC2::Errors::InvalidInstanceIDNotFound
        -------------------------------------------
        The instance ID 'i-36a93b84' does not exist

        Cookbook Trace:
        ---------------
        /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:212:in `attach_volume'
        /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:70:in `block (2 levels) in class_from_file'
        /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:68:in `block in class_from_file'

        Resource Declaration:
        ---------------------
        # In /var/chef/cache/cookbooks/my-cookbook/recipes/backupvolume.rb

         49:       aws_ebs_volume "backup_volume" do
         50:         aws_access_key aws['aws_access_key_id']
         51:         aws_secret_access_key aws['aws_secret_access_key']
         52:         size 16
         53:         device "/dev/sdi"
         54:         description "TEST BACKUP"
         55:         availability_zone "us-east-1a"
         56:         action [ :create, :attach ]
         57:       end
         58:

        Compiled Resource:
        ------------------
        # Declared in /var/chef/cache/cookbooks/my-cookbook/recipes/backupvolume.rb:49:in `from_file'

        aws_ebs_volume("backup_volume") do
          action [:create, :attach]
          updated true
          retries 0
          retry_delay 2
          default_guard_interpreter :default
          declared_type :aws_ebs_volume
          cookbook_name "my-cookbook"
          recipe_name "backupvolume"
          aws_access_key "********"
          aws_secret_access_key "********"
          size 16
          device "/dev/sdi"
          description "TEST BACKUP"
          availability_zone "us-east-1a"
          timeout 180
          volume_type "standard"
          piops 0
        end

Вот трассировка стека:

Aws::EC2::Errors::InvalidInstanceIDNotFound: aws_ebs_volume[backup_volume] (my-cookbook::backupvolume line 49) had an error: Aws::EC2::Errors::InvalidInstanceIDNotFound: The instance ID 'i-36a93b84' does not exist
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call'
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/param_conversion.rb:22:in `call'
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call'
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/response_target.rb:18:in `call'
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/request.rb:70:in `send_request'
/opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/base.rb:216:in `block (2 levels) in define_operation_methods'
/var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:212:in `attach_volume'
/var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:70:in `block (2 levels) in class_from_file'
/opt/chef/embedded/apps/chef/lib/chef/mixin/why_run.rb:52:in `call'
/opt/chef/embedded/apps/chef/lib/chef/mixin/why_run.rb:52:in `add_action'
/opt/chef/embedded/apps/chef/lib/chef/provider.rb:175:in `converge_by'
/var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:68:in `block in class_from_file'

person Tommy Adamski    schedule 17.07.2015    source источник
comment
Я протестировал, оставив начальный экземпляр ec2 запущенным на несколько часов, и снова попытался запустить рецепт, чтобы создать и присоединить том. Та же ошибка, не удается найти экземпляр.   -  person Tommy Adamski    schedule 17.07.2015


Ответы (1)


Проблема была в моих собственных глупостях.

Учетные данные AWS в теге данных были для старой списанной учетной записи AWS, но учетные данные AWS, использованные для создания экземпляра с ножом, были для текущей учетной записи AWS.

Как только правильные ключи были помещены в базу данных, том был успешно создан и прикреплен!

Надеюсь, это поможет кому-то в будущем ...

person Tommy Adamski    schedule 17.07.2015