Ошибка применения плана terraform для создания конечной точки VPC в AWS - PullRequest
2 голосов
/ 04 ноября 2019

Я пытаюсь создать конечную точку VPC для узлов EC2 для доступа к сегментам S3 в пределах того же VPC в us-east-1 без необходимости прохода через шлюз NAT. Кажется, все работает нормально, когда я настраиваю один вручную через интерфейс браузера. Затем я удалил его и перешел к определению в моей конфигурации terraform как aws_vpc_endpoint следующим образом:

    resource "aws_vpc_endpoint" "vpc-s3-endpoint-dev" {
      vpc_id          = "${aws_vpc.dev.id}"
      service_name    = "com.amazonaws.us-east-1.s3"
      route_table_ids = ["${aws_route_table.dev-us-east-1-private.id}"]
    }

План идет хорошо, и когда я пытаюсь применить, я просто получаю это:

Error: Error applying plan:

1 error(s) occurred:

* aws_vpc_endpoint.vpc-s3-endpoint-dev: 1 error(s) occurred:

* aws_vpc_endpoint.vpc-s3-endpoint-dev: Error creating VPC Endpoint: InvalidServiceName: The Vpc Endpoint Service 'com.amazonaws.us-east-1.s3' does not exist
    status code: 400, request id: b062c637-ec55-4da4-8527-73b24c10fa3d

Из того, что я могу сказать, я все сделал правильно. Эта таблица маршрутов - та же самая, которую я связал с тестовой конечной точкой VPC, которую я также успешно создал вручную. Я попытался сделать это, разбив связанную таблицу маршрутов на отдельную aws_vpc_endpoint_route_table_association, и даже ни одной вообще. Я также пробовал другие псевдонимы для конечной точки сервиса us-east-1 S3 (com.amazonaws.s3 и т. Д.). Я просто продолжаю получать ту же самую расстраивающую ошибку, и у меня нет идей.

Редактировать: еще немного контекста

   provider "aws" { 
     alias = "dev" 
     version = "= 2.12.0" 
     profile = "development" 
     region = "us-east-1" 
   } 
     resource "aws_vpc" "dev" { 
       provider = "aws.dev" 
       cidr_block = "10.201.0.0/16" 
       enable_dns_support = "true" 
       enable_dns_hostnames = "true" 
     } 

Добавление конкретного поставщика в ресурс aws_vpc_endpointпохоже, сработало.

aws_vpc_endpoint.vpc-s3-endpoint-dev-xxx-xxxxx: Creation complete after 6s (ID: vpce-xxxxxxxxxxxxx)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

Итак, сегодня мы видим похожую ошибку в us-east-1 по этому вопросу:

data "aws_vpc_endpoint_service" "s3" {
    service = "s3"
}

Нам удалось повторить проблему с CLI:

aws ec2 describe-vpc-endpoint-services | jq '.ServiceDetails[] | select(.ServiceName=="com.amazonaws.us-east-1.s3")'

Показываетесть служба с таким именем, но этот вызов вызывает ошибку:

$ aws ec2 describe-vpc-endpoint-services --service-names com.amazonaws.us-east-1.s3
An error occurred (InvalidServiceName) when calling the DescribeVpcEndpointServices operation: The Vpc Endpoint Service 'com.amazonaws.us-east-1.s3' does not exist

Служба поддержки AWS сообщает, что есть некоторая проблема с этим API, возникающая в us-east-1, но не в us-west-1или нас-запад-2. Таким образом, возможно, ваш код Terraform действительно правильный, но есть какая-то другая проблема с интерфейсом AWS API?

0 голосов
/ 12 ноября 2019

Проблема уже была решена в комментариях, но я оставлю это здесь для дальнейшего использования, так как суть проблемы здесь.

Если вы используете alias в блоке provider, этот провайдер не будет использоваться, если вы не укажете явно на уровне ресурсов (как это было сделано выше в provider = "aws.dev"). Поставщиком по умолчанию в случае, если вы не укажете явным образом, будет либо provider "aws", с которым не связан псевдоним, а если его не существует, он просто примет подразумеваемого aws провайдера. .

Мораль истории, не используйте псевдоним вашего провайдера, если у вас нет веских причин;Хорошая причина - наличие единой кодовой базы, которая публикуется на нескольких отдельных учетных записях AWS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...