[AWS SDK for iOS] iOSアプリからCloudWatchのカスタムメトリクスをパブリッシュする

2015.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは!加藤です。今回はAWS SDK for iOSを使用してiOSアプリから CloudWatchのカスタムメトリクスをパブリッシュしてみたので方法を共有したいと思います。

開発環境

  • Xcode 7.1.1
  • CocoaPods 0.39.0
  • AWS SDK for iOS 2.3.1

やりたいこと

今回は以下のようなAWS CLIでカスタムメトリクスをパブリッシュする場合を考えます。 aws cloudwatch put-metric-data --namespace XXX/YYY --metric-name TestMetric --dimensions TestId=12345 --unit Count --value 1 --region ap-northeast-1

これをiOSでやってみようと思います。 今回のCloudWatchの認証はアクセスキーとシークレットキーによるものとします。

準備(AWSCloudWatchをインストール)

まずはPodfileに下記を記載します。
pod 'AWSCloudWatch'

そしていつものようにpod installでインストールします。 これでAWSCloudWatchと、依存関係にあるAWSCoreがインストールされます。 現時点で最新のバージョン2.3.1がインストールされました。

コーディング

AWS SDKの準備が出来たのでiOSアプリのコードを書きます。 まず最初にコードの全体を示します。

- (void)publishCustomMetrics
{
    NSString *accessKey = @"YOUR_ACCESS_KEY"; // アクセスキー
    NSString *secretKey = @"YOUR_SECRETKEY";  // シークレットキー
    
    AWSStaticCredentialsProvider *credentialsProvider = [[AWSStaticCredentialsProvider alloc] initWithAccessKey:accessKey secretKey:secretKey];
    AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionAPNortheast1 credentialsProvider:credentialsProvider];
    [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
    
    AWSCloudWatch *cloudWatch = [AWSCloudWatch defaultCloudWatch];
    
    AWSCloudWatchMetricDatum *metricDatum = [[AWSCloudWatchMetricDatum alloc] init];
    metricDatum.metricName = @"TestMetric";
    AWSCloudWatchDimension *dimension = [[AWSCloudWatchDimension alloc] init];
    dimension.name = @"TestId";
    dimension.value = @"12345";
    metricDatum.dimensions = @[dimension];
    metricDatum.unit = AWSCloudWatchStandardUnitCount; // メトリックの単位
    metricDatum.value = @(1); // メトリックの値
    AWSCloudWatchPutMetricDataInput *input = [[AWSCloudWatchPutMetricDataInput alloc] init];
    input.namespace = @"XXX/YYY";
    input.metricData = @[metricDatum];
    
    AWSTask *task = [cloudWatch putMetricData:input];
    [task continueWithBlock:^id(AWSTask *task) {
        NSLog(@"publishCustomMetrics result:%@", task.result);
        return nil;
    }];
}

解説

  1. まず、認証情報を保持するAWSStaticCredentialsProviderをアクセスキーとシークレットキーを指定して生成します。
  2. リージョンと生成したAWSStaticCredentialsProviderを指定してAWSServiceConfigurationを生成します。今回はリージョンがap-northeast-1なのでAWSRegionAPNortheast1を指定します。
  3. AWSServiceManagerdefaultServiceConfigurationに生成したAWSServiceConfigurationを設定します。
  4. [AWSCloudWatch defaultCloudWatch]でAWSCloudWatchオブジェクトを取得します。AWSCloudWatchがカスタムメトリクスをパブリッシュするクラスです。
  5. ネームスペース、メトリック名、メトリック値などパブリッシュしたい内容を設定します。
  6. 最後にputMetricData:でパブリッシュします。

AWSCloudWatchPutMetricDataInputを親としたメトリクスのモデルクラスは下記の図のような関係となります。 ※今回パブリッシュ対象のプロパティのみ記載しています。

awscloudwatchputmetricdatainput

まとめ

今回はiOSからCloudWatchのカスタムメトリクスをパブリッシュする例をご紹介しました。 AWS CLIのコマンドをほぼそのままObjective-Cに書き換える形で実装できました。 また、今回認証部分はAWSStaticCredentialsProviderを使いましたが、AWSCognitoCredentialsProviderというクラスを使えば Cognitoを利用して認証を行うことができるようです。