+3

Amazon Simple Storage Service (S3) Trong Android

  1. Amazon S3 là gì

    Amazon Simple Storage Service (S3) cung cấp một kho dữ liệu ổn định, bền vững và có khả năng mở rộng cao trên cloud. Sử dụng AWS Moblie SDK,, bạn có thể truy cập trực tiếp vào Amazon S3 từ ứng dụng. Mục đích của tôi khi nghiên cứu bài này là upload một đối tượng (một file) lên S3 và download file về.

    AWS Mobile SDK cho phép bạn sử dụng S3 service trong ứng dụng mobile thông qua S3 Transfer Utility, thay thế cho S3 Tranfer Manager của AWS Mobile SDK trên Android v 2.2.4.

  2. Setup SDK

    Trước khi sử dụng được Amazon S3, bạn phải cài đặt AWS Moblie SDK.

    2.1 Điều kiện tiên quyết

    • Có một AWS Account
    • Android 2.3.3 (API 10) trở lên
    • Android Studio hoặc Android Development Tools cho Eclipse 2.2 Các bước cài đặtđặt

    Bước 1: Lấy AWS Moblie SDK cho Android

    Cách 1: Sử dụng Gradle với Android Studio

    Nếu bạn đang sử dụng Andoroid Studio, thêm aws-android-sdk-core and aws-android-sdk-cognito vào trong file app/build.gradle, cùng với các dependencies cho các service riêng biệt bạn có thể dùng, ví dụ như:

    dependencies {
       compile 'com.amazonaws:aws-android-sdk-core:2.+'
       compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
       compile 'com.amazonaws:aws-android-sdk-s3:2.+'
       compile 'com.amazonaws:aws-android-sdk-ddb:2.+'
    }
Cách 2: Import file JAR

Down load file JAR tại địa chỉ http://aws.amazon.com/mobile/sdk. Add file JAR vào trong libs của bạn.

Cách 3: Sử dụng Maven

AWS Mobile SDK cho Android hỗ trợ Apache Maven, một trình quản lý dependency và là công cụ tự động build. Một Maven project chứ một file pom.xml nơi bạn xác đinh Amazon Web Service mà bạn dùng trong app. Maven chứ service trong project, vì thế bạn không cần download toàn bộ AWS Mobile SDK hay xử lý file JAR.

Maven hỗ trợ cho AWS Mobile SDK từ Android v 2.1.3 trở lên.

Ví dụ về file pom.xml:
    <dependencies>
        <dependency>
            <groupid>com.amazonaws</groupid>
            <artifactid>aws-android-sdk-core</artifactid>
            <version>[2.2.0, 2.3)</version>
        </dependency>
        <dependency>
            <groupid>com.amazonaws</groupid>
            <artifactid>aws-android-sdk-cognito</artifactid>
            <version>[2.2.0, 2.3)</version>
        </dependency>
        <dependency>
            <groupid>com.amazonaws</groupid>
            <artifactid>aws-android-sdk-mobileanalytics</artifactid>
            <version>[2.2.0, 2.3)</version>
        </dependency>
    </dependencies>
Bước 2: Set Permission trong Manifest:
    <uses-permission android:name="android.permission.INTERNET" />
Bước 3: Lấy AWS Credential

Để sử dung AWS service, bạn phải lấy được AWS Credential sử dụng Amazon Cognito Identity. Sử dụng một creential provider cho phép ứng dụng của bạn truy cập vào AWS service mà không phải nhúng private credential vào trong app. Nó cũng cho phép bạn sét quyền để điều khiển AWS service khi có người dùng truy tập vào.

Để bắt đầu với Amazon Cognito, bạn phải tạo một identity pool, là một store của uer ID data xác định đến account của bạn.

Các bước tạo identity pool cho app:

- Log in vào Amazon Cognito Console: https://console.aws.amazon.com/cognito/home và bấm vào Create new identity pool
- Chọn name và check vào checkbox để enable access to unauthenticated identities. Click Create Pool.
- Click Allow để tạo 2 role mặc định với identity pool của bạn, 1 cho unauthenticated user và một cho authenticated user.

Trang tiếp theo hiển thị code tạo ra credential provider mà bạn có thể dễ dàng tích hợp trong app. Một credential provider giống như thế này:
    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
        getApplicationContext(),    /* get the context for the application */
        "COGNITO_IDENTITY_POOL",    /* Identity Pool ID */
        Regions.MY_REGION           /* Region for your identity pool--US_EAST_1 or EU_WEST_1*/
    );
  1. Sử dụng Amazon S3 trong Project

    Amazon S3 tích trữ app resource trong các bucket.

    3.1 Tạo một Bucket

    Đăng nhập vào S3 Console https://www.amazon.com/s3 và click Create Bucket

    Enter bucket name, chọn region, và click Create.

    3.2 Cấp quyền truy cập cho S3 Resource

    • Điều hướng vào https://console.aws.amazon.com/iam/home vào click Roles ở bên trái
    • Điền tên identity pool vào search box. 2 roles sẽ được list: một cho unauthenticated users và một cho authenticated users.
    • Click vào role cho unauthenticated user.
    • Click Create Role Policy, chọn Policy Generator, và click Select.
    • Điền các thông tin giống như sau:

    Screen Shot 2016-02-19 at 1.57.56 PM.png

    • CLick Add Statement sau đó Next Step
    • Sau đó click Apply Policy.

    3.3 Config Environment

    Khai báo Service trong Manifest

    <service
      android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
      android:enabled="true" />
Sinh ra một S3 Client
    // Create an S3 client
    AmazonS3 s3 = new AmazonS3Client(credentialsProvider);

    // Set the region of your S3 bucket
    s3.setRegion(Region.getRegion(Regions.MY_BUCKET_REGION));
Sinh ra một TranferUtility
    TransferUtility transferUtility = new TransferUtility(s3, APPLICATION_CONTEXT);
3.4 Upload một Object lên S3
    TransferObserver observer = transferUtility.upload(
      MY_BUCKET,     /* The bucket to upload to */
      OBJECT_KEY,    /* The key for the uploaded object */
      MY_FILE        /* The file where the data to upload exists */
    );
3.5 Download một Object từ S3
    TransferObserver observer = transferUtility.download(
      MY_BUCKET,     /* The bucket to download from */
      OBJECT_KEY,    /* The key for the object to download */
      MY_FILE        /* The file to download the object to */
    );

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí