すべてのプロダクト
Search
ドキュメントセンター

:モバイルアプリからSimple Log serviceにログをアップロードするサービスを構築する

最終更新日:Aug 23, 2024

モバイルアプリは、モバイルインターネット技術の急速な発展に基づいてデータをアップロードするために使用されます。 モバイルアプリのログをSimple Log Serviceにアップロードするには、アプリのサーバーを介してログを転送する必要はありません。 以下のセクションでは、このタイプのアップロードサービスを直接データ転送と呼びます。 このトピックでは、モバイルアプリのログをSimple Log serviceにアップロードする直接データ転送サービスを構築する方法について説明します。

背景情報

プロキシベースのデータ転送

image

従来のプロキシベースのデータ転送ソリューションでは、モバイルデバイスからアップロードされたログを処理するためのトランジットステーションとしてアプリサーバーが使用されます。 モバイルアプリからのログの数が多い場合、またはモバイルデバイスの数が急速に増加する場合、単一のアプリサーバーの使用がデータアップロードのボトルネックになる可能性があります。

直接データ転送

AccessKeyペアをモバイルアプリのコードに書き込み、コードに基づいてモバイルアプリのログをSimple Log Serviceにアップロードできます。 これにより、AccessKeyペアが漏洩する可能性があります。 AccessKeyペアが漏洩した場合、Alibaba cloudアカウント内のクラウドサービスのセキュリティが脅かされます。 Security Token Service (STS) トークンを使用して、モバイルアプリのログに直接アクセスし、Simple Log Serviceにアップロードすることもできます。 STSトークンは、カスタム期間有効であり、必要なアクセス許可を定義します。

メリット

  • より高いアクセスセキュリティ: STSトークンを使用できます。 権限は、最小権限の原則に基づいて付与されます。

  • 低コスト: 必要なアプリサーバーの数が少ないため、サーバーのコストが削減されます。

  • 同時実行性が高い: 多数のユーザーが同時にサービスを使用できます。 より多くのアップロード帯域幅とダウンロード帯域幅がSimple Log Serviceによって提供されます。

  • 自動スケーリング: Simple Log Serviceを使用すると、制限を課すことなくストレージ容量を増やすことができます。

プロセス

image

条件

ノード

説明

AndroidアプリまたはiOSアプリ

ログを収集するユーザーのモバイルアプリ。

Simple Log Service

モバイルアプリからアップロードされたログを保存するSimple Log Service。

RAM/STS

一時的な資格情報を生成するリソースアクセス管理 (RAM) またはSTS。 RAMとSTSを使用して、ユーザーIDとリソースへのアクセスを管理できます。

アプリサーバー

一時的なアクセス資格情報を取得するために使用され、モバイルアプリからアップロードされたデータのメタデータを提供するサービス。

プロセスの説明

  1. モバイルアプリは、アプリサーバーからSTSトークンを取得する要求を送信します。

  2. アプリサーバーは、ログオンステータスや対称暗号化の結果などの実際の条件に基づいて、リクエストの有効性をチェックします。 リクエストがチェックに合格した場合、アプリサーバーは作成されたRAMユーザーのAccessKeyペアをアクセス資格情報として使用して、STSのAssumeRole操作を呼び出し、RAMユーザーが指定されたRAMロールを引き受けることを許可します。

  3. STSは、AccessKeyペアの有効性をチェックし、RAMユーザーが指定されたRAMロールを引き受ける権限を持っているかどうかを確認します。 AccessKeyペアがチェックに合格し、RAMユーザーが検証に合格した場合、STSはトークンをアプリサーバーに返します。

  4. app serverがSTSトークンを取得すると、STSトークンがモバイルアプリに返されます。

  5. モバイルアプリはSTSトークンを取得した後、STSトークンをアクセス資格情報として使用して、ログをSimple Log Serviceに直接アップロードします。

  6. Simple Log Serviceは、RAMまたはSTSを使用してSTSトークンの有効性をチェックし、指定されたRAMロールが指定されたLogstoreにアクセスする権限を持っているかどうかを確認します。 STSトークンがチェックに合格し、RAMロールが検証に合格した場合、Simple Log Serviceはモバイルアプリからのアップロード要求を処理し、アップロード結果をモバイルアプリに返します。

手順

