[AWSxiOSでMBaaS] AWS を MBaaS として使ってみる – まずは AWS SDK for iOS を触ってみる

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

モバイル系のエンジニアが MBaaS に求めるもの

さて、突然ですが、モバイル系のエンジニアが MBaaS(Mobile Backend as a Service) に求めるものってなんでしょう?

僕が思いつく範囲では、

  • 共有データストア
  • アクセス制御
  • 通知

あたりですが、この辺の機能が簡単に使えることじゃないでしょうか?

この辺のことをやろうとすると、モバイル、というかいわいるクライアントサイドの技術だけじゃ実現できず、どうしてもサーバーサイドの技術が必要になってきます。アクセス制御あたりがいい例で、実現しようとするとサーバーサイドの技術が必要になってしまいます。

僕は、今は iOS アプリのエンジニアですので、ぶっちゃけた話、このへんのあっち側の話に関しては「なんでもいいからよろしくやって〜」って感じになります。もっと言うと「早くやって〜」とか「簡単にして〜」とか無責任ですが、そう思ってしまいます。

僕の場合は元々 PHP エンジニアだったので、サーバーサイドのことを考えることにそこまで抵抗はないですが、ほんとにフロントに特化してやってきた人なんかは尚更そんな風に感じるんじゃないかと思います。

とは言っても、モバイルアプリを作るとなると、あっち側の技術が必要になることって多いですよね。このあっち側のことを、いとも簡単に、よろしくやってくれることを僕たちは MBaaS と呼ばれるものに求めているんだと思います。

ご存知の通り、MBaaS と呼ばれるサービスは既にいくつか存在してます。僕も含めた弊社モバイル系のエンジニアに人気の Parse.com なんかはその1つです。他のものは使ったことが僕自身はないのでなんとも言えませんが、Parse.com が提供する MBaaS の機能はとても使いやすく、そしてわかりやすいです。

こうした MBaaS としての機能を提供するサービスは今後も増えてくるんじゃないかと思います。

AWS を MBaaS として使う

このように、これからたくさんの選択肢が登場するであろう MBaaS ですが、AWS もその選択肢の1つです。AWS、と言うとかなり範囲が広くなりますが、ことMBaaSとして使うために、以下の5つのサービスが重要になると思います。

  • DynamoDB
  • S3
  • IAM
  • SNS
  • SQS

きっとこの5つを理解すれば、AWS を MBaaS として有効に使うことができるのでないかと思っています(まぁ他にもあると思いますが)。

たぶん、皆さんもそうだと思いますが、AWS SDK はその可能性を秘めているのはわっているけど、我々モバイル系エンジニアからはどうしてもとっつきにくいというのが正直なところだったのではないでしょうか?

AWS SDK をダウンロードしてみれば分かりますが、EC2 や ELB を操作できたりとか、あまりにもたくさんのことができてしまうため、どうしても敷居が高く感じていました。

しかし、幸いなことに、弊社のには非常に優秀な AWS エンジニアの方々がたくさんいます。そして、その中のこれまた優秀な方のお告げにより、今回はやる気になった次第です!

ということで、前置きが長くなりましたが、AWS SDK を MBaaS としてどこまで使えるかを本記事から検証していきたいと思います。

尚、僕は iOS エンジニアですので、iOS の話しかできませんが、反響があればきっと弊社の Android エンジニアがやってくれるはずです。

とりあえず AWS SDK を使ってみる

さて、早速ですが、とりあえず AWS SDK を使ってみましょう。

今回は「iOS アプリから S3 にある特定のバケットのオブジェクト一覧を出力する」だけの簡単なサンプルアプリを作ります。 また、今回は SDK の動作を確認することを目的とするので、とりあえず IAM ユーザーのアクセスキー ID とシークレットアクセスキーで認証を行います。(認証に関しては次回紹介します)

また、AWS SDK を利用するには、AWS アカウントを作成しておく必要があります。持っていない方は、こちらでアカウントを作成しましょう。

アクセスキー ID とシークレットアクセスキーを取得する

今回は IAM ユーザーのアクセスキー IDシークレットアクセスキーで認証を行いますので、これらを取得します。 アクセスキーを作成していない場合は、以下の手順で作成する必要があります。

