标签: terraform-provider-aws

配置源 KMS 密钥以复制加密对象

我正在尝试将加密对象复制到不同区域的 S3 存储桶。执行此操作时,我需要指定一个或多个用于解密对象的 KMS 密钥。

我正在使用以下 Terraform 脚本:

replication_configuration {
  role = "${aws_iam_role.replication.arn}"

  rules {
    id     = "${var.service}"
    prefix = "${var.replication_bucket_prefix}"
    status = "Enabled"

    destination {
      bucket        = "${aws_s3_bucket.replication_bucket.arn}"
      storage_class = "STANDARD"
      replica_kms_key_id = "xxxxx"
    }

    source_selection_criteria {
      sse_kms_encrypted_objects {
        enabled = true
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

该脚本有效(它适用),但在 AWS 控制台中检查时,没有为源对象选择 KMS 密钥。

查看配置,我看不到任何地方可以指定这些键。用于replica_kms_key_id指定用于加密目标存储桶中的对象的 KMS 密钥。

amazon-s3 terraform terraform-provider-aws

6
推荐指数
1
解决办法
4158
查看次数

如果 AWS API 请求失败,我该如何调试我需要的权限?

我正在使用 Terraform 在 AWS 上配置一些资源。运行 Terraform 的“计划”步骤失败,并显示以下模糊错误(例如):

Error: Error loading state: AccessDenied: Access Denied
        status code: 403, request id: ABCDEF12345678, host id: SOMELONGBASE64LOOKINGSTRING===
Run Code Online (Sandbox Code Playgroud)

给定一个请求 id 和一个主机 id 是否可以更深入地了解出了什么问题?

设置 TF_LOG=DEBUG(或其他级别)似乎有帮助,但我很好奇是否有 CLI 命令可以从 CloudTrail 或其他东西获取更多信息。

谢谢!

amazon-web-services aws-cli terraform terraform-provider-aws

6
推荐指数
1
解决办法
4261
查看次数

创建 CacheSecurityGroup 时出错:InvalidParameterValue

我正在尝试使用 Terraform 在 Elasticache 上启动 Redis 实例,但遇到以下错误。

* module.main.module.redis.aws_elasticache_security_group.redis: 1 error(s) occurred:

* aws_elasticache_security_group.redis: Error creating CacheSecurityGroup: InvalidParameterValue: Use of cache security groups is not permitted in this API version for your account.
Run Code Online (Sandbox Code Playgroud)

我在 GH 问题中发现的任何内容都没有帮助。这是我的 Terraform 的样子(我已经确认变量被正确传递):

resource "aws_elasticache_subnet_group" "redis" {
  name       = "vpc-public-subnet"
  description = "subnet where redis will live"
  subnet_ids = ["${var.subnet}"]
}

resource "aws_elasticache_security_group" "redis" {
  name                 = "redis-security-group"
  security_group_names = ["${var.redis_sec_group}"]
}

resource "aws_elasticache_replication_group" "redis" {
  automatic_failover_enabled    = true
  availability_zones            = ["us-east-2a"]
  replication_group_id          = "${var.environment}-myapp-rep-group-1" …
Run Code Online (Sandbox Code Playgroud)

amazon-elasticache terraform terraform-provider-aws

6
推荐指数
1
解决办法
2753
查看次数

Terraform - aws_cloud_watch_log_metric_filter

有人有尝试在 cloudwatch 日志上设置指标过滤器的经验吗?想知道我是否发现 Terraform 中的错误?

这就是我正在尝试做的事情;

resource "aws_cloudwatch_log_metric_filter" "AWS_Console_Login" {
  name           = "${var.aws_account_id}_Console_Login_Failure"
  pattern        = "{ ($.eventName = ConsoleLogin) && ($.errorMessage = "Failed authentication") }"
  log_group_name  = "${var.aws_cloudtrail_name}"  

  metric_transformation {
    name      = "${var.aws_account_id}_Console_Login_Failure"
    namespace = "AccountMonitoring${var.aws_account_id}"
    value     = "1"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 Terraform apply 或 validate 时,我收到此响应;

错误:解析 cloudwatch.tf 时出错:157:19:预期嵌套对象:LBRACE 得到:ASSIGN

需要明确的是,157:19 与包含 log_group_name 的代码行相关,其中 19 位于 = 符号之前。

不过,我认为这与我的模式有关,如果我删除日志组..并运行我得到的验证;

aws_cloudwatch_log_metric_filter.AWS_Console_Login::无效或未知密钥:失败

我对 AWS 过滤模式的要求是否过高?

谢谢斯蒂芬

terraform terraform-provider-aws

6
推荐指数
1
解决办法
6367
查看次数

Terraform(AWS 提供商)- Auto Scaling 组不会对启动模板更改生效

无法在使用启动模板时使启动模板与 ASG 一起工作,它使用一个小技巧与启动配置一起工作,即通过在 ASG 资源中插入启动配置名称,但它不适用于启动模板。
ASG 使用最新版本来启动新实例,但不会对预运行实例进行任何更改,尽管启动模板发生了变化。

我知道这是预料之中的,但我们是否有任何解决方法可以使启动模板与 ASG 一起使用,或者我们需要坚持启动配置本身?

TF 代码片段 -

resource "aws_launch_template" "lc_ec2" {
  image_id = "${var.ami_id}"
  instance_type = "${var.app_instance_type}"
  key_name = "${var.orgname}_${var.environ}_kp"
  vpc_security_group_ids = ["${aws_security_group.sg_ec2.id}"]
  user_data = "${base64encode(var.userdata)}"
  block_device_mappings {
    device_name = "/dev/xvdv"
    ebs {
      volume_size = 15
    }
  }
  iam_instance_profile {
    name = "${var.orgname}_${var.environ}_profile"
  }
  lifecycle {
    create_before_destroy = true
  }

  tag_specifications {
    resource_type = "instance"
    tags = "${merge(map("Name", format("%s-%s-lc-ec2", var.orgname, var.environ)), var.tags)}"
    } 
  tag_specifications {
    resource_type = "volume"
   tags = "${merge(map("Name", format("%s-%s-lc-ec2-volume", var.orgname, var.environ)), …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

6
推荐指数
1
解决办法
1745
查看次数

是否可以将 terraform 工作区链接到 AWS 帐户

如果一个人有两个 AWS 账户,一个用于开发,一个用于实时(例如),我知道可以使用 terraform 工作区来管理每个环境的状态。

但是,如果我将工作区从“开发”切换到“实时”,有没有办法告诉 terraform 它现在应该将状态应用于真实帐户而不是测试帐户?

我想到的一种容易出错的方法是secret.auto.tfvars每次切换工作区时交换我的文件,因为我认为在使用不同的访问密钥(属于“真实”帐户的密钥)运行时,AWS 提供商将应用到那个帐户。但是,很容易交换工作区并提供错误的凭据,这会针对错误的环境运行更改。

我正在寻找一种方法,几乎​​可以将工作区与 AWS 中的帐户 ID 关联起来。

我确实找到了这个https://github.com/hashicorp/terraform/issues/13700但它指的是已弃用的env命令,这个评论看起来特别有希望

更新

我在 GitHub 上找到了一些信息,在那里我留下此评论作为对之前评论的回复,该评论建议考虑模块而不是工作区,实际上表明工作区不太适合此任务。如果有人可以提供有关如何使用模块来解决同时维护“相同”基础架构的多个版本的问题的信息,我很想看看这如何改进工作区概念。

terraform terraform-provider-aws

6
推荐指数
1
解决办法
2034
查看次数

Terraform - 如何启用 API Gateway 执行日志记录?

如何使用 Terraform 设置 API Gateway 阶段级执行日志记录?还不支持吗?

背景

API Gateway 阶段编辑器具有执行日志记录配置。但是,尽管它具有访问日志记录配置参数,但似乎没有参数可以在aws_api_gateway_stage 中设置它们。

想知道是否还有其他资源可以使用,或者只是那些参数尚未实现。

在此处输入图片说明

amazon-cloudwatch aws-api-gateway terraform-provider-aws

6
推荐指数
1
解决办法
3764
查看次数

在 AWS RDS 集群实例上使用 Terraform 配置多个逻辑数据库

所以,我有一个 Aurora MySql 集群,其中配置了一个 RDS MySql 实例。AWS 底层 API 仅允许创建 1 个逻辑数据库,因此出现了障碍。因此,我想知道你们中是否有人已经有过这种部署的经验,因为我不想在这一步中使用 Mysql 客户端 CLI,如果可能的话,我真的想自动化它。有任何想法吗?

database amazon-web-services terraform amazon-aurora terraform-provider-aws

6
推荐指数
1
解决办法
3542
查看次数

Terraform AWS Athena将Glue目录用作数据库

我对应该如何使用terraform将Athena连接到我的Glue Catalog数据库感到困惑。

我用

resource "aws_glue_catalog_database" "catalog_database" {
    name = "${var.glue_db_name}"
}

resource "aws_glue_crawler" "datalake_crawler" {
    database_name = "${var.glue_db_name}"
    name          = "${var.crawler_name}"
    role          = "${aws_iam_role.crawler_iam_role.name}"
    description   = "${var.crawler_description}"
    table_prefix  = "${var.table_prefix}"
    schedule      = "${var.schedule}" 

    s3_target {
      path = "s3://${var.data_bucket_name[0]}"
  }
    s3_target {
      path = "s3://${var.data_bucket_name[1]}"
  }
 }
Run Code Online (Sandbox Code Playgroud)

创建一个Glue数据库,然后使用搜寻器来爬行s3存储桶(这里只有两个),但是我不知道如何将Athena查询服务链接到Glue DB。在的terraform文档中Athena,似乎没有一种方法可以将Athena连接到Glue目录,而只能连接到S3存储桶。但是,显然,雅典娜可以与Glue集成在一起

如何构建Athena数据库以使用我的Glue目录作为数据源而不是S3存储桶?

amazon-web-services terraform aws-glue terraform-provider-aws aws-glue-data-catalog

6
推荐指数
1
解决办法
765
查看次数

以编程方式创建AWS Athena视图

您可以在Amazon Athena中创建视图吗?概述了如何使用用户界面创建视图。

我想以编程方式创建一个AWS Athena View,理想情况下使用Terraform(称为CloudFormation)创建。

我遵循此处概述的步骤:https : //ujjwalbhardwaj.me/post/create-virtual-views-with-aws-glue-and-query-them-using-athena,但是我遇到了一个问题视图很快就会过时。

...._view' is stale; it must be re-created.

terraform代码如下所示:

resource "aws_glue_catalog_table" "adobe_session_view" {

  database_name = "${var.database_name}"
  name = "session_view"

  table_type = "VIRTUAL_VIEW"
  view_original_text = "/* Presto View: ${base64encode(data.template_file.query_file.rendered)} */"
  view_expanded_text = "/* Presto View */"

  parameters = {
    presto_view = "true"
    comment = "Presto View"
  }

  storage_descriptor {
    ser_de_info {
      name = "ParquetHiveSerDe"
      serialization_library = "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe"
    }

    columns { name = "first_column" type = "string" }
    columns { name = …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-cli terraform amazon-athena terraform-provider-aws

6
推荐指数
4
解决办法
1011
查看次数