F.Ko-Jiの「一秒後は未来」

Swift: AWS SDK for iOS 2.0を使ってS3にファイルをアップロード

AWS SDK for iOS 2.0 (まだ Developer Preview だが) を使って Amazon S3 にファイルをアップロードする処理を書いていたのだがなかなかうまくいかなくて、もしやと思ってバケットのリージョンを US Standard (US East 1) にしてみたら成功した。1時間以上ハマってしまった。

AWS SDK for iOS 2.0 のドキュメントでは Amazon Cognito というモバイル向けのID管理システムのようなものとあわせて利用することが推奨されていてその通りにコードを書いていたのだが、どうやら Amazon Cognito の Identity Pool がまだ US East 1 のリージョン上でしか作成できないがゆえに、 AWS SDK から提供されている AWSS3TransferManager とあわせて使うときにはリージョンを合わせないといけない。(ということだろうか?)

以下、与えられたファイルパスのファイルを S3 にアップロードするサンプルコード。言語は Swift。

※ 事前に Set Up the SDK for iOS – AWS SDK for iOS 2.0 にあるセットアップをおこなっておくこと。

(追記: 2014-11-11) SDKのバージョンアップに伴い使い方が一部変わっていたので書き直しました。
// 以下のコードは AppDelegate.swift の application:didFinishLaunchingWithOptions に書く

let credentialsProvider = AWSCognitoCredentialsProvider.credentialsWithRegionType(
    .USEast1,
    accountId: "your account id",
    identityPoolId: "your identity pool id",
    unauthRoleArn: "unauth role arn",
    authRoleArn: "auth role arn"
)

let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
    AWSServiceManager.defaultServiceManager().setDefaultServiceConfiguration(configuration)
func uploadToS3(filePath: String!) {
    let transferManager = AWSS3TransferManager.defaultS3TransferManager()

    var uploadRequest = AWSS3TransferManagerUploadRequest()

    uploadRequest.bucket = "your bucket name"
    uploadRequest.key = "your file name"
    uploadRequest.body = NSURL.fileURLWithPath(filePath)
    uploadRequest.ACL = .PublicRead

    transferManager.upload(uploadRequest).continueWithExecutor(
        BFExecutor.mainThreadExecutor(),
        withBlock: { (task: BFTask!) in
            if task.error() == nil {
                // アップロード成功時の処理
            } else {
                // エラー時の処理
            }
            return nil
        }
    )
}

なお Amazon Cognito で Identity Pool を作成する際に専用の IAM Role を作ることになるので、IAM のコンソール画面からそのロールに対して S3 へのフルアクセス権限を与えておく必要がある。

» How to Upload Files from Your App to the Cloud – AWS SDK for iOS 2.0
» Version 2 of the AWS SDK for iOS Developer Preview – AWS Developer Blog – Mobile

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など