メニュー
AWS Lambda
開発者ガイド

ステップ 4: Android 用モバイルアプリケーションを作成する

これで、イベントを生成し、パラメータとしてイベントデータを渡すことで Lambda 関数を呼び出すシンプルな Android モバイルアプリケーションを作成できます。

次の手順は、Android Studio を使用して確認されました。

  1. 次の設定を使用して、AndroidEventGenerator という新しい Android プロジェクトを作成します。

    • [Phone and Tablet] プラットフォームを選択します。

    • Blank Activity を選択します。

  2. build.gradle (Module:app) ファイルで、dependencies セクションに以下を追加します。

    Copy
    compile 'com.amazonaws:aws-android-sdk-core:2.2.+' compile 'com.amazonaws:aws-android-sdk-lambda:2.2.+'
  3. プロジェクトをビルドし、必要な依存関係が必要に応じてダウンロードされるようにします。

  4. Android アプリケーションマニフェスト (AndroidManifest.xml) で、次のアクセス権限を追加し、アプリケーションがインターネットに接続できるようにします。アクセス権限は、</manifest> 終了タグの直前に追加できます。

    Copy
    <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. MainActivity で、次のインポートを追加します。

    Copy
    import com.amazonaws.mobileconnectors.lambdainvoker.*; import com.amazonaws.auth.CognitoCachingCredentialsProvider; import com.amazonaws.regions.Regions;
  6. [package] セクションで、以下の 2 つのクラス (RequestClassResponseClass) を追加します。POJO が、前のセクションの Lambda 関数で作成した POJO と同じであることに注意してください。

    • RequestClass。このクラスのインスタンスは、名と姓で構成されるイベントデータの POJO (Plain Old Java Object) として機能します。前のセクションで作成した Lambda 関数に Java の例を使用している場合、この POJO は Lambda 関数コードで作成した POJO と同じです。

      Copy
      package com.example....lambdaeventgenerator; public class RequestClass { String firstName; String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public RequestClass(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public RequestClass() { } }

    • ResponseClass

      Copy
      package com.example....lambdaeventgenerator; public class ResponseClass { String greetings; public String getGreetings() { return greetings; } public void setGreetings(String greetings) { this.greetings = greetings; } public ResponseClass(String greetings) { this.greetings = greetings; } public ResponseClass() { } }

  7. 同じパッケージで、AndroidBackendLambdaFunction Lambda 関数を呼び出すために、MyInterface という名前のインターフェイスを作成します。

    注記

    コード内の @LambdaFunction の注釈により、特定のクライアントメソッドが同じ名前の Lambda 関数にマッピングされます。この注釈の詳細については、『AWS Mobile SDK for Android Developer Guide』の「AWS Lambda」を参照してください。

    Copy
    package com.example.....lambdaeventgenerator; import com.amazonaws.mobileconnectors.lambdainvoker.LambdaFunction; public interface MyInterface { /** * Invoke the Lambda function "AndroidBackendLambdaFunction". * The function name is the method name. */ @LambdaFunction ResponseClass AndroidBackendLambdaFunction(RequestClass request); }
  8. アプリケーションをシンプルに保つため、onCreate() イベントハンドラーで Lambda 関数を呼び出すコードを追加します。MainActivity で、onCreate() コードの末尾に以下のコードを追加します。

    Copy
    // Create an instance of CognitoCachingCredentialsProvider CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider( this.getApplicationContext(), "identity-pool-id", Regions.US_WEST_2); // Create LambdaInvokerFactory, to be used to instantiate the Lambda proxy. LambdaInvokerFactory factory = new LambdaInvokerFactory(this.getApplicationContext(), Regions.US_WEST_2, cognitoProvider); // Create the Lambda proxy object with a default Json data binder. // You can provide your own data binder by implementing // LambdaDataBinder. final MyInterface myInterface = factory.build(MyInterface.class); RequestClass request = new RequestClass("John", "Doe"); // The Lambda function invocation results in a network call. // Make sure it is not called from the main thread. new AsyncTask<RequestClass, Void, ResponseClass>() { @Override protected ResponseClass doInBackground(RequestClass... params) { // invoke "echo" method. In case it fails, it will throw a // LambdaFunctionException. try { return myInterface.AndroidBackendLambdaFunction(params[0]); } catch (LambdaFunctionException lfe) { Log.e("Tag", "Failed to invoke echo", lfe); return null; } } @Override protected void onPostExecute(ResponseClass result) { if (result == null) { return; } // Do a toast Toast.makeText(MainActivity.this, result.getGreetings(), Toast.LENGTH_LONG).show(); } }.execute(request);
  9. コードを実行し、以下のように確認します。

    • Toast.makeText() に、返されたレスポンスが表示されます。

    • CloudWatch Logs に、Lambda 関数によって作成されたログが示されます。これはイベントデータ (名と姓) を示します。この情報も、AWS Lambda コンソールで確認できます。