为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 上使用 Pulumi 创建新的 ec2 实例会出现意外

在 Golang 上使用 Pulumi 创建新的 ec2 实例会出现意外

Go
波斯汪 2022-12-13 10:38:48
我正在尝试在 Golang 上使用 Pulumi 创建一个新的 AWS EC2 实例。这是我的功能:    ec2, errEc2 := ec2.NewInstance(ctx, name, &ec2.InstanceArgs{    SubnetId:               pulumi.String(subnet.Id),    Ami:                    pulumi.String("ami-0022f774911c1d690"),    AvailabilityZone:       pulumi.String("us-east-1"]),    InstanceType:           pulumi.String("t3.micro"),    VpcSecurityGroupIds:    pulumi.StringArray{secGroup.ID()},    Tags: pulumi.StringMap{        "Project": pulumi.String("projectName"),        "Name": pulumi.String("exampleName"),        "Environment": pulumi.String("staging"),    },})使用此文档作为参考,输入参数对我来说看起来不错但是当我跑步时pulumi up我收到这个奇怪的错误    error: 1 error occurred:    * creating EC2 Instance: MissingParameter: The request must contain the parameter ImageId    status code: 400, request id: 91babb9b....在文档或网络中的任何地方,我都没有发现需要使用 ImageId,并且当我尝试将其提供给 ec2.NewInstance 函数时,出现“未知字段”语法错误笔记:我正在使用这些包github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2github.com/pulumi/pulumi/sdk/v3/go/pulumi
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

修复了错误——我不知道是什么问题,因为 ID 是相同的,但我修复它的方法是这样做:


之前使用 LookupAmi 函数:


func GetAmi(ctx *pulumi.Context, Ami map[string]string) (*ec2.LookupAmiResult, error){

ami, amiErr := ec2.LookupAmi(ctx, &ec2.LookupAmiArgs{

    NameRegex:  pulumi.StringRef(Ami["Name"]),

    Owners: []string {

        Ami["Owner"],

    },

})

if amiErr != nil {

    log.Fatal("Got error while trying to get ami image!", amiErr)

}

return ami, amiErr

}


然后才使用先前函数中的 ami.Id 字段创建 ec2 实例:


    ec2, errEc2 := ec2.NewInstance(ctx, name, &ec2.InstanceArgs{

    SubnetId:               pulumi.String(subnet.Id),

    Ami:                    pulumi.String(ami.Id),

    AvailabilityZone:       pulumi.String(Ec2["AvailabilityZone"]),

    InstanceType:           pulumi.String(Ec2["InstanceType"]),

    VpcSecurityGroupIds:    pulumi.StringArray{secGroup.ID()},

    Tags: pulumi.StringMap{

        "Project": pulumi.String(Ec2["Name"]),

        "Name": pulumi.String(name),

        "Environment": pulumi.String(environment),

    },

})

if errEc2 != nil {

    log.Fatalln("Got error while trying to create ec2 instance!", errEc2)

}

return ec2, errEc2


查看完整回答
反对 回复 2022-12-13
?
撒科打诨

TA贡献1934条经验 获得超2个赞

我看到您的代码有一些错误:

AvailabilityZone:       pulumi.String("us-east-1"]),

这里多了一句],应该是:

AvailabilityZone:       pulumi.String("us-east-1"),

除此之外,它us-east-1不是一个有效的可用区,你可能想要us-east-1a,所以最终:

AvailabilityZone:       pulumi.String("us-east-1a"),

关于您的图像 ID 问题,我会检查您引用的 AMI 是否确实存在于您的帐户中。图像 ID 属性由Amiid 发送,所以应该足够了


查看完整回答
反对 回复 2022-12-13
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信