【问题标题】:terraform how can I find the ARN for bucket created on moduleterraform 如何找到在模块上创建的存储桶的 ARN
【发布时间】:2021-07-24 03:25:11
【问题描述】:

我正在使用模块创建存储桶,如何找到该存储桶的 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"
}

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

 {
    "Sid": "accessToS3",
    "Effect": "Allow",
    "Action": [
        "s3:*"
    ],
    "Resource": [
        "${aws_s3_bucket.${var.bucket_name}.arn}",
    ]
}

我没有引用 ARN,所以我得到了错误:

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

如何访问我的 ARN?谢谢

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

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

    output "bucket_arn" {
      value = "${aws_s3_bucket.RESOURCE_NAME.arn}"
    }
    

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

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

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

    {
        "Sid": "accessToS3",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "${module.testbucket.bucket_arn}",
        ]
    }
    

    【讨论】:

    • 嗨,Thomas,我收到语法错误:预期为“}”,但发现无效序列“$”
    • 您必须将输出文件中的 RESOURCE_NAME 替换为 S3 资源的名称。在答案中添加了这一点
    【解决方案2】:

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

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

    1(如果您已经为此资源定义了变量)

    output "S3 Bucket Name" {
      value = "${var.bucket_name.arn}"
    }
    

    2(如果你想直接调用资源)

    output "S3 Bucket Name" {
      value = "${aws_s3_bucket.bucket_name.arn}"
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2020-03-23
      • 2021-05-25
      • 2020-10-17
      • 2018-08-02
      • 2021-09-27
      • 2023-03-07
      • 1970-01-01
      • 2020-03-02
      相关资源
      最近更新 更多