boto3中不存在VPC Id

问题描述 投票:0回答:1

我在AWS控制台中创建了一个VPC。基本上,我想创建一个python脚本,使用click指定一个VPC和一些其他CLI args。但是,当我创建一个安全组时,代码的一部分不断破坏。它抱怨VPC Id不存在时:

@click.command()
@click.option('--ami', help='What AWS AMI are you using?')
@click.option('--instancetype', help='AWS EC2 instance type')
@click.option('--vpc', help='VPC ID')
@click.option('--isweb',default=True,type=bool,help='Is this a web server')
@click.pass_context
def build(ctx,ami,instancetype,vpc,isweb):
    """ Will build out the EC2 instance """
    log.info("Building EC2...")
    log.info("Collecting Information....")
    log.info("AMI: " + ami)
    log.info("Instance Type: " + instancetype)
    log.info("VPC ID: " + vpc)
    log.info("Is this a web server: " + str(isweb))

    if isweb:
        log.info("Spinning up Web Server")
        log.info("Reading from Configuration file")

        config = configparser.RawConfigParser()
        config_path = os.getcwd() + '/config.txt'
        config.read(config_path)
        log.info("Reading from config file" + config_path)
        details_dict = dict(config.items('builder'))

        access_key = config.get('builder','aws_access_key_id')
        secret_key = config.get('builder','aws_secret_access_key')
        region = config.get('builder', 'region')
        ec2 = boto3.resource('ec2', aws_access_key_id=access_key,  aws_secret_access_key=secret_key, region_name=region)
        if ec2:
            log.info("AWS Session Created")
            sec_group = ec2.create_security_group(
                GroupName='webserver', Description='webserver', VpcId=vpc)
            sec_group.authorize_ingress(
                CidrIp='0.0.0.0/0',
                IpProtocol='tcp',
                FromPort=80,
                ToPort=80
                )

我传递的参数是vpc-它显然存在于控制台中。为什么不接受VPC id ???

ryan@T1000:~/Desktop/ec2-builder$ python ec2-build.py build --ami="ami-0de7daa7385332688" --instancetype=t2.micro --isweb=True --vpc=vpc-0f79b10c0f471033c
2019-03-02 09:46:47,248 Building EC2...
2019-03-02 09:46:47,248 Collecting Information....
2019-03-02 09:46:47,248 AMI: ami-0de7daa7385332688
2019-03-02 09:46:47,248 Instance Type: t2.micro
2019-03-02 09:46:47,248 VPC ID: vpc-0f79b10c0f471033c
2019-03-02 09:46:47,248 Is this a web server: True
2019-03-02 09:46:47,248 Spinning up Web Server
2019-03-02 09:46:47,248 Reading from Configuration file
2019-03-02 09:46:47,249 Reading from config file/home/ryan/Desktop/ec2-builder/config.txt
2019-03-02 09:46:47,407 AWS Session Created
Traceback (most recent call last):
  File "ec2-build.py", line 87, in <module>
    if __name__ == "__main__": main()
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "ec2-build.py", line 59, in build
    GroupName='webserver', Description='webserver', VpcId=vpc)
  File "/usr/local/lib/python2.7/dist-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidVpcID.NotFound) when calling the CreateSecurityGroup operation: The vpc ID 'vpc-0f79b10c0f471033c' does not exist
python-2.7 amazon-web-services boto3
1个回答
1
投票

我相信你的解决方案很简单。存储在vpc变量中的值是'vpc-id ....'。

删除单引号应该足够了。

或者,我会尝试使用客户端,看看它是否也发生在那里;

ec2 = boto3.client('ec2')

ec2.create_security_group(GroupName='webserver',Description='webserver',VpcId=vpc)

最后要检查的是区域,确保你的vpc正确。

© www.soinside.com 2019 - 2024. All rights reserved.