-2

I am trying to update the parameters in SSM parameters store and got the below error. What mistake am I doing? pls clarify.

Lambda Code:

#Lambda code
logger = logging.getLogger()
logger.setLevel(logging.INFO)

ssm_client = boto3.client('ssm')
parameter_name = ''
def lambda_handler(event, context):
logger.info('Printing event: {}'.format(event))
process_sns_event(event)
return None  
def process_sns_event(event):
for record in (event['Records']):
event_message = record['Sns']['Message']

# convert the event message to json
message_json = json.loads(event_message)

# obtain the image state
image_state = (message_json['state']['status'])
# obtain the image name
image_name = (message_json['name'])

# assign SSM parameter based on image_name
#parameter_name = f'/ec2-image-builder/{{image_name}}/latest'
def path(imagename):
first = "/ec2-image-builder/"
last = "/latest"
result = first + imagename + last
return result
parameter_name = path(image_name)
logger.info('image_name: {}'.format(image_name))
logger.info('ssm_parameter_name: {}'.format(parameter_name))
# update the SSM parameter if the image state is available
if (image_state == 'AVAILABLE'):
logger.info('Image is available')
# obtain ami id
ami = message_json['outputResources']['amis'][0]
recipe_name = message_json['name']
logger.info('AMI ID: {}'.format(ami['image']))
# update SSM parameter
response = ssm_client.put_parameter(
#Name=parameter_name,
Name='/ec2-image-builder/linux/latest', 
Description='Latest AMI ID',
Value=ami['image'],
Type='String',
Overwrite=True,
Tier='Standard'
)
logger.info('SSM Updated: {}'.format(response))

# add tags to the SSM parameter
ssm_client.add_tags_to_resource(
ResourceType='Parameter',
ResourceId=ssm_parameter_namee,
Tags=[
     {
'Key': 'Source',
'Value': 'EC2 Image Builder'
},
{
'Key': 'AMI_REGION',
'Value': ami['region']
 },
 {
'Key': 'AMI_ID',
'Value': ami['image']
 },
 {
'Key': 'AMI_NAME',
'Value': ami['name']
 },
 {
'Key': 'RECIPE_NAME',
'Value': recipe_name
 },
 {
 'Key': 'SOURCE_PIPELINE_ARN',
 'Value': message_json['sourcePipelineArn']
 },
],
)

return None

Error output

Response on test:

{ "errorMessage": "name 'ssm_parameter_namee' is not defined",
"errorType": "NameError", "requestId": "54ad245c-84f3-4c46-9e9b-1798f86a8bce", "stackTrace": [ " File "/var/task/lambda_function.py", line 19, in lambda_handler\n process_sns_event(event)\n", " File "/var/task/lambda_function.py", line 71, in process_sns_event\n ResourceId=ssm_parameter_namee,\n" ] }

drum
  • 5,416
  • 7
  • 57
  • 91
  • 1
    Have you read the error message? `ssm_parameter_namee` is not defined. – drum Jul 19 '22 at 04:01
  • 1
    Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. – Community Jul 19 '22 at 12:40
  • we have created a lambda function to update the value in the AWS parameter store, we are facing this error, could the community help in this regard – user19576309 Jul 19 '22 at 15:01

1 Answers1

0

The answer is in your error ...

Typo name or namee ? Is it ssm_parameter_namee or ssm_parameter_name ?

I highly recommend using an IDE, that finger points you to such simple things :)

logger.info('ssm_parameter_name: {}'.format(parameter_name))

ResourceId=ssm_parameter_namee