手順1: Simple Log ServiceでプロジェクトとLogstoreを作成する

  1. Simple Log Serviceコンソールにログインします。

  2. プロジェクトを作成します。

    1. [プロジェクト] セクションで、[プロジェクトの作成] をクリックします。

    2. [プロジェクトの作成] パネルで、[リージョン][中国 (杭州)] を選択し、[プロジェクト名]slstestprojectを指定して、他のパラメーターのデフォルト設定を保持します。

    3. [作成] をクリックします。

  3. ログストアの作成

    プロジェクトの作成後、Logstoreを作成するように求められます。

    1. [プロジェクトの作成] ダイアログボックスで、[ログストアの作成] をクリックします。

    2. Logstoreの作成パネルで、Logstore名slstestlogstoreを指定します。 次に、[課金モード][シャード] を設定し、ビジネス要件に基づいて [自動シャード] を有効にするかどうかを判断します。 詳細については、「シャードの管理」をご参照ください。

    3. [OK] をクリックします。

手順2: RAMユーザーを作成し、RAMユーザーにRAMロールを引き受ける権限を付与

  1. RAM コンソール にログインします。

  2. RAM ユーザーを作成します。

    1. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。

    2. [ユーザー] ページで、[ユーザーの作成] をクリックします。

    3. [ユーザーの作成] ページで、[ログイン名]ramslsuserを指定し、[アクセスモード] セクションで [OpenAPIアクセス] を選択します。

      image.png

    4. [OK] をクリックします。

      RAMユーザーが作成されると、システムはRAMユーザーのAccessKeyペアを自動的に生成します。 AccessKeyペアを記録し、AccessKeyペアを安全に保つことを推奨します。

      説明

      RAMユーザーのAccessKeyペアを手動で作成することもできます。 詳細については、「AccessKey の作成」をご参照ください。

  3. RAMユーザーにSTSのAssumeRole操作を呼び出す権限を付与します。

    1. [ユーザー] ページで、ramslsuser RAMユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。

    2. [権限の追加] パネルで、[ポリシーの選択] セクションの [システムポリシー] をクリックします。 次に、AliyunSTSAssumeRoleAccessポリシーを見つけ、ポリシー名をクリックして、他のパラメーターのデフォルト設定を保持します。

      image.png

    3. [OK] をクリックします。

    4. [完了] をクリックします。

手順3: RAMロールを作成し、RAMロールにリソースへのアクセスを許可する

  1. RAM コンソール にログインします。

  2. RAM ロールを作成します。

    1. 左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。

    2. [ロール] ページで、[ロールの作成] をクリックします。

    3. [ロールの作成] パネルで、[信頼できるエンティティの選択] で [Alibaba Cloudアカウント] を選択し、[次へ] をクリックします。

    4. RAMロール名ramslsroleを指定し、信頼できるAlibaba Cloudアカウントの選択に現在のAlibaba Cloudアカウントを選択します。

    5. [OK] をクリックします。

    6. 閉じるをクリックします。

      RAMロールの作成後、[ロール] ページでramslsrole RAMロールを見つけ、RAMロールの名前をクリックします。 次に、RAMロールのAlibaba Cloudリソース名 (ARN) を表示および記録します。

      image.png

  3. [JSON] タブでカスタムポリシーを作成します。

    1. 左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。

    2. [ポリシー] ページで [ポリシーの作成] をクリックします。

    3. [ポリシーの作成] ページで、[JSON] タブをクリックします。

    4. 次のポリシードキュメントを入力し、[次へ] をクリックしてポリシー情報を編集します。

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "log:PostLogStoreLogs",
              "log:PutLogs"
            ],
            "Resource": "acs:log:*:*:project/slstestproject/*",
            "Effect": "Allow"
          }
        ]
      }
    5. Nameputlogspolicyを指定します。

    6. [OK] をクリックします。

  4. カスタムポリシーをRAMロールにアタッチします。

    1. 左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。

    2. [ロール] ページで、ramslsrole RAMロールを見つけ、[操作] 列の [権限の追加] をクリックします。

    3. [権限の追加] パネルで、[ポリシーの選択] セクションの [カスタムポリシー] をクリックします。 次に、putlogspolicyポリシーを見つけ、ポリシー名をクリックして、他のパラメーターのデフォルト設定を保持します。

      image.png

    4. [OK] をクリックします。

    5. [完了] をクリックします。

