Bina Go Serverless REST API dan Sebarkan ke AWS menggunakan rangka kerja SAM (Amazon Linux untime)

WBOY
Lepaskan: 2024-08-23 06:42:11
asal
576 orang telah melayarinya

Mengapa Tutorial Pergi Lagi

AWS telah menamatkan beberapa perkhidmatan dan masa jalan baru-baru ini. Seperti yang telah kita lihat dengan pemberhentian CodeCommit kesayangan kami dan perkhidmatan penting lain, Go1.x tidak lagi disokong untuk fungsi AWS Lambda.

Jika anda cuba menggunakan kebanyakan tutorial yang sudah lapuk, anda mungkin menghadapi ralat seperti ini:

Resource creation Initiated CREATE_FAILED AWS::Lambda::Function DemoFunction Resource handler returned message: "The runtime parameter of go1.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use a supported runtime while creating or updating functions. (Service: Lambda, Status Code: 400, Request ID: 81f1f708-0a7a-40d0-8442-b9c16510d01f)" ROLLBACK_IN_PROGRESS AWS::CloudFormation::Stack lambda-go-gorilla The following resource(s) failed to create: [DemoFunction]. Rollback requested by user.
Salin selepas log masuk

Perkara utama ialah satu-satunya pemalar dalam perisian ialah perubahan. Walau bagaimanapun, terdapat beberapaprinsip abadiyang perlu kita sentiasa ingat:

Untuk menangani isu ini, saya memutuskan untuk mencipta repositori terkini dengan semua infrastruktur yang diperlukan untuk menggunakan aplikasi Go. Terdapat dua pilihan yang tersedia:

  1. Menggunakan Fargate menggunakan bekas Docker.
  2. Menggunakan rangka kerja SAM pada AWS.

Anda boleh GitHub mencari repositori di sini.

Prinsip abadi dalam Pembangunan Perisian

  • Infrastruktur sebagai Kod adalah penting.
  • Konvensyen penamaan yang baik dalam perisian adalah penting.
  • Sentiasa uji logik anda.
  • Ketersediaan & skalabiliti
  • Deployment Pipeline sebagai mekanisme untuk mengautomasikan proses penghantaran perisian.
  • Pemerhatian Adalah Wajib.
  • Keselamatan ialah warganegara kelas pertama dalam aplikasi asli awan.
  • Go ialah pilihan terbaik untuk membina API.

Infrastruktur sebagai Kod adalah Penting

Infrastruktur yang tidak berubah membolehkan kami mengisytiharkan perkara yang kami mahu pada tahap yang lebih tinggi dan memastikan persekitaran pembangunan dan pengeluaran kekal sedekat mungkin. Contohnya:

CompoundingFunction: Type: AWS::Serverless::Function Metadata: BuildMethod: makefile Properties: FunctionName: CompoundingFunction Architectures: ["arm64"] Handler: bootstrap Runtime: provided.al2 CodeUri: ./functions/CompoundingFunction/ MemorySize: 512 Timeout: 10 Environment: Variables: COMPOUNDING_TABLE_NAME: !Ref CompoundingTable Policies: - DynamoDBCrudPolicy: TableName: !Ref CompoundingTable Events: ApiGatewayPost: Type: Api Properties: RestApiId: !Ref ApiGateway Path: /compounding Method: POST
Salin selepas log masuk

Konvensyen Penamaan Baik dalam Perisian Adalah Kunci

Jangan takut untuk memfaktorkan semula jika anda mempunyai rangkaian ujian yang baik. Pemfaktoran semula adalah aktiviti penting dalam pembangunan perisian. Nama adalah penting kerana ia muncul di mana-mana dalam modul, fungsi, pakej, pembolehubah, dll.

package main import ( "context" "encoding/json" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) // Response is the structure for the response JSON type Response struct { Message string `json:"message"` GainsPerYear []float64 `json:"gainsPerYear"` } type Request struct { Principal float64 `json:"principal"` AnnualRate float64 `json:"annualRate"` Years int `json:"years"` } func HelloHandler(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { var req Request err := json.Unmarshal([]byte(event.Body), &req) if err != nil { return createResponse(400, "Invalid request body") } fmt.Println("Request", req) gainsPerYear := CalculateCompoundInterest(req.Principal, req.AnnualRate, req.Years) fmt.Println(gainsPerYear) response := Response{ Message: "Calculation successful", GainsPerYear: gainsPerYear, } body, err := json.Marshal(response) if err != nil { return createResponse(500, "Error marshalling response") } return createResponse(200, string(body)) } func createResponse(statusCode int, body string) (events.APIGatewayProxyResponse, error) { return events.APIGatewayProxyResponse{ StatusCode: statusCode, Body: body, Headers: map[string]string{"Content-Type": "application/json"}, }, nil } func main() { lambda.Start(HelloHandler) }
Salin selepas log masuk

