使用Terraform创建AWS Storage Gateway时激活密钥请求超时问题
问题:Terraform创建AWS Storage Gateway时激活密钥HTTP请求超时
使用Terraform部署AWS Storage Gateway时,触发错误:从IP地址获取激活密钥时HTTP请求超时。此前脚本运行正常,当前除Gateway资源外,其余AWS资源均可成功创建。
安全组规则说明:
- 入站规则:允许445、159、139、80、22端口及所有ICMP端口
- 出站规则:允许所有端口
关联Terraform脚本:
data "aws_ami" "latest_ami" { most_recent = true filter { name = "name" values = ["*aws-storage-gateway*"] } owners = ["amazon"] } resource "aws_instance" "file_gateway_instance" { ami = data.aws_ami.latest_ami.id instance_type = "m5.xlarge" key_name = var.keypair_name subnet_id = var.subnet_id vpc_security_group_ids = [aws_security_group.file_gateway_sg.id] user_data = <<-EOF #!/bin/bash # Install file gateway curl https://filesystems-manager-us-east-1.s3.us-east-1.amazonaws.com/latest/install.sh | sudo bash EOF tags = { Name = "file_gateway" } } data "aws_ssm_parameter" "domain_creds" { name = "/secrets/ad/admin-password" with_decryption = true } resource "aws_storagegateway_gateway" "file_gateway" { gateway_name = var.gateway_name gateway_timezone = "GMT" gateway_type = "FILE_S3" gateway_ip_address = aws_instance.file_gateway_instance.private_ip smb_active_directory_settings { domain_name = var.domain_name username = "admin" password = data.aws_ssm_parameter.domain_creds.value } }
排查与修复方案
1. 验证Gateway实例的互联网访问能力
Storage Gateway激活依赖实例主动连接AWS服务端点,需确认:
- 实例所在子网是否关联互联网网关(公有子网)或NAT网关(私有子网),确保实例能访问公网。
- 若使用私有子网且无NAT网关,需配置Storage Gateway的VPC端点,让实例通过VPC内部访问AWS服务。
2. 检查Gateway IP地址配置
当前脚本使用实例的private_ip进行激活:
- 若实例在无公网访问的私有子网,AWS无法通过私有IP完成激活流程,需改为使用实例的公网IP(需开启
associate_public_ip_address = true),或配置VPC端点支持私有IP激活。
3. 修正user_data的区域一致性
脚本中硬编码了us-east-1的S3地址,若部署区域不是us-east-1,会导致install.sh下载失败,进而无法启动Gateway服务。修改为动态获取区域:
resource "aws_instance" "file_gateway_instance" { # 其他配置不变 user_data = <<-EOF #!/bin/bash # 动态获取实例所在区域 REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region') curl https://filesystems-manager-${REGION}.s3.${REGION}.amazonaws.com/latest/install.sh | sudo bash EOF }
4. 检查Gateway服务是否正常启动
登录实例查看cloud-init日志:
cat /var/log/cloud-init-output.log
确认install.sh执行成功,且storagegateway服务处于运行状态:
systemctl status storagegateway
若服务未启动,手动执行install脚本排查错误。
5. 补充网络ACL必要规则
若子网关联了网络ACL,需确保放行出站TCP 443端口(AWS服务的HTTPS访问端口),避免阻断实例与AWS服务的通信。
内容的提问来源于stack exchange,提问作者Prajwal G L
相关产品推荐
相关产品推荐

