Mengatur transformasi data di API Gateway - Amazon API Gateway

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengatur transformasi data di API Gateway

Bagian ini menunjukkan cara mengatur template pemetaan untuk mengubah permintaan dan tanggapan integrasi menggunakan konsol dan AWS CLI.

Mengatur transformasi data menggunakan konsol API Gateway

Dalam tutorial ini, Anda akan membuat tabel API dan DynamoDB yang tidak lengkap menggunakan file.zip berikut.zip. data-transformation-tutorial-console API yang tidak lengkap ini memiliki /pets sumber daya dengan GET dan POST metode.

  • GETMetode ini akan mendapatkan data dari titik akhir http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP. Data keluaran akan diubah sesuai dengan template pemetaan diPetStore Template pemetaan.

  • POSTMetode ini akan memungkinkan pengguna untuk menyimpan informasi POST ke tabel Amazon DynamoDB menggunakan template pemetaan.

Unduh dan unzip template pembuatan aplikasi untuk AWS CloudFormation. Anda akan menggunakan template ini untuk membuat tabel DynamoDB untuk memposting informasi hewan peliharaan dan API yang tidak lengkap. Anda akan menyelesaikan langkah-langkah lainnya di konsol API Gateway.

Untuk membuat AWS CloudFormation tumpukan
  1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  2. Pilih Buat tumpukan kemudian pilih Dengan sumber daya baru (standar).

  3. Untuk Tentukan templat, pilih Unggah file templat.

  4. Pilih template yang Anda unduh.

  5. Pilih Selanjutnya.

  6. Untuk nama Stack, data-transformation-tutorial-console masukkan lalu pilih Berikutnya.

  7. Untuk opsi Konfigurasi tumpukan, pilih Berikutnya.

  8. Untuk Kemampuan, akui bahwa AWS CloudFormation dapat membuat sumber daya IAM di akun Anda.

  9. Pilih Kirim.

AWS CloudFormation ketentuan sumber daya yang ditentukan dalam template. Diperlukan beberapa menit untuk menyelesaikan penyediaan sumber daya Anda. Ketika status AWS CloudFormation tumpukan Anda adalah CREATE_COMPLETE, Anda siap untuk melanjutkan ke langkah berikutnya.

Untuk menguji respon GET integrasi
  1. Pada tab Sumber Daya AWS CloudFormation tumpukan untukdata-transformation-tutorial-console, pilih ID fisik API Anda.

  2. Di panel navigasi utama, pilih Resources, lalu pilih metode GET.

  3. Pilih tab Uji. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab.

    Output dari tes akan menunjukkan yang berikut:

    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

    Anda akan mengubah output ini sesuai dengan template pemetaan diPetStore Template pemetaan.

Untuk mengubah respon GET integrasi
  1. Pilih tab Respons Integrasi.

    Saat ini, tidak ada template pemetaan yang ditentukan, sehingga respons integrasi tidak akan diubah.

  2. Untuk Default - Respons, pilih Edit.

  3. Pilih template Pemetaan, lalu lakukan hal berikut:

    1. Pilih Tambahkan templat pemetaan.

    2. Untuk jenis Konten, masukkanapplication/json.

    3. Untuk badan Template, masukkan yang berikut ini:

      #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]

    Pilih Simpan.