IAM Management Console を開き、 ナビゲーションメニューから「Users」をクリックして、使用する IAM ユーザーをクリックします。

ios-aws-mbaas-1-1

「User Actions」をクリックしてメニューを開き、「Manage Access Keys」をクリックします。

ios-aws-mbaas-1-2

以下のモーダルウィンドウが表示されるので、「Create Access Key」をクリックします。

ios-aws-mbaas-1-3

「Download Credentials」をクリックすると、credentials.csv がダウンロードされます。ここに アクセスキー IDシークレットアクセスキー があるので、大切に保管しましょう。

ios-aws-mbaas-1-4

S3 にバケットを作成する

サンプルアプリから参照するためのバケットを作っておきましょう。ここでは、ios-s3-sample という名前のバケットを作成します。

ios-aws-mbaas-1-5

バケットを作成したら、適当にファイルを追加しておきましょう。

ios-aws-mbaas-1-6

AWS SDK for iOS をダウンロードする

AWS SDK for iOS | アマゾン ウェブ サービス(AWS 日本語)から AWS SDK for iOS をダウンロードしましょう(執筆時点では aws-ios-sdk-1.7.1.zip がダウンロードできるはずです)。

ios-aws-mbaas-1-7

AWS SDK for iOSは、AWSiOSSDK という名前で CocoaPods で提供されていますが、そのままではちゃんと動かなかったこと、必要のない機能(EC2 や ELB を操作するやつとか)が含まれてしまうことから、今回は直接ダウンロードする方法にします。

解凍すると、たぶんこんな↓感じになってるかと思います。

ios-aws-mbaas-1-8

Xcode プロジェクトを作成する

Single View Application を選択して Xcode プロジェクトを作成しましょう。 以下のように Xcode プロジェクトを作成してください(Xcodeは5.1.1です)。

ios-aws-mbaas-1-9

フレームワークを追加する

AWS SDK for iOS に含まれる以下のフレームワークを追加しましょう。

  • AWSRuntime.framework
  • AWSS3.framework

AWSS3.framework は言うまでもなく S3 に関する機能を提供するフレームワークです。AWSRuntime.framework は AWS SDK のベースとなるプラットフォームが含まれており、すべての AWS サービスのフレームワークがこのフレームワークに依存します。

ios-aws-mbaas-1-10

サンプルコードを記述する

早速サンプルコードを記述してみましょう。今回はあくまで AWS SDK の動作のサンプルですので、AppDelegate.m- に、一覧の取得からログ出力まで書いてしまいます。

#import "AppDelegate.h"

#import <AWSRuntime/AWSRuntime.h>
#import <AWSS3/AWSS3.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // アクセスキーIDとシークレットアクセスキーを指定してS3クライアントインスタンスを生成する
    AmazonS3Client *s3Client = [[AmazonS3Client alloc] initWithAccessKey:@"[アクセスキーID]"
                                                           withSecretKey:@"[シークレットアクセスキー]"];

    // 指定したバケットのオブジェクトの一覧を取得するためのリクエストインスタンスを生成する
    S3ListObjectsRequest *request = [[S3ListObjectsRequest alloc] initWithName:@"ios-s3-sample"];
    // リクエストを実行してレスポンスを取得する
    S3ListObjectsResponse *response = [s3Client listObjects:request];

    if (response.error) {
        NSLog(@"error: %@", response.error);
    } else {
        // エラーでなければオブジェクト一覧をログに出力する
        for (NSString *objectSummary in response.listObjectsResult.objectSummaries) {
            NSLog(@"%@", objectSummary);
        }
    }

    return YES;
}

@end

実行してみる

以下のようにログが出力されれば、とりえず動作の確認は終了です。

ios-aws-mbaas-1-11

まとめ

今回は、とりあえず AWS SDK を使用する最初の一歩を書きました。これだけでは当然つまらないですよね。 また、今回のサンプルアプリでは認証に アクセスキーID と シークレットアクセスキーを使用しましたが、当然セキュリティ的にNGですので、これだと MBaaS として使えるものにはなりません。

ということで、次回は認証まわりについて書きたいと思います。