Может ли 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
- Запустите контейнер 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/
- Подготовьте провайдера 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"
}
}
- Пишите файлы терраформ как обычно
Вы можете записывать файлы 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