Untuk menguji respon GET integrasi
  • Pilih tab Test, lalu pilih Test.

    Output dari tes akan menunjukkan respons yang ditransformasikan.

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]
Untuk mengubah data masukan dari POST metode
  1. Pilih metode POST.

  2. Pilih tab Permintaan integrasi, dan kemudian untuk pengaturan permintaan Integrasi, pilih Edit.

    AWS CloudFormation Template telah mengisi beberapa bidang permintaan integrasi.

    • Jenis integrasi adalah Layanan AWS.

    • Layanan AWS Ini adalah DynamoDB.

    • Metode HTTP adalahPOST.

    • Tindakan adalahPutItem.

    • Peran Eksekusi yang memungkinkan API Gateway untuk menempatkan item ke dalam tabel DynamoDB adalah. data-transformation-tutorial-console-APIGatewayRole AWS CloudFormation membuat peran ini untuk memungkinkan API Gateway memiliki izin minimal untuk berinteraksi dengan DynamoDB.

    Nama tabel DynamoDB belum ditentukan. Anda akan menentukan nama dalam langkah-langkah berikut.

  3. Untuk Request body passthrough, pilih Never.

    Ini berarti bahwa API akan menolak data dengan Content-Types yang tidak memiliki template pemetaan.

  4. Pilih template Pemetaan.

  5. Jenis Konten diatur keapplication/json. Ini berarti jenis konten yang bukan aplikasi/json akan ditolak oleh API. Untuk informasi selengkapnya tentang perilaku passthrough integrasi, lihat Perilaku passthrough integrasi

  6. Masukkan kode berikut ke dalam editor teks.

    { "TableName":"data-transformation-tutorial-console-ddb", "Item": { "id": { "N": $input.json("$.id") }, "type": { "S": $input.json("$.type") }, "price": { "N": $input.json("$.price") } } }

    Template ini menentukan tabel sebagai data-transformation-tutorial-console-ddb dan menetapkan item sebagaiid,type, danprice. Item akan berasal dari tubuh POST metode. Anda juga dapat menggunakan model data untuk membantu membuat template pemetaan. Untuk informasi selengkapnya, lihat Gunakan validasi permintaan di API Gateway.

  7. Pilih Simpan untuk menyimpan template pemetaan Anda.

Untuk menambahkan metode dan respons integrasi dari POST metode

AWS CloudFormation Membuat metode kosong dan respons integrasi. Anda akan mengedit tanggapan ini untuk memberikan informasi lebih lanjut. Untuk informasi selengkapnya tentang cara mengedit tanggapan, lihatReferensi pemetaan data permintaan dan respons API Amazon API Gateway.

  1. Pada tab Respons Integrasi, untuk Default - Respons, pilih Edit.

  2. Pilih Templat pemetaan, lalu pilih Tambahkan templat pemetaan.

  3. Untuk tipe Konten, masukkan. application/json

  4. Di editor kode, masukkan template pemetaan keluaran berikut untuk mengirim pesan output:

    { "message" : "Your response was recorded at $context.requestTime" }

    Untuk informasi lebih lanjut tentang variabel konteks, lihat$contextVariabel untuk model data, otorisasi, templat pemetaan, dan CloudWatch pencatatan akses.

  5. Pilih Simpan untuk menyimpan template pemetaan Anda.

Uji POST metodenya

Pilih tab Uji. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab.

  1. Di badan permintaan, masukkan contoh berikut.

    { "id": "4", "type" : "dog", "price": "321" }
  2. Pilih Uji.

    Output harus menunjukkan pesan sukses Anda.

    Anda dapat membuka konsol DynamoDB di https://console.aws.amazon.com/dynamodb/ untuk memverifikasi bahwa item contoh ada di tabel Anda.

Untuk menghapus AWS CloudFormation tumpukan
  1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  2. Pilih AWS CloudFormation tumpukan Anda.

  3. Pilih Hapus dan kemudian konfirmasikan pilihan Anda.

Mengatur transformasi data menggunakan AWS CLI

Dalam tutorial ini, Anda akan membuat tabel API dan DynamoDB yang tidak lengkap menggunakan file.zip berikut.zip. data-transformation-tutorial-cli API yang tidak lengkap ini memiliki /pets sumber daya dengan GET metode yang terintegrasi dengan titik akhir http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP. Anda akan membuat POST metode untuk terhubung ke tabel DynamoDB dan menggunakan template pemetaan untuk memasukkan data ke dalam tabel DynamoDB.

  • Anda akan mengubah data keluaran sesuai dengan template pemetaan diPetStore Template pemetaan.

  • Anda akan membuat POST metode untuk memungkinkan pengguna untuk menyimpan informasi ke POST tabel Amazon DynamoDB menggunakan template pemetaan.

Untuk membuat AWS CloudFormation tumpukan

Unduh dan unzip template pembuatan aplikasi untuk AWS CloudFormation.

Untuk menyelesaikan tutorial berikut, Anda memerlukan AWS Command Line Interface (AWS CLI) versi 2.

Untuk perintah panjang, karakter escape (\) digunakan untuk memisahkan perintah menjadi beberapa baris.