手順3: アプリサーバーの構築

複数のプログラミング言語のサンプルプログラムが提供されます。 PHP、Java、Ruby、およびNode.jsでプログラムをダウンロードできます。

設定ファイル

この例では、各プログラムパッケージにconfig.jsonという名前のファイルが含まれています。 このファイルには、アプリサーバーの構成情報が含まれています。 config.jsonファイルを変更して、設定を変更できます。

{
    "AccessKeyID" : "",
    "AccessKeySecret" : "",
    "RoleArn" : "",
    "TokenExpireTime" : "900",
    "PolicyFile": "policy/write_policy.txt"
}
                            

パラメーター

説明

AccessKeyID

RAM ユーザーの AccessKey ID。

AccessKeySecret

RAMユーザーのAccessKeyシークレット。

RoleArn

RAMロールのARN。

TokenExpireTime

モバイルアプリによって取得されたトークンの有効期間。

最小値: 900。 単位は秒です。 デフォルト値を保持できます。

ポリシーファイル

トークンの権限を記述するファイル。 デフォルト値を保持できます。

次のファイルは、トークンの権限を記述するために最も一般的に使用されます。 ファイルはポリシーディレクトリに保存されます。 ビジネス要件に基づいてファイルを構成することもできます。

  • write_policy.txt: トークンには、Alibaba Cloudアカウント内のプロジェクトに対する書き込み権限が付与されています。 write_policy.txtファイルを使用する場合は、ビジネス要件に基づいてファイル内のプロジェクト名を置き換えます。

  • readonly_policy.txt: トークンには、Alibaba Cloudアカウント内のプロジェクトに対する読み取り権限が付与されています。

トークンの権限は、RAMロールの権限とファイルに記載されている権限の共通部分です。 トークンの権限を記述するファイルを構成しない場合、RAMロールの権限がトークンの権限として使用されます。

サンプルコード

Java 1.7以降の場合は、プログラムパッケージをダウンロードして解凍した後にJavaプロジェクトを作成します。 必要な依存関係、コード、および設定をプロジェクトにコピーします。 次に、main関数を実行します。 デフォルトでは、プログラムはポート7080をリッスンし、HTTP要求を待ちます。 上記の操作は、別の言語のプログラムに対して実行できます。

手順5: 直接データ転送を使用してモバイルアプリからSimple Log Serviceにログをアップロード

  1. STSトークンの取得

    アプリサーバーのポート7080にアクセスするHTTPリクエストを開始し、STSトークンを取得します。 レスポンス例:

    {
      "StatusCode":"200",
      "AccessKeyId":"STS.3pdgagd****",
      "AccessKeySecret":"rpnwO9wr34tGdrddgsR2Y****",
      "SecurityToken":"CAES+wMIARKAAZhjH0EUOIhJMQBMjR****tZGVtbzI=",
      "Expiration":"2021-11-20T08:23:15Z"
    }                          
  2. モバイルアプリからSimple Log Serviceにログを直接アップロード

    次のコードは、STSトークンを使用してモバイルアプリからSimple Log Serviceにログを直接アップロードする方法の例を示しています。

    const ALY = require("aliyun-sdk");
    
    const sls = new ALY.SLS({
      accessKeyId: "Your temporary accesKeyId",
      secretAccessKey: "Your temporary accessKeySecret",
      securityToken: "Your sts token",
      endpoint: "http://cn-hangzhou.log.aliyuncs.com",
    });
    
    // -------------------------------
    // put logs
    // -------------------------------
    const projectName = "your_project_name";
    const logStoreName = "your_logstore";
    
    const logGroup = {
      logs: [
        {
          time: Math.floor(new Date().getTime() / 1000),
          contents: [
            {
              key: "a",
              value: "1",
            },
            {
              key: "a",
              value: "2",
            },
            {
              key: "a",
              value: "3",
            },
          ],
        },
      ],
      topic: "vv",
      source: "127.0.0.1",
    };
    
    sls.putLogs(
      {
        // The following fields are required.
        projectName: projectName,
        logStoreName: logStoreName,
        logGroup: logGroup,
      },
      function (err, data) {
        if (err) {
          console.log("error:", err);
          return;
        }
    
        console.log("success:", data);
      }
    );