使用 Cloudformation 在 S3 存储桶内创建文件夹

2024-04-11

我可以使用 cloudformation 创建 S3 存储桶,但想在 S3 存储桶内创建一个文件夹..like

<mybucket>--><myfolder>

请让我知道用于在存储桶内创建文件夹的模板...两者应同时创建...

我正在使用 AWS lambda,如下所示

stackname = 'myStack'
client = boto3.client('cloudformation')
response = client.create_stack(
    StackName= (stackname),
    TemplateURL= 'https://s3.amazonaws.com/<myS3bucket>/<myfolder>/nestedstack.json',
    Parameters=<params>
)

AWS 不提供官方 CloudFormation 资源来在 S3 存储桶中创建对象。但是,您可以创建一个Lambda 支持的自定义资源 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html使用 AWS SDK 执行此功能,实际上gilt/cloudformation-helpers https://github.com/gilt/cloudformation-helpers#put-s3-objectsGitHub 存储库提供了一个现成的自定义资源来完成此任务。

与任何自定义资源设置一样,它有点冗长,因为您需要首先部署 Lambda 函数和 IAM 权限,然后将其作为堆栈模板中的自定义资源引用。

首先,添加Lambda::Function以及相关的IAM::Role堆栈模板的资源:

"S3PutObjectFunctionRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "AssumeRolePolicyDocument": {
      "Version" : "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [ "lambda.amazonaws.com" ]
          },
          "Action": [ "sts:AssumeRole" ]
        }
      ]
    },
    "ManagedPolicyArns": [
      { "Ref": "RoleBasePolicy" }
    ],
    "Policies": [
      {
        "PolicyName": "S3Writer",
        "PolicyDocument": {
          "Version" : "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "s3:DeleteObject",
                "s3:ListBucket",
                "s3:PutObject"
              ],
              "Resource": "*"
            }
          ]
        }
      }
    ]
  }
},
"S3PutObjectFunction": {
  "Type": "AWS::Lambda::Function",
  "Properties": {
    "Code": {
      "S3Bucket": "com.gilt.public.backoffice",
      "S3Key": "lambda_functions/cloudformation-helpers.zip"
    },
    "Description": "Used to put objects into S3.",
    "Handler": "aws/s3.putObject",
    "Role": {"Fn::GetAtt" : [ "S3PutObjectFunctionRole", "Arn" ] },
    "Runtime": "nodejs",
    "Timeout": 30
  },
  "DependsOn": [
    "S3PutObjectFunctionRole"
  ]
},

然后,您可以使用 Lambda 函数作为自定义资源来创建 S3 对象:

"MyFolder": {
  "Type": "Custom::S3PutObject",
  "Properties": {
    "ServiceToken": { "Fn::GetAtt" : ["S3PutObjectFunction", "Arn"] },
    "Bucket": "mybucket",
    "Key": "myfolder/"
  }
},

