Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,556,542
Community Members
 
Community Events
184
Community Groups

Opsgenie python sdk integration with AWS Lambda failed to create alert

Hello everyone,

I am trying to create alerts from AWS Lambda using python SDK. When I execute the script from my PC or AWS EC2, it works fine and takes ~10 seconds (business logic + fetching data from others resources) to create all the alerts in Opsgenie. Now, when I try to execute it from AWS Lambda, the `create_alert` API times out.  Below is the code that works in EC2 scripts but not in AWS Lambda.

try:
body = CreateAlertPayload(
message=message,
alias=message,
responders=[{
'name': 'My Team',
'type': 'team'
}],
tags=tags,
priority=priority
)
create_response = alert_api.create_alert(create_alert_payload=body)
print(f'offline device: {device}, request: {create_response.request_id}')
except ApiException as err:
print(f"Exception when calling AlertApi->create_alert: {err}\n")

 Is there something that I missed? 

3 answers

1 vote
Samir
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
Jun 24, 2021

Hi @Ahmad Al-Sajid ,

 

This seems to be more of a lambda specific issue. The one thing I can think of, is you need to have installed the opsgenie-sdk. So you will need to install the opsgenie-sdk locally (i.e. pip install opsgenie-sdk), and upload that to the lambda function dependencies so that the lambda function can use the SDK.

 

If you've done that already, are any of the opsgenie-sdk commands working from python? 

 

Thanks,

Samir

Hi @Ahmad Al-Sajid 

could you please tell how did you solve this problem ?

Hi @Reham Adel, we had to turn off SSL verification to make it work then. Still, it is not recommended. 

Like Reham Adel likes this

How did you turn off SSL verification?

Like Reham Adel likes this

thank you for your support 

Hi @Ahmad Al-Sajid
i try to run code to create alarm in aws lambda but i get that error 

"errorMessage": "You are not authorized to perform this action: (401)\nReason: Unauthorized: apiKey is invalid or integration is disabled\nHTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Content-Length': '98', 'Connection': 'keep-alive', 'Date': 'Sun, 05 Dec 2021 21:11:20 GMT', 'X-Request-Id': 'b67d7a41-5be4-4eb3-b869-945e1330a85e', 'X-Response-Time': '0.0', 'Og-Apigw-Request-Id': 'fa4076ab-2eef-4c40-8ea9-88b7240ec1ac', 'X-Envoy-Upstream-Service-Time': '129', 'Expect-Ct': 'report-uri=\"https://web-security-reports.services.atlassian.com/expect-ct-report/opsgenie-edge-proxy\", max-age=86400', 'Strict-Transport-Security': 'max-age=63072000; preload', 'X-Content-Type-Options': 'nosniff', 'X-Xss-Protection': '1; mode=block', 'Atl-Traceid': 'a7cbcab36b582704', 'Report-To': '{\"group\": \"endpoint-1\", \"max_age\": 600, \"endpoints\": [{\"url\": \"https://dj9s4kmieytgz.cloudfront.net\"}], \"include_subdomains\": true}', 'Nel': '{\"report_to\": \"endpoint-1\", \"max_age\": 600, \"include_subdomains\": true, \"failure_fraction\": 0.001}', 'Server': 'globaledge-envoy', 'X-Cache': 'Error from cloudfront', 'Via': '1.1 591fc133cda27edbedf7edb3f0231464.cloudfront.net (CloudFront)', 'X-Amz-Cf-Pop': 'LHR61-C1', 'X-Amz-Cf-Id': '2s6GACkFGfI4DZHtQNXxTL_VAz3o4mjnXhJzji4RUL9LuORAIsO6AA=='})\nHTTP response body: {\"message\": \"Could not authenticate\", \"took\": 0.0, \"requestId\": \"b67d7a41-5be4-4eb3-b869-945e1330a85e\", \"url\": \"https://api.opsgenie.com/v2/alerts\"}\n",

the part of authorization in the code

configuration = opsgenie_sdk.Configuration()
# Configure API key authorization: GenieKey
#configuration.api_key['Authorization'] = 'xxxxx'
configuration.username = 'xxxxx'
configuration.password = 'xxxxx'
configuration.verify_ssl = 'False'
conf = opsgenie_sdk.configuration.Configuration()
api_instance = opsgenie_sdk.AccountApi(opsgenie_sdk.ApiClient(configuration))
api_client = opsgenie_sdk.api_client.ApiClient(configuration=conf)
alert_api = opsgenie_sdk.AlertApi(api_client=api_client) 

could you help me please?
  

Hi @Samir,
Thanks for your feedback. Strange thing is, it sometimes can connect to Opsgenie and create tickets, but, most of the times failing to connect and exits with the following error 

 

[ERROR] RetryError: RetryError[<Future at 0x7fc1a71bf610 state=finished raised NewConnectionError>]
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 108, in lambda_handler
    create_response = alert_api.create_alert(create_alert_payload=body)
  File "/opt/python/opsgenie_sdk/api/alert/__init__.py", line 1136, in create_alert
    (data) = self.create_alert_with_http_info(create_alert_payload, **kwargs) # noqa: E501
  File "/opt/python/opsgenie_sdk/api/alert/__init__.py", line 1197, in create_alert_with_http_info
    return self.api_client.call_api(
  File "/opt/python/opsgenie_sdk/api_client.py", line 423, in call_api
    return self.__call_api(resource_path, method,
  File "/opt/python/opsgenie_sdk/api_client.py", line 218, in __call_api
    raise exception
  File "/opt/python/opsgenie_sdk/api_client.py", line 196, in __call_api
    response_data = self.retrying(fn=self.request, method=method, url=url,
  File "/opt/python/tenacity/__init__.py", line 430, in __call__
    do = self.iter(retry_state=retry_state)
  File "/opt/python/tenacity/__init__.py", line 379, in iter
    six.raise_from(retry_exc, fut.exception())
  File "<string>", line 3, in raise_from 



As it can connect to Opsgenie sometimes, I don't think it's an issue with the Lambda or the package installed in lambda. BTW, I'm using opsgenie-sdk==2.1.4

Thanks.  

Suggest an answer

Log in or Sign up to answer
DEPLOYMENT TYPE
CLOUD
TAGS
AUG Leaders

Atlassian Community Events