catatan

Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan (zipseperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk Linux. Contoh perintah CLI dalam panduan ini menggunakan pemformatan Linux. Perintah yang menyertakan dokumen JSON sebaris harus diformat ulang jika Anda menggunakan CLI Windows.

  1. Gunakan perintah berikut untuk membuat AWS CloudFormation tumpukan.

    aws cloudformation create-stack --stack-name data-transformation-tutorial-cli --template-body file://data-transformation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM
  2. AWS CloudFormation ketentuan sumber daya yang ditentukan dalam template. Diperlukan beberapa menit untuk menyelesaikan penyediaan sumber daya Anda. Gunakan perintah berikut untuk melihat status AWS CloudFormation tumpukan Anda.

    aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli
  3. Ketika status AWS CloudFormation tumpukan AndaStackStatus: "CREATE_COMPLETE", gunakan perintah berikut untuk mengambil nilai output yang relevan untuk langkah-langkah masa depan.

    aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"

    Nilai output adalah sebagai berikut:

    • ApiRole, yang merupakan nama peran yang memungkinkan API Gateway untuk menempatkan item dalam tabel DynamoDB. Untuk tutorial ini, nama perannya adalahdata-transformation-tutorial-cli-APIGatewayRole-ABCDEFG.

    • DDBTableName, yang merupakan nama dari tabel DynamoDB. Untuk tutorial ini, nama tabelnya adalah data-transformation-tutorial-cli-ddb

    • ResourceId, yang merupakan ID untuk sumber daya hewan peliharaan tempat POST metode GET dan diekspos. Untuk tutorial ini, Resource ID adalah efg456

    • ApiId, yang merupakan ID untuk API. Untuk tutorial ini, ID API adalahabc123.

Untuk menguji GET metode sebelum transformasi data
  • Gunakan perintah berikut untuk menguji GET metode.

    aws apigateway test-invoke-method --rest-api-id abc123 \ --resource-id efg456 \ --http-method GET

    Output dari tes akan menunjukkan yang berikut ini.

    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

    Anda akan mengubah output ini sesuai dengan template pemetaan diPetStore Template pemetaan.

Untuk mengubah respon GET integrasi
  • Gunakan perintah berikut untuk memperbarui respons integrasi untuk GET metode ini. Ganti rest-api-iddan resource-id dengan nilai Anda.

    Gunakan perintah berikut untuk membuat respons integrasi.

    aws apigateway put-integration-response --rest-api-id abc123 \ --resource-id efg456 \ --http-method GET \ --status-code 200 \ --selection-pattern "" \ --response-templates '{"application/json": "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n \"description\": \"Item $elem.id is a $elem.type\",\n \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]"}'
Untuk menguji GET metode
  • Gunakan perintah berikut untuk menguji GET metode.

    aws apigateway test-invoke-method --rest-api-id abc123 \ --resource-id efg456 \ --http-method GET \

    Output dari tes akan menunjukkan respons yang ditransformasikan.

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]
Untuk membuat POST metode
  1. Gunakan perintah berikut untuk membuat metode baru pada /pets sumber daya.

    aws apigateway put-method --rest-api-id abc123 \ --resource-id efg456 \ --http-method POST \ --authorization-type "NONE" \

    Metode ini akan memungkinkan Anda untuk mengirim informasi hewan peliharaan ke tabel DynamoDB yang Anda buat di tumpukan. AWS CloudFormation

  2. Gunakan perintah berikut untuk membuat Layanan AWS integrasi pada POST metode.

    aws apigateway put-integration --rest-api-id abc123 \ --resource-id efg456 \ --http-method POST \ --type AWS \ --integration-http-method POST \ --uri "arn:aws:apigateway:us-east-2:dynamodb:action/PutItem" \ --credentials arn:aws:iam::111122223333:role/data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG \ --request-templates '{"application/json":"{\"TableName\":\"data-transformation-tutorial-cli-ddb\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}"}'
  3. Gunakan perintah berikut untuk membuat respons metode untuk panggilan POST metode yang berhasil.

    aws apigateway put-method-response --rest-api-id abc123 \ --resource-id efg456 \ --http-method POST \ --status-code 200
  4. Gunakan perintah berikut untuk membuat respons integrasi untuk panggilan POST metode yang berhasil.

    aws apigateway put-integration-response --rest-api-id abc123 \ --resource-id efg456 \ --http-method POST \ --status-code 200 \ --selection-pattern "" \ --response-templates '{"application/json": "{\"message\": \"Your response was recorded at $context.requestTime\"}"}'