Sentiasa Uji Logik Anda

Dalam aplikasi tanpa pelayan, ujian unit adalah penting, tetapi jangan lupa untuk memasukkan juga ujian penyepaduan, kerana kebanyakan aplikasi ini bergantung pada penyepaduan dan dasar untuk menyelesaikan masalah perniagaan.

func TestCalculateCompoundInterest(t *testing.T) { principal := 100000000.0 annualRate := 10.0 years := 10 result := CalculateCompoundInterest(principal, annualRate, years) lastElement := round(result[len(result)-1], 2) expected := round(259374246.01, 2) if !reflect.DeepEqual(lastElement, expected) { t.Errorf("Expected %v, but got %v", expected, lastElement) } }
Salin selepas log masuk

Ketersediaan & Kebolehskalaan

Seni bina tanpa pelayan sangat tersedia secara lalai dan dipacu peristiwa, mengalih keluar kebanyakan tugas operasi. Walau bagaimanapun, jika anda memilih untuk bergantung pada ECS dan bekas, adalah penting untuk menyertakan pengimbang beban untuk mengagihkan trafik antara pelayan anda, memastikan ketersediaan dan kebolehskalaan.

CompoundingLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: compounding-nlb Scheme: internet-facing Type: network Subnets: - !Ref PublicSubnetOne - !Ref PublicSubnetTwo
Salin selepas log masuk

Saluran Paip Kerahan

Saluran paip penggunaan mengautomasikan proses penghantaran perisian. Kami mencipta Makefile untuk memudahkan proses ini, menjadikannya mudah untuk menggunakan dan melaksanakan tugas berulang dengan satu arahan. Pendekatan ini meningkatkan kecekapan dan ketekalan dalam aliran kerja penggunaan anda.

Build Go Serverless REST APIs and Deploy to AWS using the SAM framework (Amazon Linux untime)

Kebolehlihatan Adalah Wajib

Pastikan anda mempunyai pengesanan, pengelogan dan metrik. Dengan aplikasi tanpa pelayan, mendayakan ciri ini semudah menambah Tracing: Active. Keupayaan untuk melihat semua log di tempat pusat seperti CloudWatch dan memantau interaksi perkhidmatan adalah tidak ternilai.

Build Go Serverless REST APIs and Deploy to AWS using the SAM framework (Amazon Linux untime)

Keselamatan Adalah Warganegara Kelas Pertama dalam Aplikasi Cloud-Native

Keselamatan adalah terpenting dalam semua aplikasi. Menggunakan Amazon Cognito menyediakan pengesahan pengguna yang mantap, manakala kunci API menambah lapisan kawalan dan keizinan tambahan, memastikan bahawa hanya pelanggan yang diberi kuasa boleh mengakses API anda.

Auth: DefaultAuthorizer: CompoundingAuthorizer Authorizers: CompoundingAuthorizer: UserPoolArn: XXXX LambdaTokenAuthorizer: FunctionArn: !GetAtt LambdaTokenAuthorizerFunction.Arn FunctionPayloadType: REQUEST Identity: Headers: - Authorization ReauthorizeEvery: 100 AddDefaultAuthorizerToCorsPreflight: false
Salin selepas log masuk

Tetapkan kebenaran minimum yang diperlukan kepada setiap perkhidmatan, pengguna dan komponen untuk mengurangkan permukaan serangan dan menghalang akses tanpa kebenaran.Prinsip Keistimewaan Terkecil:

Policies: - DynamoDBCrudPolicy: TableName: !Ref CompoundingTable
Salin selepas log masuk

Rujukan

  1. Terraform dalam Tindakan - Penggunaan dan strategi praktikal untuk melaksanakan Terraform, alat untuk membina, mengubah dan mengurus infrastruktur.
  2. Saluran Paip Penghantaran Berterusan

Kesimpulan

Perisian sentiasa berkembang, dan walaupun beberapa alat dan amalan akan berubah, prinsip asasnya tetap sama. Kami memerlukan infrastruktur tidak berubah, CI/CD, konvensyen penamaan yang baik, strategi ujian yang mantap, keselamatan dalam API kami dan kecekapan dalam aplikasi kami. Itulah sebabnya saya memutuskan untuk mencipta semula projek ini dengan cara tanpa pelayan.

Tidak pernah ada masa yang lebih baik untuk menjadi seorang jurutera dan mencipta nilai dalam masyarakat melalui perisian.

  • LinkedIn
  • Twitter
  • GitHub

Jika anda menyukai artikel tersebut, lawati blog saya jorgetovar.dev

Atas ialah kandungan terperinci Bina Go Serverless REST API dan Sebarkan ke AWS menggunakan rangka kerja SAM (Amazon Linux untime). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!