我在 Terraform v0.12 模块中动态创建以下资源:
变量.tf:
variable "stages" {
type = list(string)
default = ["v1", "v2"]
}
variable "rest_api_id" {
description = "The ID of the associated REST API"
}
variable "api_root_resource_id" {
description = "The API resource ID"
}
variable "region" {
description = "The AWS region"
}
variable "method" {
description = "The HTTP method"
default = "GET"
variable "lambda" {
description = "The lambda name to invoke"
}
variable "account_id" {
description = "The AWS account ID"
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从talend构建第一个示例作业(http://www.talendforge.org/tutorials/tutorial.php?language=english&idTuto=1#Action)
当我尝试运行它时,我收到以下错误:
Execution failed : Failed to generate code. [----------
1. ERROR in C:\Talend\workspace\.JETEmitters\src\org\talend\designer\codegen\translators\technical\TSortOutBeginJava.java (at line 1) package org.talend.designer.codegen.translators.technical; ^ The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
----------
2. ERROR in C:\Talend\workspace\.JETEmitters\src\org\talend\designer\codegen\translators\technical\TSortOutBeginJava.java (at line 421) stringBuffer.append(TEXT_1); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
---------- 2 problems (2 errors)]
Run Code Online (Sandbox Code Playgroud)
我试过更改窗口>首选项> talend> java解释器指向jdk安装以及jre7和jre8安装,都无济于事.
另外,我尝试执行talend的大数据演示提供的示例作业,并收到相同的错误消息
这是我的过程:
您可以在tJava_1中看到Java代码.它解析文件中的数据,如果它到达最后一个搜索页面,它会将值设置为true.这是tLoop_1的停止标准,如下所示:
我处理Talend变量错了吗?一旦达到Java代码中的条件,如何阻止循环运行?
我想创建2个VPC安全组.
一个用于VPC的Bastion主机,一个用于私有子网.
# BASTION #
resource "aws_security_group" "VPC-BastionSG" {
name = "VPC-BastionSG"
description = "The sec group for the Bastion instance"
vpc_id = "aws_vpc.VPC.id"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["my.super.ip/32"]
}
egress {
# Access to the Private subnet from the bastion host[ssh]
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = ["${aws_security_group.VPC-PrivateSG.id}"]
}
egress {
# Access to the Private subnet from the bastion host[jenkins]
from_port = 8686
to_port …
Run Code Online (Sandbox Code Playgroud) 到目前为止我已经得到了这个:
data "aws_iam_policy" "config_role" {
arn = "arn:aws:iam::aws:policy/service_role/AWSConfigRole"
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何将其附加到组中。
我编写了一些 Terraform 代码来创建一些服务器。对于 AMI,我使用 Terraform 数据模块获取最新的 Ubuntu 16.04 映像 ID 并将其分配给 EC2 实例。
最近我想向这个环境添加另一个 EC2 实例,但是当我运行时,terraform plan
我可以看到 Terraform 正在尝试删除现有的 EC2 实例并重新创建它们。原因是新的 Ubuntu 映像已发布,它正在尝试删除旧实例并使用新的 AMI ID 创建新实例。
由于我不想意外删除我们的生产服务器,我是否有机会解决这个问题?
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
module "jenkins" {
source = "terraform-aws-modules/ec2-instance/aws"
name = "Jenkins"
instance_count = 1
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.small"
associate_public_ip_address = true
disable_api_termination = true
key_name …
Run Code Online (Sandbox Code Playgroud) 我需要将文件夹上传到S3 Bucket。但是当我第一次申请时。它只是上传。但是我这里有两个问题:
terraform apply
再次运行时,显示Apply complete! Resources: 0 added, 0 changed, 0 destroyed
。我希望在运行terraform apply
并创建新版本时始终上传所有内容。我究竟做错了什么?这是我的Terraform配置:
resource "aws_s3_bucket" "my_bucket" {
bucket = "my_bucket_name"
versioning {
enabled = true
}
}
resource "aws_s3_bucket_object" "file_upload" {
bucket = "my_bucket"
key = "my_bucket_key"
source = "my_files.zip"
}
output "my_bucket_file_version" {
value = "${aws_s3_bucket_object.file_upload.version_id}"
}
Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
我正在尝试使用 aws_network_interface 创建一个 aws 实例,如下所示:
resource "aws_network_interface" "lustre-mds01" {
subnet_id = "${var.subnet_id}"
private_ips = ["10.1.0.10"]
}
resource "aws_instance" "lustre-mds01" {
ami = "${var.ec2_ami}"
instance_type = "t2.nano"
key_name = "${var.key_name}"
vpc_security_group_ids = [ "${var.vpc_security_group_id}" ]
root_block_device {
volume_type = "gp2"
volume_size = 128
}
network_interface {
network_interface_id = "${aws_network_interface.lustre-mds01.id}"
device_index = 0
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会导致:
错误:“network_interface”:与 vpc_security_group_ids 冲突
这似乎存在问题,但由于不活动,该票证已关闭。我是一个 terraform noob,所以我不确定这看起来像一个错误还是只是用户错误。
我的环境:
$ terraform -v
Terraform v0.12.2
+ provider.aws v2.15.0
+ provider.external v1.1.2
+ provider.local v1.2.2
+ provider.null v2.1.2
Run Code Online (Sandbox Code Playgroud) 通过 Terraform 在 RDS 中创建角色后,我试图将其添加到 Postgresql 数据库。
我有两个单独的模块,一个创建 RDS 实例,一个向其中添加新角色。数据库地址是persistence
模块的输出和模块的输入persistenceApplicationRole
。问题好像是在创建RDS实例之前运行了Postgresql provider,所以地址为空。
我得到的错误是:
Error: Error initializing PostgreSQL client: error detecting capabilities: error PostgreSQL version: dial tcp :5432: connect: connection refused
on ../modules/persistenceApplicationRole/main.tf line 9, in provider "postgresql":
9: provider postgresql {
Run Code Online (Sandbox Code Playgroud)
通过-target=module.persistence
标志单独运行模块是有效的,因为persistenceApplicationRole
一旦创建数据库地址就会获取它。我在此处的文档中为 MySQL Provider 找到了一个包含这种确切场景的示例。
# module.persistenceApplicationRole
provider postgresql {
host = var.databaseAddress
username = data.external.root_credentials.result["username"]
password = data.external.root_credentials.result["password"]
superuser = false
}
resource "postgresql_role" "application_role" {
name = data.external.application_credentials.result["username"]
password …
Run Code Online (Sandbox Code Playgroud) postgresql amazon-web-services amazon-rds terraform terraform-provider-aws
terraform ×7
java ×2
talend ×2
amazon-ami ×1
amazon-ec2 ×1
amazon-iam ×1
amazon-rds ×1
amazon-s3 ×1
amazon-vpc ×1
database ×1
devops ×1
h2 ×1
java-8 ×1
postgresql ×1