您还可以使用相同的自定义资源通过添加Body参数除了Bucket and Key(参见docs https://github.com/gilt/cloudformation-helpers#put-s3-objects).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Cloudformation 在 S3 存储桶内创建文件夹 的相关文章

  • 从 EC2 实例 ID 创建 AMI 时,command.resolveMiddleware 不是 AWS SDK 的函数,想知道为什么?

    我当时正在开发 AWS SDK 版本 3 并尝试以编程方式从 EC2 实例创建 AMI 以下是我使用的脚本 Imports TODO Import the ec2 client const EC2Client CreateImageComm
  • 如何动态更新我的 AWS CloudWatch 控制面板?

    我在 CloudWatch 中有几个仪表板 它们代表我的基础设施的静态视图 例如 自动扩展工作组中当前正在运行的实例数量 或者各种关键 EC2 实例的 CPU 磁盘状态 但是 当我添加新实例时 我总是需要手动更新仪表板以将它们包含在显示中
  • AWS 从实例元数据检索安全凭证

    这不是问题的重复使用 API 调用获取我的 AWS 凭证 https stackoverflow com q 34810642 850848 因为我具体询问亚马逊在他们给出的示例中的含义 我正在看这里 http docs aws amazo
  • AWS Textract InvalidParameterException

    我有一个 Net core 客户端应用程序 根据 AWS 文档 使用带有 S3 SNS 和 SQS 的 amazon Textract 检测和分析多页文档中的文本 https docs aws amazon com texttract la
  • 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 用于图像存储时遇到问题

    我们已经构建了一个 Rails 应用程序 它有多个用户和每个用户的图像 在我们的本地主机上完成所有开发工作 我们为用户和照片提供了工作种子 但现在我们尝试使用 S3 进行图像存储 我们在 总是在 种子 期间遇到错误执行此操作时迁移的步骤 耙
  • 使用 Lambda 函数运行 AWS Athena 的查询

    我在 AWS Athena 上创建了一个表 可以在其中运行任何查询而不会出现任何错误 select from mytestdb test 该表有三列 customer Id product Id price 我尝试创建一个 lambda 函
  • 输出和导出之间的区别

    在 CloudFormation 中 我们能够从模板输出一些值 以便其他进程 堆栈等可以检索它们 这通常是某个名称 可能是 URL 或在堆栈创建 部署 过程中生成的名称等 我们还能够从模板 导出 返回值作为 输出 与 导出 之间有什么区别
  • Beanstalk 部署忽略 .ebextensions 中的 nginx 配置文件

    我在单实例 Elastic Beanstalk 环境中托管 Java Web 应用程序 并添加了几个 ebextension 文件 这些文件在每次部署时成功为我创建配置文件 然而 我无法找到一种方法让 Beanstalk 在 etc ngi
  • 在 Amazon Redshift COPY 命令中转义分隔符

    我正在将数据从 Amazon S3 提取到 Amazon Redshift 中的表中 该表包含多个列 其中某些列数据可能包含特殊字符 复制命令有一个选项称为Delimiter我们可以在将数据拉入表时指定分隔符 问题有2个方面 当我导出时 u
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • S3 不返回 Access-Control-Allow-Origin 标头?

    我无法强制 S3 在从存储桶返回的所有对象上设置 CORS 标头 尽管启用了 CORS 但由于客户端 S3 上传正在工作 返回的对象没有 CORS 标头 我启用的策略是
  • 我们能否知道回形针下载何时完成?

    我有一个应用程序 我需要知道用户的 Rails Paperclip 文件下载时间complete 我的应用程序设置为与 Amazon S3 交互 当用户收到完整的文件时 我需要运行 JavaScript 函数 我怎样才能做到这一点 跟踪天气
  • AWS CodePipeline 构建缺少 Git 历史记录

    Context 我设置了一个 CodePipeline 它使用 CodeCommit 和 CodeBuild 作为其源和构建阶段 我的构建包括一个插件 com zoltu git versioning 使用 Git 提交历史记录来动态创建构
  • 如何修改 Amazon RDS 实例的 my.ini 参数

    在启动 MySQL 5 5 RDS 实例时 Amazon 使用默认参数组来配置 my ini 参数 但控制台不允许我修改它们 我怎样才能实现这个目标 例如默认将存储引擎设置为MyISAM或设置字符集 此处记录了这一点 http aws am
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 如何使用具有自定义身份验证的 AWS cognito 创建临时 s3 上传安全令牌

    因此 我对 Cognito 的 Amazon 文档中有关其声明的用例之一的内容感到有点困惑 使用您自己的身份系统 允许您的应用程序将数据保存到 AWS 云 就我而言 我想给他们 aws 令牌 以便他们从移动客户端直接上传到 s3 而无需将我
  • 在 ec2 上托管 Rails

    我想将 Rails 部署到亚马逊 ec2 上 我看过 poolparty 和 ec2onrails 但似乎都不再维护了 人们用什么来做到这一点 都是自制的木偶和卡皮斯特拉诺 还是有一个项目可以让我继续下去 我可以推荐两个项目 如果您有一个
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • 使用无服务器访问 SSM 变量

    我想用无服务器变量中的 SSM 参数 https serverless com blog serverless v1 22 0 按照文档 我运行了以下命令 aws ssm put parameter name foo value bar t
  • 今天从 GitHub 操作构建 SAM 突然失败:模块“lib”没有属性“OpenSSL_add_all_algorithms”

    昨天 我的 SAM 构建正在使用以下 GitHub 操作 今天突然开始失败并出现错误 AttributeError 模块 lib 没有属性 OpenSSL add all algorithms 经我验证 SAM 模板没有任何错误 还有其他人

随机推荐