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.
Topik
Mengatur transformasi data menggunakan konsol API Gateway
Dalam tutorial ini, Anda akan membuat tabel DynamoDB yang tidak lengkap API dan menggunakan file.zip berikut.zip. data-transformation-tutorial-console Tidak lengkap ini API memiliki /pets
sumber daya dengan GET
dan POST
metode.
-
GET
Metode ini akan mendapatkan data darihttp://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP titik akhir. Data keluaran akan diubah sesuai dengan template pemetaan diPetStore Template pemetaan. POST
Metode ini akan memungkinkan pengguna untuk menyimpan informasiPOST
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 tidak lengkap. API Anda akan menyelesaikan langkah-langkah lainnya di konsol API Gateway.
Untuk membuat AWS CloudFormation tumpukan
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Pilih Buat tumpukan kemudian pilih Dengan sumber daya baru (standar).
-
Untuk Tentukan templat, pilih Unggah file templat.
-
Pilih template yang Anda unduh.
-
Pilih Berikutnya.
-
Untuk nama Stack, masukkan
data-transformation-tutorial-console
dan kemudian pilih Berikutnya. -
Untuk opsi Konfigurasi tumpukan, pilih Berikutnya.
-
Untuk Kemampuan, akui bahwa AWS CloudFormation dapat membuat IAM sumber daya di akun Anda.
-
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
-
Pada tab Sumber Daya AWS CloudFormation tumpukan untuk
data-transformation-tutorial-console
, pilih ID fisik AndaAPI. -
Di panel navigasi utama, pilih Resources, lalu pilih GETmetode.
-
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
-
Pilih tab Respons Integrasi.
Saat ini, tidak ada template pemetaan yang ditentukan, sehingga respons integrasi tidak akan diubah.
-
Untuk Default - Respons, pilih Edit.
-
Pilih template Pemetaan, lalu lakukan hal berikut:
Pilih Tambahkan templat pemetaan.
Untuk jenis Konten, masukkan
application/json
.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 input dari POST
metode
-
Pilih POSTmetodenya.
-
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.
-
HTTPMetodenya adalah
POST
. -
Tindakan adalah
PutItem
. -
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.
-
Untuk Request body passthrough, pilih Never.
Ini berarti bahwa API akan menolak data dengan Content-Types yang tidak memiliki template pemetaan.
Pilih template Pemetaan.
Jenis Konten diatur ke
application/json
. Ini berarti jenis konten yang bukan aplikasi/json akan ditolak oleh. API Untuk informasi selengkapnya tentang perilaku passthrough integrasi, lihat Perilaku passthrough integrasi-
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 tubuhPOST
metode. Anda juga dapat menggunakan model data untuk membantu membuat template pemetaan. Untuk informasi selengkapnya, lihat Minta validasi untuk REST APIs di API Gateway. -
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 API permintaan dan respons Amazon API Gateway.
-
Pada tab Respons Integrasi, untuk Default - Respons, pilih Edit.
Pilih Templat pemetaan, lalu pilih Tambahkan templat pemetaan.
Untuk tipe Konten, masukkan.
application/json
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.
Pilih Simpan untuk menyimpan template pemetaan Anda.
Uji POST
metodenya
Pilih tab Uji. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab.
-
Di badan permintaan, masukkan contoh berikut.
{ "id": "4", "type" : "dog", "price": "321" }
-
Pilih Uji.
Output harus menunjukkan pesan sukses Anda.
Anda dapat membuka konsol DynamoDB https://console.aws.amazon.com/dynamodb/
di untuk memverifikasi bahwa item contoh ada di tabel Anda.
Untuk menghapus AWS CloudFormation tumpukan
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Pilih AWS CloudFormation tumpukan Anda.
-
Pilih Hapus dan kemudian konfirmasikan pilihan Anda.
Mengatur transformasi data menggunakan AWS CLI
Dalam tutorial ini, Anda akan membuat tabel DynamoDB yang tidak lengkap API dan menggunakan file.zip berikut.zip. data-transformation-tutorial-cli Tidak lengkap ini API memiliki /pets
sumber daya dengan GET
metode yang terintegrasi dengan titik http://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP akhir. 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 kePOST
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 CLI perintah Bash yang biasa Anda gunakan (sepertizip
) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk
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
-
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
-
Ketika status AWS CloudFormation tumpukan Anda
StackStatus: "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 adalah
data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG
. DDBTableName, yang merupakan nama tabel DynamoDB. Untuk tutorial ini, nama tabelnya adalah
data-transformation-tutorial-cli-ddb
ResourceId, yang merupakan ID untuk sumber daya hewan peliharaan tempat
POST
metodeGET
dan diekspos. Untuk tutorial ini, Resource ID adalahefg456
ApiId, yang merupakan ID untukAPI. Untuk tutorial ini, API ID adalah
abc123
.
-
Untuk menguji GET
metode sebelum transformasi data
Gunakan perintah berikut untuk menguji
GET
metode.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GETOutput 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. Gantirest-api-id
andresource-id
dengan nilai-nilai Anda.Gunakan perintah berikut untuk membuat respons integrasi.
aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --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-idefg456
\ --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
-
Gunakan perintah berikut untuk membuat metode baru pada
/pets
sumber daya.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --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
-
Gunakan perintah berikut untuk membuat Layanan AWS integrasi pada
POST
metode.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --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\")} }}"}' -
Gunakan perintah berikut untuk membuat respons metode untuk panggilan
POST
metode yang berhasil.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 -
Gunakan perintah berikut untuk membuat respons integrasi untuk panggilan
POST
metode yang berhasil.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --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-idefg456
\ --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 menciptakan API dan tabel DynamoDB dengan sumber daya /pets
GET
dengan dan metode. POST
-
GET
Metode ini akan mendapatkan data darihttp://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP titik akhir. Data keluaran akan diubah sesuai dengan template pemetaan diPetStore Template pemetaan. POST
Metode ini akan memungkinkan pengguna untuk menyimpan informasiPOST
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:
-
Lihat model yang lebih kompleks dan templat pemetaan dengan contoh album Contoh album foto foto.
-
Untuk informasi lebih lanjut tentang model, lihatModel data untuk REST APIs.
-
Untuk informasi tentang cara memetakan output kode respons yang berbeda,Mengatur pemetaan data permintaan dan respons menggunakan konsol Gateway API.
-
Untuk informasi tentang cara mengatur pemetaan data dari data API permintaan metode,. APITemplate pemetaan gateway dan referensi variabel pencatatan akses