Untuk menguji POST metode
  • Gunakan perintah berikut untuk menguji POST metode.

    aws apigateway test-invoke-method --rest-api-id abc123 \ --resource-id efg456 \ --http-method POST \ --body '{\"id\": \"4\", \"type\": \"dog\", \"price\": \"321\"}'

    Output akan menampilkan pesan yang berhasil.

Untuk menghapus AWS CloudFormation tumpukan
  • Gunakan perintah berikut untuk menghapus AWS CloudFormation sumber daya Anda.

    aws cloudformation delete-stack --stack-name data-transformation-tutorial-cli

AWS CloudFormation Templat transformasi data yang lengkap

Contoh berikut adalah AWS CloudFormation template lengkap, yang membuat API dan tabel DynamoDB dengan sumber daya /pets GET dengan dan metode. POST

  • GETMetode ini akan mendapatkan data dari titik akhir http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP. Data keluaran akan diubah sesuai dengan template pemetaan diPetStore Template pemetaan.

  • POSTMetode ini akan memungkinkan pengguna untuk menyimpan informasi POST ke tabel DynamoDB menggunakan template pemetaan.

AWSTemplateFormatVersion: 2010-09-09 Description: A completed Amazon API Gateway REST API that uses non-proxy integration to POST to an Amazon DynamoDB table and non-proxy integration to GET transformed pets data. Parameters: StageName: Type: String Default: v1 Description: Name of API stage. Resources: DynamoDBTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: !Sub data-transformation-tutorial-complete AttributeDefinitions: - AttributeName: id AttributeType: N KeySchema: - AttributeName: id KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 APIGatewayRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - 'sts:AssumeRole' Effect: Allow Principal: Service: - apigateway.amazonaws.com Policies: - PolicyName: APIGatewayDynamoDBPolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'dynamodb:PutItem' Resource: !GetAtt DynamoDBTable.Arn Api: Type: 'AWS::ApiGateway::RestApi' Properties: Name: data-transformation-complete-api ApiKeySourceType: HEADER PetsResource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref Api ParentId: !GetAtt Api.RootResourceId PathPart: 'pets' PetsMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetsResource HttpMethod: GET ApiKeyRequired: false AuthorizationType: NONE Integration: Type: HTTP Credentials: !GetAtt APIGatewayRole.Arn IntegrationHttpMethod: GET Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/ PassthroughBehavior: WHEN_NO_TEMPLATES IntegrationResponses: - StatusCode: '200' ResponseTemplates: application/json: "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n \"description\": \"Item $elem.id is a $elem.type\",\n \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]" MethodResponses: - StatusCode: '200' PetsMethodPost: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetsResource HttpMethod: POST ApiKeyRequired: false AuthorizationType: NONE Integration: Type: AWS Credentials: !GetAtt APIGatewayRole.Arn IntegrationHttpMethod: POST Uri: arn:aws:apigateway:us-west-1:dynamodb:action/PutItem PassthroughBehavior: NEVER RequestTemplates: application/json: "{\"TableName\":\"data-transformation-tutorial-complete\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}" IntegrationResponses: - StatusCode: 200 ResponseTemplates: application/json: "{\"message\": \"Your response was recorded at $context.requestTime\"}" MethodResponses: - StatusCode: '200' ApiDeployment: Type: 'AWS::ApiGateway::Deployment' DependsOn: - PetsMethodGet Properties: RestApiId: !Ref Api StageName: !Sub '${StageName}' Outputs: ApiId: Description: API ID for CLI commands Value: !Ref Api ResourceId: Description: /pets resource ID for CLI commands Value: !Ref PetsResource ApiRole: Description: Role ID to allow API Gateway to put and scan items in DynamoDB table Value: !Ref APIGatewayRole DDBTableName: Description: DynamoDB table name Value: !Ref DynamoDBTable

Langkah selanjutnya

Untuk menjelajahi template pemetaan yang lebih kompleks, lihat contoh berikut: