Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 插入类似于插入参数的CloudFormation导入值?_Amazon Web Services_Amazon S3_Amazon Cloudformation_Amazon Iam - Fatal编程技术网

Amazon web services 插入类似于插入参数的CloudFormation导入值?

Amazon web services 插入类似于插入参数的CloudFormation导入值?,amazon-web-services,amazon-s3,amazon-cloudformation,amazon-iam,Amazon Web Services,Amazon S3,Amazon Cloudformation,Amazon Iam,我们有一个巨大的VPC CF模板,用于定义开发、登台和生产环境。这些资源之一是一个公共S3存储桶,用于与特定客户没有直接关系的任务。这个bucket有一个名为VPCCommonBucket的导出,它只包含bucket名称 我试图在另一个堆栈中使用这个导出值,引用该bucket,创建一个只能访问该bucket的IAM用户,进一步将其限制为该bucket中的单个目录 使用参数时,我可以执行以下操作: !Sub "arn:aws:s3:::${BucketName}/prefix/*" 但是我找不到

我们有一个巨大的VPC CF模板,用于定义开发、登台和生产环境。这些资源之一是一个公共S3存储桶,用于与特定客户没有直接关系的任务。这个bucket有一个名为
VPCCommonBucket
的导出,它只包含bucket名称

我试图在另一个堆栈中使用这个导出值,引用该bucket,创建一个只能访问该bucket的IAM用户,进一步将其限制为该bucket中的单个目录

使用参数时,我可以执行以下操作:

!Sub "arn:aws:s3:::${BucketName}/prefix/*"

但是我找不到与使用
Fn::ImportValue
/
类似的东西!导入值
。有没有一种方法可以像我在这里尝试的那样将导出的变量插入到字符串中?或者这是一个需要返回并更改主模板以包含Bucket的arn的另一个导出的问题?

您可以将Fn::ImportValue结合使用!云信息模板中的Sub。然而,内在函数引用类型和顺序在这里很重要。根据:

你不能使用缩写形式的!ImportValue,当它包含!相反,您必须使用完整的函数名

因此,请按照如下方式构造模板:

Properties:
    Bucket:
        Fn::Sub:
        - 'arn:aws:s3:::${BucketName}/prefix/*'
        - BucketName: !ImportValue VPCCommonBucket

另外,您可能知道,要使用导入功能,您必须在单独的cloudformation模板中使用。如果您遇到问题,这里提供了一个AWS。

不,这根本不是您使用ImportValue的方式。ImportValue是在另一个堆栈中导入以前导出的变量。您的代码将尝试导入名为
arn:aws:s3::${BucketName}/prefix/*
的变量,并将参数
BucketName
的名称插入适当的位置。这将为您提供一个基于BucketName的arn,但它不会从CF导出中获取BucketName。@UtahJarhead答案已更新,只需交换值即可。啊。。。。好吧,我不知道你可以像那样动态地创建变量。优秀的东西!