Escenario

Se trata de crear una aplicación móvil desde Android Studio utilizando algunos de los servicios de AWS como API Gateway, Lambda, Step Functions y Cognito de tal forma que no tengamos que acceder a la plataforma de AWS durante el desarrollo.

Amplify permite ir añadiendo servicios desde el terminal de Android Studio e ir creandolos a medida que avanzamos en nuestro proyecto.

Para ello vamos a seguir los pasos de la documentación que nos ofrece Amlify en su página web:

https://docs.amplify.aws/lib/q/platform/android/

 

aws-amplify-android-lambda-api-gateway

 

Instalación de Amplify en local

Lo primero que tenemos que hacer si no lo hemos hecho antes, algo que nos servirá en adelante para futuros proyectos, es instalar y configurar Amplify CLI para desde el momento que tengamos instalado poder ejecutar los diferentes comandos de Amplify como añadir API Gateway o Lambdas al proyecto o incluso modificarlas durante el desarrollo.

 https://docs.amplify.aws/lib/project-setup/prereq/q/platform/android/

 

Creación de la aplicación e instalación del las librerías

 

android { 

    compileOptions { 

    // Support for Java 8 features 

    coreLibraryDesugaringEnabled true 

    sourceCompatibility JavaVersion.VERSION_1_8 

    targetCompatibility JavaVersion.VERSION_1_8 }

dependencies { 

    // Amplify core dependency 

    implementation 'com.amplifyframework:core:2.8.4' 

    // Support for Java 8 features 

    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' 

}

 

Para inicializar Amplify solamente es necesario ejecutar el siguiente comando:

amplify init

El cual después de ejecutar nos pedirá una serie de datos como nombre de la aplicación, nombre del entrono de desarrollo, IDE de desarrollo etc. Podemos comprobar en AWS Console como después de inicializar la apliación se nos ha creado en la consola de AWS.

 

 

 

 

 

 

 

 

Validar password de cognito user:

PS C:\Users\Santy> aws cognito-idp admin-set-user-password --user-pool-id us-east-1_5CdLlaQoe --username santy --password P@ssw0rd --permanent

 

Obtener token de usuario:

PS C:\Users\Santy> aws cognito-idp admin-initiate-auth  --user-pool-id us-east-1_5CdLlaQoe --client-id 6orkabpm5vvq5ie3rl5b2rj5r1 --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=santy,PASSWORD=P@ssw0rd

 

Configuración del archivo amplifyconfiguration.json en app/src/res/raw

"UserAgent": "aws-amplify-cli/2.0",
"Version": "1.0",
"api": {
    "plugins": {
        "awsAPIPlugin": {
            "AndroidNodeJS": {
                "endpointType": "REST",
                "endpoint": "https://go1aqvo7h8.execute-api.us-east-1.amazonaws.com/dev",
                "region": "us-east-1",
                "authorizationType": "AMAZON_COGNITO_USER_POOLS"
            }
        }
    }
},

 

 

Construir la llamada a la API

 

RestOptions options = RestOptions.builder()
        //.addPath("/documents")
        .addHeader("TokenNodeJS", "eyJraWQiOiJ2VVlOK2lvd0N4WjBUUENNODFqRTNVNzdcL3pObFI1N1g5YjQrZzVZQVdBbz0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMmY3NzI5NS0zMGY2LTQ0YzktOTFkZC01ZWI5NTJjNGI5NGQiLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV81Q2RMbGFRb2UiLCJjb2duaXRvOnVzZXJuYW1lIjoic2FudHkiLCJvcmlnaW5fanRpIjoiMzBjZTZmMzktYzI0Ny00ZDk1LWFhNzYtYWJjZTdiMjljMmNkIiwiYXVkIjoiNm9ya2FicG01dnZxNWllM3JsNWIycmo1cjEiLCJldmVudF9pZCI6IjU2NWE4MjdiLTQ2MGItNGMxYS1iZTQ0LTE2ZTU5Y2YyM2U3MSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjg1ODkxNDM1LCJleHAiOjE2ODU4OTUwMzUsImlhdCI6MTY4NTg5MTQzNSwianRpIjoiY2JjMTNlNWYtZGZhYy00MjdmLTgxNjctYTFjYjYzZDMyYjU0IiwiZW1haWwiOiJzYW50eUBjaWVyY28uZXMifQ.07okzlEbhELkRyh__ChK9J_2jmrlx3jEfBB0et7LAQEdFtBooHfjfMNsGxHNSBWSulsmtsf1ge1FVnEeg9Q_YnlIdykGAwjv11w1smhSspVu-AHuPu4pW67YDtYOFPmfqRiRRV9YAA-ssifX1V6H4hJHbHW_UISx5hI5S793yIBIh-Mv9-21jvcPa3NV6W2m2GTfsYr65nd5IU6keCFL_fI3mgyDifmbmjvEJ6yOTn-urmsQVHIQXg50GCemlL46RPDuOW-un0r6KfqK62_kzfp-9H_hfIXFBP95rcOWDKABonnv-xGOelcOs8wm__frfK7eG2OMGD8IyA6B8f04Sw")
        .addPath("/users") //añado la ruta de mi api y creo la función lambda y le añado el rol de la función lambda de documents
        .build();

 

 

Llamamos a la API:

 

Amplify.API.get(options,
        restResponse -> Log.i("MyAmplifyApp", "GET succeeded: " + restResponse.getData().asString()),
        apiFailure -> Log.e("MyAmplifyApp", "GET failed.", apiFailure)
);

 

 

 

https://www.youtube.com/watch?v=LI31QxfAgho

https://medium.com/rahasak/build-serverless-application-with-aws-amplify-aws-api-gateway-aws-lambda-and-cognito-auth-a8606b9cb025