php小編蘋果為您帶來了關于AWS Golang SDK v2的介紹。如果您正在使用Go語言編寫AWS腳本,您可能想要向腳本中添加一些自定義的函數以增強其功能。本文將向您展示如何使用AWS Golang SDK v2向Go AWS腳本中添加函數,讓您的腳本更加強大和靈活。無論您是初學者還是有經驗的開發人員,都能從本文中獲得有用的技巧和指導。讓我們一起來探索吧!
問題內容
嘗試將腳本的每個部分分成函數,以便稍后使用輸出。
嘗試將實例傳遞給 printvolumesinfo 函數時,無法使該部分工作。
[]instanceblockdevicemapping 是 instance 結構的一部分,但我不確定使用什么作為函數的輸入。
`
package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/ec2" ) var client *ec2.Client func init() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error, " + err.Error()) } client = ec2.NewFromConfig(cfg) } func printVolumesInfo(volumes []ec2.InstanceBlockDeviceMapping) { for _, b := range volumes { fmt.Println(" " + *b.DeviceName) fmt.Println(" " + *b.Ebs.VolumeId) } } func main() { parms := &ec2.DescribeInstancesInput{} result, err := client.DescribeInstances(context.TODO(), parms) if err != nil { fmt.Println("Error calling ec2: ", err) return } for _, r := range result.Reservations { fmt.Println("Reservation ID: " + *r.ReservationId) fmt.Println("Instance IDs:") for _, i := range r.Instances { fmt.Println(" " + *i.InstanceId) printVolumesInfo(i.InstanceBlockDeviceMapping) } } }
登錄后復制
`
收到錯誤:
./main.go:74:37:未定義:ec2.instanceblockdevicemapping
嘗試使用不同的參數,包括[]instanceblockdevicemapping和blockdevicemapping。此外,還使用了 ec2 和客戶端作為值。
解決方法
檢查文檔:https://www.php.cn/link/421b0ea70ab7fd681ae63a8f12695199
該字段稱為 BlockDeviceMappings
。并且類型 InstanceBlockDeviceMapping
位于包 github.com/aws/aws-sdk-go-v2/service/ec2/types
中,而不是位于 ec2
包中。
-
將 github.com/aws/aws-sdk-go-v2/service/ec2/types` 添加到您的導入
將函數
printVolumes
的參數類型更改為 volumes []ec2.InstanceBlockDeviceMapping
將該函數調用為 printVolumesInfo(i.BlockDeviceMappings)