terraform 如何找到在模块上创建的存储桶的 ARN

man*_*urt 9 amazon-web-services terraform

我正在使用模块创建存储桶,如何找到该存储桶的 ARN?

创建模块

module "testbucket" {
 source         = "github.com/tomfa/terraform-sandbox/s3-webfiles-bucket"
 aws_region     = "${var.aws_region}"
 aws_access_key = "${var.aws_access_key}"
 aws_secret_key = "${var.aws_secret_key}"
 bucket_name    = "${var.bucket_name}-test"
}
Run Code Online (Sandbox Code Playgroud)

然后,当我调用该策略时,我需要访问 ARN

 {
    "Sid": "accessToS3",
    "Effect": "Allow",
    "Action": [
        "s3:*"
    ],
    "Resource": [
        "${aws_s3_bucket.${var.bucket_name}.arn}",
    ]
}
Run Code Online (Sandbox Code Playgroud)

我没有引用 ARN,因此出现错误:

错误:资源“aws_iam_role_policy.policy_Demo_lambda”配置:变量 aws_s3_bucket.mybukk.arn 中引用了未知资源“aws_s3_bucket.mybukk”

如何访问我的 ARN?谢谢

Tho*_*rge 7

您的模块需要有一个outputs.tf 文件,如下所示:

output "bucket_arn" {
  value = "${aws_s3_bucket.RESOURCE_NAME.arn}"
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将 RESOURCE_NAME 替换为 terraform S3 存储桶资源的名称。

例如,如果您的资源如下所示:resource "aws_s3_bucket" "b" {...那么您需要将 RESOURCE_NAME 替换为 b

那么你可以在你的策略中调用它:

{
    "Sid": "accessToS3",
    "Effect": "Allow",
    "Action": [
        "s3:*"
    ],
    "Resource": [
        "${module.testbucket.bucket_arn}",
    ]
}
Run Code Online (Sandbox Code Playgroud)


小智 5

###执行 terraform apply 后可以通过两种方式完成:

在工作目录中创建一个名为outputs.tf 的文件。在该文件中,您可以使用以下两种方法之一。

1 - 如果您已经定义了该资源的变量:

output "S3-Bucket-Name" {
  value = "${var.bucket_name.arn}"
}
Run Code Online (Sandbox Code Playgroud)

2 - 如果你想直接调用资源:

output "S3-Bucket-Name" {
  value = "${aws_s3_bucket.bucket_name.arn}"
}
Run Code Online (Sandbox Code Playgroud)