C
C
EC2 Check Instance Status
See more Amazon EC2 Examples
Demonstrates how to send a request to check the status of Amazon EC2 instances.Chilkat C Downloads
#include <C_CkRest.h>
#include <C_CkAuthAws.h>
#include <C_CkXml.h>
void ChilkatSample(void)
{
BOOL success;
HCkRest rest;
BOOL bTls;
int port;
BOOL bAutoReconnect;
HCkAuthAws authAws;
const char *responseXml;
HCkXml xml;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
rest = CkRest_Create();
// Connect to the Amazon AWS server.
// such as https://ec2.amazonaws.com/
bTls = TRUE;
port = 443;
bAutoReconnect = TRUE;
success = CkRest_Connect(rest,"ec2.us-west-2.amazonaws.com",port,bTls,bAutoReconnect);
// Provide AWS credentials for the REST call.
authAws = CkAuthAws_Create();
CkAuthAws_putAccessKey(authAws,"AWS_ACCESS_KEY");
CkAuthAws_putSecretKey(authAws,"AWS_SECRET_KEY");
// the region should match the region part of the domain passed to the REST connect method (above).
CkAuthAws_putRegion(authAws,"us-west-2");
CkAuthAws_putServiceName(authAws,"ec2");
CkRest_SetAuthAws(rest,authAws);
CkRest_AddQueryParam(rest,"Action","DescribeInstanceStatus");
CkRest_AddQueryParam(rest,"Version","2016-11-15");
CkRest_AddQueryParam(rest,"InstanceId.1","i-999719995399c9999");
// If you have additional instances to check, then add them with .2, .3, etc.
CkRest_AddQueryParam(rest,"InstanceId.2","i-999719995399c0000");
CkRest_AddQueryParam(rest,"InstanceId.3","i-999719995399c0111");
// ...
// Instead of checking specific instances, you can check all instances by
// sending the IncludeAllInstances param
CkRest_AddQueryParam(rest,"IncludeAllInstances","true");
responseXml = CkRest_fullRequestNoBody(rest,"GET","/");
if (CkRest_getLastMethodSuccess(rest) != TRUE) {
printf("%s\n",CkRest_lastErrorText(rest));
CkRest_Dispose(rest);
CkAuthAws_Dispose(authAws);
return;
}
// A successful response will have a status code equal to 200.
if (CkRest_getResponseStatusCode(rest) != 200) {
printf("response status code = %d\n",CkRest_getResponseStatusCode(rest));
printf("response status text = %s\n",CkRest_responseStatusText(rest));
printf("response header: %s\n",CkRest_responseHeader(rest));
printf("response body: %s\n",responseXml);
CkRest_Dispose(rest);
CkAuthAws_Dispose(authAws);
return;
}
// Examine the successful XML response.
xml = CkXml_Create();
CkXml_LoadXml(xml,responseXml);
printf("%s\n",CkXml_getXml(xml));
// Here is a sample response:
// Use this online tool to generate parsing code from sample XML:
// Generate Parsing Code from XML
// <DescribeInstanceStatusResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
// <requestId>3be1508e-c444-4fef-89cc-0b1223c4f02fEXAMPLE</requestId>
// <instanceStatusSet>
// <item>
// <instanceId>i-1234567890abcdef0</instanceId>
// <availabilityZone>us-east-1d</availabilityZone>
// <instanceState>
// <code>16</code>
// <name>running</name>
// </instanceState>
// <systemStatus>
// <status>impaired</status>
// <details>
// <item>
// <name>reachability</name>
// <status>failed</status>
// <impairedSince>YYYY-MM-DDTHH:MM:SS.000Z</impairedSince>
// </item>
// </details>
// </systemStatus>
// <instanceStatus>
// <status>impaired</status>
// <details>
// <item>
// <name>reachability</name>
// <status>failed</status>
// <impairedSince>YYYY-MM-DDTHH:MM:SS.000Z</impairedSince>
// </item>
// </details>
// </instanceStatus>
// <eventsSet>
// <item>
// <code>instance-retirement</code>
// <description>The instance is running on degraded hardware</description>
// <notBefore>YYYY-MM-DDTHH:MM:SS+0000</notBefore>
// <notAfter>YYYY-MM-DDTHH:MM:SS+0000</notAfter>
// </item>
// </eventsSet>
// </item>
// <item>
// <instanceId>i-0598c7d356eba48d7</instanceId>
// <availabilityZone>us-east-1d</availabilityZone>
// <instanceState>
// <code>16</code>
// <name>running</name>
// </instanceState>
// <systemStatus>
// <status>ok</status>
// <details>
// <item>
// <name>reachability</name>
// <status>passed</status>
// </item>
// </details>
// </systemStatus>
// <instanceStatus>
// <status>ok</status>
// <details>
// <item>
// <name>reachability</name>
// <status>passed</status>
// </item>
// </details>
// </instanceStatus>
// <eventsSet>
// <item>
// <code>instance-reboot</code>
// <description>The instance is scheduled for a reboot</description>
// <notBefore>YYYY-MM-DDTHH:MM:SS+0000</notBefore>
// <notAfter>YYYY-MM-DDTHH:MM:SS+0000</notAfter>
// </item>
// </eventsSet>
// </item>
// <item>
// <instanceId>i-0987654321abcdef0</instanceId>
// <availabilityZone>us-east-1d</availabilityZone>
// <instanceState>
// <code>16</code>
// <name>running</name>
// </instanceState>
// <systemStatus>
// <status>ok</status>
// <details>
// <item>
// <name>reachability</name>
// <status>passed</status>
// </item>
// </details>
// </systemStatus>
// <instanceStatus>
// <status>ok</status>
// <details>
// <item>
// <name>reachability</name>
// <status>passed</status>
// </item>
// </details>
// </instanceStatus>
// </item>
// <item>
// <instanceId>i-0598c7d356eba48d8</instanceId>
// <availabilityZone>us-east-1d</availabilityZone>
// <instanceState>
// <code>16</code>
// <name>running</name>
// </instanceState>
// <systemStatus>
// <status>ok</status>
// <details>
// <item>
// <name>reachability</name>
// <status>passed</status>
// </item>
// </details>
// </systemStatus>
// <instanceStatus>
// <status>insufficient-data</status>
// <details>
// <item>
// <name>reachability</name>
// <status>insufficient-data</status>
// </item>
// </details>
// </instanceStatus>
// </item>
// </instanceStatusSet>
// </DescribeInstanceStatusResponse>
CkRest_Dispose(rest);
CkAuthAws_Dispose(authAws);
CkXml_Dispose(xml);
}