Sample code for 30+ languages & platforms
Objective-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 Objective-C Downloads

Objective-C
#import <CkoRest.h>
#import <CkoAuthAws.h>
#import <NSString.h>
#import <CkoXml.h>

BOOL success = NO;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

CkoRest *rest = [[CkoRest alloc] init];

//  Connect to the Amazon AWS server.
//  such as https://ec2.amazonaws.com/
BOOL bTls = YES;
int port = 443;
BOOL bAutoReconnect = YES;
success = [rest Connect: @"ec2.us-west-2.amazonaws.com" port: [NSNumber numberWithInt: port] tls: bTls autoReconnect: bAutoReconnect];

//  Provide AWS credentials for the REST call.
CkoAuthAws *authAws = [[CkoAuthAws alloc] init];
authAws.AccessKey = @"AWS_ACCESS_KEY";
authAws.SecretKey = @"AWS_SECRET_KEY";
//  the region should match the region part of the domain passed to the REST connect method (above).
authAws.Region = @"us-west-2";
authAws.ServiceName = @"ec2";

[rest SetAuthAws: authAws];

[rest AddQueryParam: @"Action" value: @"DescribeInstanceStatus"];
[rest AddQueryParam: @"Version" value: @"2016-11-15"];

[rest AddQueryParam: @"InstanceId.1" value: @"i-999719995399c9999"];
//  If you have additional instances to check, then add them with .2, .3, etc.
[rest AddQueryParam: @"InstanceId.2" value: @"i-999719995399c0000"];
[rest AddQueryParam: @"InstanceId.3" value: @"i-999719995399c0111"];
//  ...

//  Instead of checking specific instances, you can check all instances by 
//  sending the IncludeAllInstances param
[rest AddQueryParam: @"IncludeAllInstances" value: @"true"];

NSString *responseXml = [rest FullRequestNoBody: @"GET" uriPath: @"/"];
if (rest.LastMethodSuccess != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

//  A successful response will have a status code equal to 200.
if ([rest.ResponseStatusCode intValue] != 200) {
    NSLog(@"%@%d",@"response status code = ",[rest.ResponseStatusCode intValue]);
    NSLog(@"%@%@",@"response status text = ",rest.ResponseStatusText);
    NSLog(@"%@%@",@"response header: ",rest.ResponseHeader);
    NSLog(@"%@%@",@"response body: ",responseXml);
    return;
}

//  Examine the successful XML response.
CkoXml *xml = [[CkoXml alloc] init];
[xml LoadXml: responseXml];
NSLog(@"%@",[xml GetXml]);

//  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>