我正在尝试将加密对象复制到不同区域的 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 密钥。
我正在使用 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
我正在尝试使用 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) 有人有尝试在 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 过滤模式的要求是否过高?
谢谢斯蒂芬
无法在使用启动模板时使启动模板与 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) 如果一个人有两个 AWS 账户,一个用于开发,一个用于实时(例如),我知道可以使用 terraform 工作区来管理每个环境的状态。
但是,如果我将工作区从“开发”切换到“实时”,有没有办法告诉 terraform 它现在应该将状态应用于真实帐户而不是测试帐户?
我想到的一种容易出错的方法是secret.auto.tfvars每次切换工作区时交换我的文件,因为我认为在使用不同的访问密钥(属于“真实”帐户的密钥)运行时,AWS 提供商将应用到那个帐户。但是,很容易交换工作区并提供错误的凭据,这会针对错误的环境运行更改。
我正在寻找一种方法,几乎可以将工作区与 AWS 中的帐户 ID 关联起来。
我确实找到了这个https://github.com/hashicorp/terraform/issues/13700但它指的是已弃用的env命令,这个评论看起来特别有希望
我在 GitHub 上找到了一些信息,在那里我留下此评论作为对之前评论的回复,该评论建议考虑模块而不是工作区,实际上表明工作区不太适合此任务。如果有人可以提供有关如何使用模块来解决同时维护“相同”基础架构的多个版本的问题的信息,我很想看看这如何改进工作区概念。
如何使用 Terraform 设置 API Gateway 阶段级执行日志记录?还不支持吗?
API Gateway 阶段编辑器具有执行日志记录配置。但是,尽管它具有访问日志记录配置参数,但似乎没有参数可以在aws_api_gateway_stage 中设置它们。
想知道是否还有其他资源可以使用,或者只是那些参数尚未实现。
所以,我有一个 Aurora MySql 集群,其中配置了一个 RDS MySql 实例。AWS 底层 API 仅允许创建 1 个逻辑数据库,因此出现了障碍。因此,我想知道你们中是否有人已经有过这种部署的经验,因为我不想在这一步中使用 Mysql 客户端 CLI,如果可能的话,我真的想自动化它。有任何想法吗?
database amazon-web-services terraform amazon-aurora terraform-provider-aws
我对应该如何使用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
您可以在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