この記事は公開されてから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;
}];
}
解説
- まず、認証情報を保持する
AWSStaticCredentialsProvider
をアクセスキーとシークレットキーを指定して生成します。 - リージョンと生成した
AWSStaticCredentialsProvider
を指定してAWSServiceConfiguration
を生成します。今回はリージョンがap-northeast-1なのでAWSRegionAPNortheast1
を指定します。 AWSServiceManager
のdefaultServiceConfiguration
に生成したAWSServiceConfiguration
を設定します。[AWSCloudWatch defaultCloudWatch]
でAWSCloudWatchオブジェクトを取得します。AWSCloudWatchがカスタムメトリクスをパブリッシュするクラスです。- ネームスペース、メトリック名、メトリック値などパブリッシュしたい内容を設定します。
- 最後に
putMetricData:
でパブリッシュします。
AWSCloudWatchPutMetricDataInputを親としたメトリクスのモデルクラスは下記の図のような関係となります。 ※今回パブリッシュ対象のプロパティのみ記載しています。
まとめ
今回はiOSからCloudWatchのカスタムメトリクスをパブリッシュする例をご紹介しました。
AWS CLIのコマンドをほぼそのままObjective-Cに書き換える形で実装できました。
また、今回認証部分はAWSStaticCredentialsProvider
を使いましたが、AWSCognitoCredentialsProvider
というクラスを使えば
Cognitoを利用して認証を行うことができるようです。