AttributeError: 'ec2.ServiceResource' object has no attribute 'send_command'

0 votes

Dear all,

I have tried to creating user credentials in windows EC2 instance using boto3 script. But I get an error like below

"AttributeError: 'ec2.ServiceResource' object has no attribute 'send_command"

It's my Boto3 code

#!/usr/bin/env python3

import boto3
import os
import subprocess

ssm_client = boto3.resource('ec2',aws_access_key_id='xxxxxx',aws_secret_access_key='yyyyy', region_name='us-west-2')

session = boto3.Session (profile_name='exampleaws')

response = ssm_client.send_command(
             InstanceIds=[
                "i-xxxxxx" # use instance id on which you want to execute, even multiple is allowd
                     ],
             DocumentName="AWS-RunPowerShellScript",
             Parameters={
                'commands':[
                     'New-LocalUser "Latchu" -Password "ABCD123" -FullName "LakshmiNarayanan" -Description "User-Details'
                       ]
                   },
             )
command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-xxxxxx',
    )
print(output)

----

What's the issue?

Oct 7 in AWS by Lakshminarayanan
• 1,220 points

edited Oct 7 by MD 129 views

1 answer to this question.

+2 votes
Best answer

Hi@Lakshminarayanan,

The send_command attribute is not available in boto3. You can check as shown below.

 import boto3
client = boto3.resource('ec2',aws_access_key_id='xxxxxx',aws_secret_access_key='yyyyy', region_name='us-west-2')
dir(client)
['ClassicAddress', 'DhcpOptions', 'Image', 'Instance', 'InternetGateway', 'KeyPair', 'NetworkAcl', 'NetworkInterface', 'NetworkInterfaceAssociation', 'PlacementGroup', 'Route', 'RouteTable', 'RouteTableAssociation', 'SecurityGroup', 'Snapshot', 'Subnet', 'Tag', 'Volume', 'Vpc', 'VpcAddress', 'VpcPeeringConnection', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'classic_addresses', 'create_dhcp_options', 'create_instances', 'create_internet_gateway', 'create_key_pair', 'create_network_acl', 'create_network_interface', 'create_placement_group', 'create_route_table', 'create_security_group', 'create_snapshot', 'create_subnet', 'create_tags', 'create_volume', 'create_vpc', 'create_vpc_peering_connection', 'dhcp_options_sets', 'disassociate_route_table', 'get_available_subresources', 'images', 'import_key_pair', 'instances', 'internet_gateways', 'key_pairs', 'meta', 'network_acls', 'network_interfaces', 'placement_groups', 'register_image', 'route_tables', 'security_groups', 'snapshots', 'subnets', 'volumes', 'vpc_addresses', 'vpc_peering_connections', 'vpcs']
answered Oct 7 by MD
• 79,930 points

selected Oct 7 by Lakshminarayanan

Hi,

what should I use instead of

response = ssm_client.send_command(
             InstanceIds=[
                "i-xxxxxx" # use instance id on which you want to execute, even multiple is allowd
                     ],
             DocumentName="AWS-RunPowerShellScript",
             Parameters={
                'commands':[
                     'New-LocalUser "Latchu" -Password "ABCD123" -FullName "LakshmiNarayanan" -Description "User-Details'
                       ]
                   },
             )

Hi,

I think you just need to add the below line in your code.

ssm_client = boto3.client('ssm')

This module contains the send_command argument.

#!/usr/bin/env python3
import boto3
import os
import subprocess
client = boto3.resource('ec2',aws_access_key_id='xxxxxx',aws_secret_access_key='yyyyy', region_name='us-west-2')

session = boto3.Session (profile_name='exampleaws')
ssm_client = boto3.client('ssm')
response = ssm_client.send_command(
             InstanceIds=[
                "i-xxxxxx" # use instance id on which you want to execute, even multiple is allowd
                     ],
             DocumentName="AWS-RunPowerShellScript",
             Parameters={
                'commands':[
                     'New-LocalUser "Latchu" -Password "ABCD123" -FullName "LakshmiNarayanan" -Description "User-Details'
                       ]
                   },
             )
command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-xxxxxx',
    )
print(output)

yes, but its getting error like below

    raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operation:

Even I mentioned exact instance id.

Hi,

Ok. Check your region name properly because EC2 is region-specific. Just cross-check id, region. Your code is totally ok.

Everything is properly configured. but still saying "invalid instance id"
Ok, do one thing first print all the instance id using boto3. Check what it is showing.
Finally created user. Just i have used "net user username "password" /ADD " in powershell script. its created successfully. Many thanks for your support.

Related Questions In AWS

+5 votes
2 answers

EC2 instance status check failed

Creating a snapshot from an EBS volume ...READ MORE

answered Mar 27, 2018 in AWS by DragonLord999
• 8,450 points
986 views
0 votes
1 answer

Adding Keypair to existing EC2 instance

No you can't. The reason is KeyPair ...READ MORE

answered Apr 8, 2018 in AWS by code_ninja
• 6,270 points
186 views
0 votes
1 answer

Import my AWS credentials using python script

Using AWS Cli  Configure your IAM user then ...READ MORE

answered Nov 16, 2018 in AWS by Jino
• 5,770 points
1,347 views
0 votes
1 answer

AWS S3 uploading hidden files by default

versioning is enabled in your bucket. docs.aws.amazon.com/AmazonS3/latest/user-guide/….... the ...READ MORE

answered Oct 4, 2018 in AWS by Priyaj
• 57,700 points
1,461 views
0 votes
1 answer

Pass account id of an AWS sub account using a variable as an argument in CloudWatch Alarm Actions with python (boto3)?

Python String and Integer concatenation >>> print("arn:aws:swf:us-east-2:{0}:action/actions/AWS_EC2.InstanceId.Stop/1.0".format(acccnum)) arn:aws:swf:us-east-2:12312312312312:action/actions/AWS_EC2.InstanceId.Stop/1.0 >>> print("arn:aws:swf:us-east-2:" ...READ MORE

answered Oct 5, 2018 in AWS by Priyaj
• 57,700 points
481 views
0 votes
1 answer

dynamodb.ServiceResource' object has no attribute 'exceptions'.

Hi@akhtar, You'll need to use boto3.client('dynamodb') to be able to ...READ MORE

answered Jul 13 in AWS by MD
• 79,930 points
799 views
0 votes
1 answer

Error: 'No package Tableau server available on the EC2 Linux instance'

Hi, Tableau may not come with your ISO ...READ MORE

answered Oct 19 in AWS by MD
• 79,930 points
35 views