{"id":2468,"date":"2017-01-18T23:08:04","date_gmt":"2017-01-18T23:08:03","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2468"},"modified":"2023-06-21T05:51:56","modified_gmt":"2023-06-21T12:51:56","slug":"microservice-aws-api-gateway-lambda-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/microservice-aws-api-gateway-lambda-couchbase\/","title":{"rendered":"Microsservi\u00e7o usando o AWS API Gateway, o AWS Lambda e o Couchbase"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/\">Este blog<\/a> explicou os seguintes conceitos para aplicativos sem servidor at\u00e9 o momento:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-faas-aws-lambda-java\/\">FaaS sem servidor com AWS Lambda e Java<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-faas-aws-lambda-java\/\">Bot\u00e3o IoT do AWS, Lambda e Couchbase<\/a><\/li>\n<\/ul>\n<p>O terceiro blog da s\u00e9rie sem servidor explicar\u00e1 como criar um microsservi\u00e7o simples usando o Amazon API Gateway, o AWS Lambda e o\u00a0<a href=\"https:\/\/developer.couchbase.com\/server\">Couchbase<\/a>. Leia <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-faas-aws-lambda-java\/\">blogs anteriores<\/a> para obter mais contexto sobre o AWS Lambda. <a href=\"https:\/\/aws.amazon.com\/api-gateway\/\">Gateway de API da Amazon<\/a> \u00e9 um servi\u00e7o totalmente gerenciado que facilita aos desenvolvedores a cria\u00e7\u00e3o, publica\u00e7\u00e3o, manuten\u00e7\u00e3o, monitoramento e seguran\u00e7a de APIs em qualquer escala. O Amazon API Gateway lida com todas as tarefas envolvidas na aceita\u00e7\u00e3o e no processamento de at\u00e9 centenas de milhares de chamadas de API simult\u00e2neas, incluindo gerenciamento de tr\u00e1fego, autoriza\u00e7\u00e3o e controle de acesso, monitoramento e gerenciamento de vers\u00f5es de API. Veja a seguir os principais componentes dessa arquitetura:<br \/>\n<a href=\"\/wp-content\/original-assets\/december-2016\/microservice-using-aws-api-gateway-aws-lambda-and-couchbase\/serverless-microservice-1024x193.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14518\" src=\"\/wp-content\/original-assets\/december-2016\/microservice-using-aws-api-gateway-aws-lambda-and-couchbase\/serverless-microservice-1024x193.png\" alt=\"serverless-microservice\" width=\"604\" height=\"114\" \/><\/a><\/p>\n<ul>\n<li>O cliente pode ser curl, AWS CLI, cliente Postman ou qualquer outra ferramenta\/API que possa invocar um ponto de extremidade REST.<\/li>\n<li>O API Gateway \u00e9 usado para provisionar APIs. O recurso de n\u00edvel superior est\u00e1 dispon\u00edvel no caminho <code>\/livros<\/code>. HTTP <code>OBTER<\/code> e <code>POST<\/code> s\u00e3o publicados para o recurso.<\/li>\n<li>Cada API aciona uma fun\u00e7\u00e3o Lambda. Duas fun\u00e7\u00f5es Lambda s\u00e3o criadas,\u00a0<code>lista de livros<\/code>\u00a0para listar todos os livros dispon\u00edveis e <code>criar livro<\/code>\u00a0para criar um novo livro.<\/li>\n<li>O Couchbase \u00e9 usado como um armazenamento de persist\u00eancia no EC2. Todos os documentos JSON s\u00e3o armazenados e recuperados desse banco de dados.<\/li>\n<\/ul>\n<p>Vamos come\u00e7ar!<\/p>\n<h2>Criar fun\u00e7\u00e3o de IAM<\/h2>\n<p>As fun\u00e7\u00f5es do IAM ter\u00e3o pol\u00edticas e rela\u00e7\u00f5es de confian\u00e7a que permitir\u00e3o que essa fun\u00e7\u00e3o seja usada no API Gateway e execute a fun\u00e7\u00e3o Lambda. Vamos criar uma nova fun\u00e7\u00e3o de IAM:<\/p>\n<pre class=\"lang:default decode:true\">aws iam create-role \r\n--role-name microserviceRole \r\n--assume-role-policy-document file:\/\/.\/trust.json<\/pre>\n<p><code>--assume-role-policy-document<\/code> define o documento de pol\u00edtica de relacionamento de confian\u00e7a que concede permiss\u00e3o a uma entidade para assumir a fun\u00e7\u00e3o. <code>trust.json<\/code> est\u00e1 em\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/serverless\/blob\/master\/aws\/microservice\/trust.json\">github.com\/arun-gupta\/serverless\/blob\/master\/aws\/microservice\/trust.json<\/a>\u00a0e se parece com isso:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"Version\": \"2012-10-17\",\r\n  \"Statement\": [\r\n    {\r\n      \"Sid\": \"\",\r\n      \"Effect\": \"Allow\",\r\n      \"Principal\": {\r\n        \"Service\": [\r\n          \"lambda.amazonaws.com\",\r\n          \"apigateway.amazonaws.com\"\r\n        ]\r\n      },\r\n      \"Action\": \"sts:AssumeRole\"\r\n    }\r\n  ]\r\n}<\/pre>\n<p>Essa rela\u00e7\u00e3o de confian\u00e7a permite que as fun\u00e7\u00f5es Lambda e o API Gateway assumam essa fun\u00e7\u00e3o durante a execu\u00e7\u00e3o. Associe pol\u00edticas a essa fun\u00e7\u00e3o como:<\/p>\n<pre class=\"lang:default decode:true\">aws iam put-role-policy \r\n--role-name microserviceRole \r\n--policy-name microPolicy \r\n--policy-document file:\/\/.\/policy.json<\/pre>\n<p><code>policy.json<\/code> est\u00e1 em\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/serverless\/blob\/master\/aws\/microservice\/policy.json\">github.com\/arun-gupta\/serverless\/blob\/master\/aws\/microservice\/policy.json<\/a> e se parece com isso:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"Version\": \"2012-10-17\",\r\n  \"Statement\": [\r\n    {\r\n      \"Effect\": \"Allow\",\r\n      \"Action\": [\r\n        \"logs:*\"\r\n      ],\r\n      \"Resource\": \"arn:aws:logs:*:*:*\"\r\n    },\r\n    {\r\n      \"Effect\": \"Allow\",\r\n      \"Action\": [\r\n        \"apigateway:*\"\r\n      ],\r\n      \"Resource\": \"arn:aws:apigateway:*::\/*\"\r\n    },\r\n    {\r\n      \"Effect\": \"Allow\",\r\n      \"Action\": [\r\n        \"execute-api:Invoke\"\r\n      ],\r\n      \"Resource\": \"arn:aws:execute-api:*:*:*\"\r\n    },\r\n    {\r\n      \"Effect\": \"Allow\",\r\n      \"Action\": [\r\n          \"lambda:*\"\r\n      ],\r\n      \"Resource\": \"*\"\r\n    }\r\n  ]\r\n}<\/pre>\n<p>Essa pol\u00edtica generosa permite quaisquer permiss\u00f5es sobre os registros gerados no CloudWatch para todos os recursos. Al\u00e9m disso, ela permite todas as permiss\u00f5es do Lambda e do API Gateway para todos os recursos. Em geral, somente a pol\u00edtica necess\u00e1ria seria fornecida a recursos espec\u00edficos.<\/p>\n<h2>Criar fun\u00e7\u00f5es Lambda<\/h2>\n<p>As etapas detalhadas para criar fun\u00e7\u00f5es Lambda s\u00e3o explicadas em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-faas-aws-lambda-java\/\">FaaS sem servidor com AWS Lambda e Java<\/a>. Vamos criar as duas fun\u00e7\u00f5es Lambda conforme exigido em nosso caso:<\/p>\n<pre class=\"lang:default decode:true\">aws lambda create-function \r\n--function-name MicroserviceGetAll \r\n--role arn:aws:iam::598307997273:role\/microserviceRole \r\n--handler org.sample.serverless.aws.couchbase.BucketGetAll \r\n--zip-file fileb:\/\/\/Users\/arungupta\/workspaces\/serverless\/aws\/microservice\/microservice-http-endpoint\/target\/microservice-http-endpoint-1.0-SNAPSHOT.jar \r\n--description \"Microservice HTTP Endpoint - Get All\" \r\n--runtime java8 \r\n--region us-west-1 \r\n--timeout 30 \r\n--memory-size 1024 \r\n--environment Variables={COUCHBASE_HOST=ec2-52-53-193-176.us-west-1.compute.amazonaws.com} \r\n--publish<\/pre>\n<p>Alguns dos principais itens a serem observados nessa fun\u00e7\u00e3o s\u00e3o:<\/p>\n<ul>\n<li>Fun\u00e7\u00e3o de IAM\u00a0<code>microserviceRole<\/code> criado na etapa anterior \u00e9 explicitamente especificado aqui<\/li>\n<li>O manipulador \u00e9\u00a0<code>org.sample.serverless.aws.couchbase.BucketGetAll<\/code> classe. Essa classe consulta o banco de dados do Couchbase definido usando o par\u00e2metro <code>COUCHBASE_HOST<\/code> vari\u00e1vel de ambiente.<\/li>\n<\/ul>\n<p>Crie a segunda fun\u00e7\u00e3o Lambda:<\/p>\n<pre class=\"lang:default decode:true\">aws lambda create-function \r\n--function-name MicroservicePost \r\n--role arn:aws:iam::598307997273:role\/microserviceRole \r\n--handler org.sample.serverless.aws.couchbase.BucketPost \r\n--zip-file fileb:\/\/\/Users\/arungupta\/workspaces\/serverless\/aws\/microservice\/microservice-http-endpoint\/target\/microservice-http-endpoint-1.0-SNAPSHOT.jar \r\n--description \"Microservice HTTP Endpoint - Post\" \r\n--runtime java8 \r\n--region us-west-1 \r\n--timeout 30 \r\n--memory-size 1024 \r\n--environment Variables={COUCHBASE_HOST=ec2-52-53-193-176.us-west-1.compute.amazonaws.com} \r\n--publish<\/pre>\n<p>O manipulador para essa fun\u00e7\u00e3o \u00e9 <code>org.sample.serverless.aws.couchbase.BucketPost<\/code> classe. Essa classe cria um novo documento JSON no banco de dados do Couchbase identificado por <code>COUCHBASE_HOST<\/code> vari\u00e1vel de ambiente. O c\u00f3digo-fonte completo dessas classes est\u00e1 em\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/serverless\/tree\/master\/aws\/microservice\/microservice-http-endpoint\">github.com\/arun-gupta\/serverless\/tree\/master\/aws\/microservice\/microservice-http-endpoint<\/a>.<\/p>\n<h2>Recurso do gateway de API<\/h2>\n<p><a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/with-on-demand-https-example-configure-event-source.html\">Crie uma API usando o Amazon API Gateway e teste-a<\/a> e\u00a0<a href=\"https:\/\/docs.aws.amazon.com\/apigateway\/latest\/developerguide\/getting-started.html\">Criar uma API para expor uma fun\u00e7\u00e3o Lambda<\/a>\u00a0fornecem etapas e explica\u00e7\u00f5es detalhadas sobre como usar o API Gateway e as fun\u00e7\u00f5es Lambda para criar sistemas de back-end avan\u00e7ados. Este blog far\u00e1 uma r\u00e1pida descri\u00e7\u00e3o das etapas, caso voc\u00ea queira ir direto ao ponto. Vamos criar recursos do API Gateway.<\/p>\n<ol>\n<li>A primeira etapa \u00e9 criar uma API:\n<pre class=\"lang:default decode:true\">aws apigateway \r\ncreate-rest-api \r\n--name Book<\/pre>\n<p>Isso mostra a sa\u00edda como:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"name\": \"Book\", \r\n    \"id\": \"lb2qgujjif\", \r\n    \"createdDate\": 1482998945\r\n}<\/pre>\n<p>O valor de <code>id<\/code> \u00e9 o ID da API. No nosso caso, \u00e9\u00a0<code>lb2qgujjif<\/code>.<\/li>\n<li>Encontre o ROOT ID da API criada, pois ele \u00e9 necess\u00e1rio para a pr\u00f3xima invoca\u00e7\u00e3o da CLI do AWS:\n<pre class=\"lang:default decode:true\">aws apigateway get-resources --rest-api-id lb2qgujjif<\/pre>\n<p>Isso mostra o resultado:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"items\": [\r\n        {\r\n            \"path\": \"\/\", \r\n            \"id\": \"hgxogdkheg\"\r\n        }\r\n    ]\r\n}<\/pre>\n<p>Valor de <code>id<\/code> \u00e9 a ID ROOT. Essa tamb\u00e9m \u00e9 a ID PARENT do recurso de n\u00edvel superior.<\/li>\n<li>Criar um recurso\n<pre class=\"lang:default decode:true\">aws apigateway create-resource \r\n--rest-api-id lb2qgujjif \r\n--parent-id hgxogdkheg \r\n--path-part books<\/pre>\n<p>Isso mostra o resultado:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"path\": \"\/books\", \r\n    \"pathPart\": \"books\", \r\n    \"id\": \"vrpkod\", \r\n    \"parentId\": \"hgxogdkheg\"\r\n}<\/pre>\n<p>Valor de <code>id<\/code> \u00e9 RESOURCE ID (ID do recurso).<\/li>\n<\/ol>\n<p>A API ID e a RESOURCE ID s\u00e3o usadas para invoca\u00e7\u00f5es subsequentes da AWS CLI.<\/p>\n<h2>M\u00e9todo POST do gateway de API<\/h2>\n<p>Agora que o recurso foi criado, vamos criar o HTTP <code>POST<\/code> nesse recurso.<\/p>\n<ol>\n<li>Criar um <code>POST<\/code> m\u00e9todo\n<pre class=\"lang:default decode:true\">aws apigateway put-method \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method POST \r\n--authorization-type NONE<\/pre>\n<p>para ver a resposta:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"apiKeyRequired\": false, \r\n    \"httpMethod\": \"POST\", \r\n    \"authorizationType\": \"NONE\"\r\n}<\/pre>\n<\/li>\n<li>Defina a fun\u00e7\u00e3o Lambda como destino do m\u00e9todo POST:\n<pre class=\"lang:default decode:true\">aws apigateway put-integration \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method POST \r\n--type AWS \r\n--integration-http-method POST \r\n--uri arn:aws:apigateway:us-west-1:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-1::function:MicroservicePost\/invocations<\/pre>\n<p>Certifique-se de substituir <code><\/code> com o ID de sua conta do AWS. O ID da API e o ID do recurso da se\u00e7\u00e3o anterior tamb\u00e9m s\u00e3o usados aqui. <code>--uri<\/code> \u00e9 usado para especificar o URI da entrada de integra\u00e7\u00e3o. O formato do URI \u00e9 fixo. Essa CLI mostrar\u00e1 o resultado como:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"httpMethod\": \"POST\", \r\n    \"passthroughBehavior\": \"WHEN_NO_MATCH\", \r\n    \"cacheKeyParameters\": [], \r\n    \"type\": \"AWS\", \r\n    \"uri\": \"arn:aws:apigateway:us-west-1:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-1::function:MicroservicePost\/invocations\", \r\n    \"cacheNamespace\": \"vrpkod\"\r\n}<\/pre>\n<\/li>\n<li>Conjunto <code>tipo de conte\u00fado<\/code> da resposta do m\u00e9todo POST:\n<pre class=\"lang:default decode:true\">aws apigateway put-method-response \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method POST \r\n--status-code 200 \r\n--response-models \"{\"application\/json\": \"Empty\"}\"<\/pre>\n<p>para ver a resposta:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"responseModels\": {\r\n        \"application\/json\": \"Empty\"\r\n    }, \r\n    \"statusCode\": \"200\"\r\n}<\/pre>\n<\/li>\n<li>Conjunto <code>tipo de conte\u00fado<\/code> da resposta de integra\u00e7\u00e3o do m\u00e9todo POST:\n<pre class=\"lang:default decode:true\">aws apigateway put-integration-response \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method POST \r\n--status-code 200 \r\n--response-templates \"{\"application\/json\": \"Empty\"}\"<\/pre>\n<p>para ver a resposta:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"statusCode\": \"200\", \r\n    \"responseTemplates\": {\r\n        \"application\/json\": \"Empty\"\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Implantar a API\n<pre class=\"lang:default decode:true\">aws apigateway create-deployment \r\n--rest-api-id lb2qgujjif \r\n--stage-name test<\/pre>\n<p>para ver a resposta<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"id\": \"9wi991\", \r\n    \"createdDate\": 1482999187\r\n}<\/pre>\n<\/li>\n<li>Conceder permiss\u00e3o para que o API Gateway invoque a fun\u00e7\u00e3o Lambda:\n<pre class=\"lang:default decode:true\">aws lambda add-permission \r\n--function-name MicroservicePost \r\n--statement-id apigateway-test-post-1 \r\n--action lambda:InvokeFunction \r\n--principal apigateway.amazonaws.com \r\n--source-arn \"arn:aws:execute-api:us-west-1::lb2qgujjif\/*\/POST\/books\"<\/pre>\n<p>Al\u00e9m disso, conceda permiss\u00e3o \u00e0 API implantada:<\/p>\n<pre class=\"lang:default decode:true\">aws lambda add-permission \r\n--function-name MicroservicePost \r\n--statement-id apigateway-test-post-2 \r\n--action lambda:InvokeFunction \r\n--principal apigateway.amazonaws.com \r\n--source-arn \"arn:aws:execute-api:us-west-1::lb2qgujjif\/test\/GET\/books\"<\/pre>\n<\/li>\n<li>Teste o m\u00e9todo da API:\n<pre class=\"lang:default decode:true\">aws apigateway test-invoke-method \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method POST \r\n--path-with-query-string \"\" \r\n--body \"{\"id\": \"1\", \"bookname\": \"test book\", \"isbn\": \"123\", \"cost\": \"1.23\"}\"<\/pre>\n<p>para ver a resposta:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"status\": 200, \r\n    \"body\": \"Empty\", \r\n    \"log\": \"Execution log for request test-requestnThu Dec 29 08:16:05 UTC 2016 : Starting execution for request: test-invoke-requestnThu Dec 29 08:16:05 UTC 2016 : HTTP Method: POST, Resource Path: \/booksnThu Dec 29 08:16:05 UTC 2016 : Method request path: {}nThu Dec 29 08:16:05 UTC 2016 : Method request query string: {}nThu Dec 29 08:16:05 UTC 2016 : Method request headers: {}nThu Dec 29 08:16:05 UTC 2016 : Method request body before transformations: {\"id\": \"1\", \"bookname\": \"test book\", \"isbn\": \"123\", \"cost\": \"1.23\"}nThu Dec 29 08:16:05 UTC 2016 : Endpoint request URI: https:\/\/lambda.us-west-1.amazonaws.com\/2015-03-31\/functions\/arn:aws:lambda:us-west-1:598307997273:function:MicroservicePost\/invocationsnThu Dec 29 08:16:05 UTC 2016 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=****************************************************************************************************************************************************************************************************************************************************************************************************************************************c8bb85, X-Amz-Date=20161229T081605Z, x-amzn-apigateway-api-id=lb2qgujjif, X-Amz-Source-Arn=arn:aws:execute-api:us-west-1:598307997273:lb2qgujjif\/null\/POST\/books, Accept=application\/json, User-Agent=AmazonAPIGateway_lb2qgujjif, Host=lambda.us-west-1.amazonaws.com, X-Amz-Content-Sha256=559d0296d96ec5647eef6381602fe5e7f55dd17065864fafb4f581d106aa92f4, X-Amzn-Trace-Id=Root=1-5864c645-8494974a41a3a16c8d2f9929, Content-Type=application\/json}nThu Dec 29 08:16:05 UTC 2016 : Endpoint request body after transformations: {\"id\": \"1\", \"bookname\": \"test book\", \"isbn\": \"123\", \"cost\": \"1.23\"}nThu Dec 29 08:16:10 UTC 2016 : Endpoint response body before transformations: \"{\\\"cost\\\":\\\"1.23\\\",\\\"id\\\":\\\"1\\\",\\\"bookname\\\":\\\"test book\\\",\\\"isbn\\\":\\\"123\\\"}\"nThu Dec 29 08:16:10 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=0b25323b-cd9f-11e6-8bd4-292925ba63a9, Connection=keep-alive, Content-Length=78, Date=Thu, 29 Dec 2016 08:16:10 GMT, Content-Type=application\/json}nThu Dec 29 08:16:10 UTC 2016 : Method response body after transformations: EmptynThu Dec 29 08:16:10 UTC 2016 : Method response headers: {X-Amzn-Trace-Id=Root=1-5864c645-8494974a41a3a16c8d2f9929, Content-Type=application\/json}nThu Dec 29 08:16:10 UTC 2016 : Successfully completed executionnThu Dec 29 08:16:10 UTC 2016 : Method completed with status: 200n\", \r\n    \"latency\": 5091, \r\n    \"headers\": {\r\n        \"X-Amzn-Trace-Id\": \"Root=1-5864c645-8494974a41a3a16c8d2f9929\", \r\n        \"Content-Type\": \"application\/json\"\r\n    }\r\n}<\/pre>\n<p>Valor de <code>status<\/code> \u00e9 200 e indica que a invoca\u00e7\u00e3o foi bem-sucedida. Valor de <code>registro<\/code> mostra a declara\u00e7\u00e3o de registro do CloudWatch Logs. Os registros detalhados tamb\u00e9m podem ser obtidos usando <code>aws logs filter-log-events --log-group \/aws\/lambda\/MicroservicePost<\/code>.<\/li>\n<li>Esse comando armazena um \u00fanico documento JSON no Couchbase. Isso pode ser facilmente verificado usando o comando <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/tools\/cbq-shell.html\">Ferramenta CLI do Couchbase cbq<\/a>Conecte-se ao servidor Couchbase como:\n<pre class=\"lang:default decode:true\">cbq -u Administrator -p password -e=\"https:\/\/:8091\"<\/pre>\n<p>Criar um \u00edndice prim\u00e1rio em <code>padr\u00e3o<\/code> pois isso \u00e9 necess\u00e1rio para consultar o bucket sem cl\u00e1usulas:<\/p>\n<pre class=\"lang:default decode:true\">cbq&gt; create primary index default_index on default;\r\n{\r\n    \"requestID\": \"13b539f9-7fff-4386-92f4-cea161a7aa08\",\r\n    \"signature\": null,\r\n    \"results\": [\r\n    ],\r\n    \"status\": \"success\",\r\n    \"metrics\": {\r\n        \"elapsedTime\": \"1.917009047s\",\r\n        \"executionTime\": \"1.916970061s\",\r\n        \"resultCount\": 0,\r\n        \"resultSize\": 0\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Escreva um <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/n1ql\/\">N1QL<\/a> para acessar os dados:\n<pre class=\"lang:default decode:true\">cbq&gt; select * from default limit 10;\r\n{\r\n    \"requestID\": \"d7b1c3f9-6b4e-4952-9a1e-9faf5169926e\",\r\n    \"signature\": {\r\n        \"*\": \"*\"\r\n    },\r\n    \"results\": [\r\n        {\r\n            \"default\": {\r\n                \"bookname\": \"test\",\r\n                \"cost\": \"1.23\",\r\n                \"id\": \"1\",\r\n                \"isbn\": \"123\"\r\n            }\r\n        }\r\n    ],\r\n    \"status\": \"success\",\r\n    \"metrics\": {\r\n        \"elapsedTime\": \"24.337755ms\",\r\n        \"executionTime\": \"24.289796ms\",\r\n        \"resultCount\": 1,\r\n        \"resultSize\": 175\r\n    }\r\n}<\/pre>\n<p>Os resultados mostram o documento JSON que foi armazenado por nossa fun\u00e7\u00e3o Lambda.<\/li>\n<\/ol>\n<h2>M\u00e9todo GET do gateway de API<\/h2>\n<p>Vamos criar o HTTP <code>OBTER<\/code> no recurso:<\/p>\n<ol>\n<li>Criar um <code>OBTER<\/code> m\u00e9todo:\n<pre class=\"lang:default decode:true\">aws apigateway put-method \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method GET \r\n--authorization-type NONE<\/pre>\n<\/li>\n<li>Defina a fun\u00e7\u00e3o Lambda correta como destino do GET:\n<pre class=\"lang:default decode:true\">aws apigateway put-integration \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method GET \r\n--type AWS \r\n--integration-http-method POST \r\n--uri arn:aws:apigateway:us-west-1:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-1:598307997273:function:MicroserviceGetAll\/invocations<\/pre>\n<\/li>\n<li>Conjunto <code>tipo de conte\u00fado<\/code> da resposta do m\u00e9todo GET:\n<pre class=\"lang:default decode:true\">aws apigateway put-method-response \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method GET \r\n--status-code 200 \r\n--response-models \"{\"application\/json\": \"Empty\"}\"<\/pre>\n<\/li>\n<li>Conjunto <code>tipo de conte\u00fado<\/code> da resposta de integra\u00e7\u00e3o do m\u00e9todo GET:\n<pre class=\"lang:default decode:true\">aws apigateway put-integration-response \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method GET \r\n--status-code 200 \r\n--response-templates \"{\"application\/json\": \"Empty\"}\"<\/pre>\n<\/li>\n<li>Conceder permiss\u00e3o para que o API Gateway invoque a fun\u00e7\u00e3o Lambda\n<pre class=\"lang:default decode:true\">aws lambda add-permission \r\n--function-name MicroserviceGetAll \r\n--statement-id apigateway-test-getall-1 \r\n--action lambda:InvokeFunction \r\n--principal apigateway.amazonaws.com \r\n--source-arn \"arn:aws:execute-api:us-west-1:598307997273:lb2qgujjif\/*\/GET\/books\"<\/pre>\n<\/li>\n<li>Conceder permiss\u00e3o \u00e0 API implantada:\n<pre class=\"lang:default decode:true\">aws lambda add-permission \r\n--function-name MicroserviceGetAll \r\n--statement-id apigateway-test-getall-2 \r\n--action lambda:InvokeFunction \r\n--principal apigateway.amazonaws.com \r\n--source-arn \"arn:aws:execute-api:us-west-1:598307997273:lb2qgujjif\/test\/GET\/books\"<\/pre>\n<\/li>\n<li>Teste o m\u00e9todo:\n<pre class=\"lang:default decode:true\">aws apigateway test-invoke-method \r\n--rest-api-id lb2qgujjif \r\n--resource-id vrpkod \r\n--http-method GET<\/pre>\n<p>para ver a sa\u00edda:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"status\": 200, \r\n    \"body\": \"Empty\", \r\n    \"log\": \"Execution log for request test-requestnSat Dec 31 09:07:48 UTC 2016 : Starting execution for request: test-invoke-requestnSat Dec 31 09:07:48 UTC 2016 : HTTP Method: GET, Resource Path: \/booksnSat Dec 31 09:07:48 UTC 2016 : Method request path: {}nSat Dec 31 09:07:48 UTC 2016 : Method request query string: {}nSat Dec 31 09:07:48 UTC 2016 : Method request headers: {}nSat Dec 31 09:07:48 UTC 2016 : Method request body before transformations: nSat Dec 31 09:07:48 UTC 2016 : Endpoint request URI: https:\/\/lambda.us-west-1.amazonaws.com\/2015-03-31\/functions\/arn:aws:lambda:us-west-1:598307997273:function:MicroserviceGetAll\/invocationsnSat Dec 31 09:07:48 UTC 2016 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=******************************************************************************************************************************************************************************************************************************************************************************************************6de147, X-Amz-Date=20161231T090748Z, x-amzn-apigateway-api-id=lb2qgujjif, X-Amz-Source-Arn=arn:aws:execute-api:us-west-1:598307997273:lb2qgujjif\/null\/GET\/books, Accept=application\/json, User-Agent=AmazonAPIGateway_lb2qgujjif, X-Amz-Security-Token=FQoDYXdzEHEaDEILpsKTo45Ys1LrFCK3A+KOe5HXOSP3GfVAaRYHe1pDUJGHL9MtkFiPjORLFT+UCKjRqE7UFaGscTVG6PZXTuSyQev4XTyROfPylCrtDomGsoZF\/iwy4rlJQIJ7elBceyeKu1OVdaT1A99PVeliaCAiDL6Veo1viWOnP+7c72nAaJ5jnyF\/nHl\/OLhFdFv4t\/hnx3JePMk5YM89\/6ofxUEVDNfzXxbZHRpTrG\/4TPHwjPdoR5i9dEzWMU6Eo5xD4ldQ\/m5B3RmrwpaPOuEq39LhJ8k\/Vzo+pAfgJTq5ssbNwYOgh0RPSGVNMcoTkCwk0EMMT5vDbmQqZ2dW1a1tmQg9N2xR+QQy+RKMFgO5YY8fMxHnRSdMuuipxl79G1pktc [TRUNCATED]nSat Dec 31 09:07:48 UTC 2016 : Endpoint request body after transformations: nSat Dec 31 09:07:53 UTC 2016 : Endpoint response body before transformations: \"[{\\\"default\\\":{\\\"cost\\\":\\\"1.23\\\",\\\"id\\\":\\\"1\\\",\\\"bookname\\\":\\\"test book\\\",\\\"isbn\\\":\\\"123\\\"}}]\"nSat Dec 31 09:07:53 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=99ab09b2-cf38-11e6-996f-f5f07af431af, Connection=keep-alive, Content-Length=94, Date=Sat, 31 Dec 2016 09:07:52 GMT, Content-Type=application\/json}nSat Dec 31 09:07:53 UTC 2016 : Method response body after transformations: EmptynSat Dec 31 09:07:53 UTC 2016 : Method response headers: {X-Amzn-Trace-Id=Root=1-58677564-66f1e96642b16d2db703126e, Content-Type=application\/json}nSat Dec 31 09:07:53 UTC 2016 : Successfully completed executionnSat Dec 31 09:07:53 UTC 2016 : Method completed with status: 200n\", \r\n    \"latency\": 4744, \r\n    \"headers\": {\r\n        \"X-Amzn-Trace-Id\": \"Root=1-58677564-66f1e96642b16d2db703126e\", \r\n        \"Content-Type\": \"application\/json\"\r\n    }\r\n}<\/pre>\n<p>Mais uma vez, o c\u00f3digo de status 200 mostra uma invoca\u00e7\u00e3o bem-sucedida. Os registros detalhados podem ser obtidos usando\u00a0<code>aws logs filter-log-events --log-group \/aws\/lambda\/MicroservicePost<\/code>.<\/li>\n<\/ol>\n<p>Este blog mostra apenas um m\u00e9todo simples de POST e GET. Outros m\u00e9todos HTTP tamb\u00e9m podem ser facilmente inclu\u00eddos nesse microsservi\u00e7o.<\/p>\n<h2>Refer\u00eancias de API Gateway e Lambda<\/h2>\n<ul>\n<li><a href=\"https:\/\/martinfowler.com\/articles\/serverless.html\">Arquiteturas sem servidor<\/a><\/li>\n<li><a href=\"https:\/\/aws.amazon.com\/api-gateway\/\">Gateway de API da AWS<\/a><\/li>\n<li><a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/with-on-demand-https-example-configure-event-source_1.html\">Cria\u00e7\u00e3o de um microsservi\u00e7o simples usando Lambda e API Gateway<\/a><\/li>\n<li><a href=\"https:\/\/developer.couchbase.com\/server\">Documentos do servidor Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a><\/li>\n<li>Siga-nos em <a href=\"https:\/\/twitter.com\/couchbasedev\">@couchbasedev<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>This blog has\u00a0explained the following concepts\u00a0for serverless applications so far: Serverless FaaS with AWS Lambda and Java AWS IoT Button, Lambda and Couchbase The third blog in serverless series will explain\u00a0how to create a simple microservice using Amazon API Gateway, [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Microservice using AWS API Gateway, AWS Lambda and Couchbase - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/microservice-aws-api-gateway-lambda-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microservice using AWS API Gateway, AWS Lambda and Couchbase\" \/>\n<meta property=\"og:description\" content=\"This blog has\u00a0explained the following concepts\u00a0for serverless applications so far: Serverless FaaS with AWS Lambda and Java AWS IoT Button, Lambda and Couchbase The third blog in serverless series will explain\u00a0how to create a simple microservice using Amazon API Gateway, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/microservice-aws-api-gateway-lambda-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-18T23:08:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-21T12:51:56+00:00\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Microservice using AWS API Gateway, AWS Lambda and Couchbase\",\"datePublished\":\"2017-01-18T23:08:03+00:00\",\"dateModified\":\"2023-06-21T12:51:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/\"},\"wordCount\":968,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/\",\"name\":\"Microservice using AWS API Gateway, AWS Lambda and Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-18T23:08:03+00:00\",\"dateModified\":\"2023-06-21T12:51:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microservice using AWS API Gateway, AWS Lambda and Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Microservice using AWS API Gateway, AWS Lambda and Couchbase - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/microservice-aws-api-gateway-lambda-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Microservice using AWS API Gateway, AWS Lambda and Couchbase","og_description":"This blog has\u00a0explained the following concepts\u00a0for serverless applications so far: Serverless FaaS with AWS Lambda and Java AWS IoT Button, Lambda and Couchbase The third blog in serverless series will explain\u00a0how to create a simple microservice using Amazon API Gateway, [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/microservice-aws-api-gateway-lambda-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-18T23:08:03+00:00","article_modified_time":"2023-06-21T12:51:56+00:00","author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Microservice using AWS API Gateway, AWS Lambda and Couchbase","datePublished":"2017-01-18T23:08:03+00:00","dateModified":"2023-06-21T12:51:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/"},"wordCount":968,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/","name":"Microservice using AWS API Gateway, AWS Lambda and Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-18T23:08:03+00:00","dateModified":"2023-06-21T12:51:56+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/microservice-aws-api-gateway-lambda-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Microservice using AWS API Gateway, AWS Lambda and Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE. Gupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre uma infinidade de t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","first_name":"Arun","last_name":"Gupta","user_url":"","author_category":"","description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE.\r\n\r\nGupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre diversos t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2468"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2468"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}