ネットサービスとかGoogleとか豆知識とか。

Index > プログラミング > iPhoneアプリ開発 > Swift: AWS SDK for iOS 2.0を使ってS3にファイルをアップロード
iPhoneアプリ開発
2014年08月18日 20:35

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

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

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