#python-2.7 #amazon-web-services #boto3
#python-2.7 #amazon-веб-сервисы #boto3
Вопрос:
У меня есть VPC, который я создал в консоли AWS. По сути, я хотел бы создать скрипт на python, который определяет VPC и несколько других аргументов CLI с помощью click. Но одна часть кода продолжает нарушаться, когда я создаю группу безопасности. Он жалуется, что идентификатор VPC не существует, когда он существует:
@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???
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
Ответ №1:
Я считаю, что ваше решение довольно простое. Значение, хранящееся в переменных vpc, равно ‘vpc-id ….’.
Этого должно быть достаточно, чтобы удалить одинарные кавычки.
В качестве альтернативы я бы попробовал использовать client и посмотреть, происходит ли это и там;
ec2 = boto3.client('ec2')
ec2.create_security_group(GroupName='webserver',Description='webserver',VpcId=vpc)
Последнее, что нужно проверить, это регион, убедитесь, что ваш vpc находится в правильном.
Комментарии:
1. Я передаю переменную vpc методу, разве это не должно работать, поскольку оно содержит идентификатор vpc?
2. Я видел это в переданном, где одинарные кавычки нарушали его. В противном случае я не вижу ничего плохого. Кроме того, вы могли бы попробовать использовать клиент, я обновил свой ответ.
3. Я не заключаю переменную в одинарные кавычки… Я думаю, может быть, vpc приведен неправильно?
4. Я имею в виду, что если ваш vpcID определенно vpc-0f79b10c0f471033c и вы можете видеть это в консоли, то мне трудно увидеть что-то неправильное. Единственное, что нужно подтвердить, это регион. Ваш VPC определенно находится в регионе, который вы определяете в переменной region?
5. РЖУНИМО, ты гениальный чувак.. Я полагал, что по умолчанию будет использоваться us-east-1.. Вместо этого он в Огайо..