Может ли terraform выполняться без доступа к интернету

Я пытаюсь автоматизировать развертывание облака AWS с помощью terraform.

Когда я запустил скрипт terraform с моего локального компьютера, мне удалось создать все ресурсы в облаке. Но когда я попытался выполнить тот же сценарий на компьютере AWS EC2, сценарий потерпел неудачу. Я отлаживал через логи terraform и логи выдавали следующую ошибку:

**2019-03-01T09:27:16.109Z [DEBUG] plugin.terraform-provider-aws_v1.57.0_x4: 2019/03/01 09:27:16 [DEBUG] [aws-sdk-go] DEBUG: Send Request sts/GetCallerIdentity failed, will retry, error RequestError: send request failed  
2019-03-01T09:27:16.109Z [DEBUG] plugin.terraform-provider-aws_v1.57.0_x4: caused by: Post https://sts.amazonaws.com/: dial tcp 54.239.29.25:443: i/o timeout**  

Экземпляр EC2, через который я пытался запустить скрипт, не имеет доступа к Интернету, тогда как мне выполнить скрипт terraform. Интернет должен быть доступен, является ли это необходимым условием для запуска терраформ?

PS Я также пытался создать конечную точку AWS-STS для моего VPC, но не смог создать ее.

Кто-нибудь может помочь. Есть какие-нибудь подсказки на это?

1 ответ

Обязательно запускать terraform, если вам нужно развернуть / управлять ресурсами aws. особенно для управления vpc.

Но есть способы, позволяющие terraform избежать доступа в Интернет для проверки ваших кодов.

Может ли terraform выполняться без доступа к интернету

Да, вы можете с локальным стеком

Вот ресурсы, которые он поддерживает в настоящее время

API Gateway at http://localhost:4567
Kinesis at http://localhost:4568
DynamoDB at http://localhost:4569
DynamoDB Streams at http://localhost:4570
Elasticsearch at http://localhost:4571
S3 at http://localhost:4572
Firehose at http://localhost:4573
Lambda at http://localhost:4574
SNS at http://localhost:4575
SQS at http://localhost:4576
Redshift at http://localhost:4577
ES (Elasticsearch Service) at http://localhost:4578
SES at http://localhost:4579
Route53 at http://localhost:4580
CloudFormation at http://localhost:4581
CloudWatch at http://localhost:4582
SSM at http://localhost:4583
SecretsManager at http://localhost:4584
StepFunctions at http://localhost:4585
STS at http://localhost:4592
IAM at http://localhost:4593

Краткое руководство по запуску terraform с помощью localstack, использование sqs и sns

  1. Запустите контейнер localstack (вы можете установить и запустить его напрямую, но я обнаружил, что его проще запускать с контейнером)

Вот команда:

docker run -d -p 443:443 -p 4567-4583:4567-4583 -p 4590-4593:4590-4593 -p 8080:8080 localstack/localstack

Примечания: Это изображение большое, требуется время, чтобы вытащить его изображение и запустить сервис. После того, как контейнер запустится, вы должны проверить сервис с браузером http://localhost:8080/

  1. Подготовьте провайдера AWS с конечными точками

Используйте sqs / sns в качестве образца

# Prepare provider.tf for localstack
provider "aws" {
  access_key                  = "localstack"
  secret_key                  = "localstack"
  region                      = "us-east-2"
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  s3_force_path_style         = true

  endpoints {
    sqs = "http://localhost:4576"
    sns = "http://localhost:4575"
  }
}
  1. Пишите файлы терраформ как обычно

Вы можете записывать файлы terraform как обычно, но управлять службами можно только с помощью sqs и sns. Если вам нужны другие ресурсы, сначала добавьте их в вышеуказанный провайдер.

# main.tf
resource "aws_sns_topic" "user_updates" {
  name = "user-updates-topic"
}

resource "aws_sqs_queue" "terraform_queue" {
  name                      = "terraform-example-queue"
  delay_seconds             = 90
  max_message_size          = 2048
  message_retention_seconds = 86400
  receive_wait_time_seconds = 10
  redrive_policy            = "{\"deadLetterTargetArn\":\"${aws_sqs_queue.terraform_queue_deadletter.arn}\",\"maxReceiveCount\":4}"

  tags = {
    Environment = "production"
  }
}

4 Примените терраформные изменения к локальному стеку, как обычно.

Применяйте терраформные коды к localstack как обычно, если вы правильно установили с помощью вышеуказанного provider.tf

terraform init
terraform plan
terraform apply -auto-approve

более подробную информацию, пожалуйста, проверьте его веб-сайт: https://github.com/localstack/localstack

Другие вопросы по тегам