云计算-高级云资源配置(Advanced Cloud Provisioning)
向Bucket添加公共访问(Adding Public Access to Bucket)
在模块5中,我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket,添加公共访问权限。我们在模块5中使用的模板(third_template.txt)如下所示:
{"Resources": {"cloudformationbucket" : {"Type": "AWS::S3::Bucket","DeletionPolicy": "Delete","Properties": {"BucketName": "pchakrab-cf-bucket-new"} }}
}
当前的Bucket未显示为“公共”,如下所示:
(插图显示当前的Bucket未被设置为公共)
让我们更新模板,以便使用此CloudFormation堆栈自动托管静态网站。首先,我们将index.html和error.html(与模块2中的文件相同)上传到我们要托管网站的Bucket(在本例中为pchakrab-cf-bucket-new)。现在我们将在上面的模板中的“Properties”标签中添加“AccessControl”和“WebsiteConfiguration”属性。我们将为访问控制指定“PublicRead”,并为网站配置指定index和error文件。更新后的模板如下所示:
{"Resources": {"cloudformationbucket" : {"Type": "AWS::S3::Bucket","DeletionPolicy": "Delete","Properties": {"BucketName": "pchakrab-cf-bucket-new","AccessControl": "PublicRead","WebsiteConfiguration": {"IndexDocument": "index.html","ErrorDocument": "error.html"}} }}
}
我们现在将这个模板更新为“fourth_template.txt”并上传到Bucket中,然后复制此模板的对象URL。接下来,按照我们在模块5中看到的相同步骤更新我们的堆栈。更新堆栈后,Bucket将允许公共读取,静态网站将自动启用,如下所示:
(插图显示更新后的Bucket配置)
我们仍然无法打开网站,因为缺少策略声明。因此,我们需要再次更新我们的堆栈。我们将在下一个主题中看到这一点。
使用CloudFormation添加Bucket策略(Adding Bucket Policy using CloudFormation)
延续上一个主题,我们现在使用CloudFormation堆栈添加一个Bucket策略,以便可以通过浏览器访问网站。请注意,我们需要使用我们使用的逻辑名称(例如,“cloudformationbucket”)作为“Ref”。这是我们在模块2中使用的相同Bucket策略。我们进行了两处更改 - 在“Ref”(我们在这里给出了逻辑名称)和“Resource”(我们给出了物理名称/arn)。我们必须更新当前的模板并上传到S3 Bucket。我们上次使用的模板如下:
首先,如果Bucket访问未设置为“公共”,我们需要取消选中“权限”选项卡中的“阻止所有公共访问”。
{"Resources": {"cloudformationbucket" : {"Type": "AWS::S3::Bucket","DeletionPolicy": "Delete","Properties": {"BucketName": "pchakrab-cf-bucket-new","AccessControl": "PublicRead","WebsiteConfiguration": {"IndexDocument": "index.html","ErrorDocument": "error.html"}} }//我们将在此处添加我们的策略......}
}
“BucketPolicy”是一个类似于“Bucket”的资源,它具有“Type”和“Properties”。“Properties”标签包括一个引用的“Bucket”和一个“PolicyDocument”标签。我们通过其逻辑名称在“Bucket”标签中添加对工作Bucket的引用。“PolicyDocument”进一步包括一个属性,称为“Statement”。“Statement”属性包括五个子属性 - “Sid”,“Effect”,“Principal”,“Action”和“Resource”。“Resource”属性需要Bucket的ARN(包括物理名称)。 “Principal”是“Statement”中的强制性子属性。策略如下所示:
"samplebucketpolicy" : {"Type" : "AWS::S3::BucketPolicy","Properties" : {"Bucket" : {"Ref" : "cloudformationbucket"},"PolicyDocument": {"Statement": [{"Sid": "AllowPublicRead","Effect": "Allow","Principal": {"AWS": "*"},"Action": "s3:GetObject","Resource": "arn:aws:s3:::pchakrab-cf-bucket-new/*"}]}}
}
添加策略后的更新模板如下所示:
{"Resources": {"cloudformationbucket" : {"Type": "AWS::S3::Bucket","DeletionPolicy": "Delete","Properties": {"BucketName": "pchakrab-cf-bucket-new","AccessControl": "PublicRead","WebsiteConfiguration": {"IndexDocument": "index.html","ErrorDocument": "error.html"}} },"samplebucketpolicy" : {"Type" : "AWS::S3::BucketPolicy","Properties" : {"Bucket" : {"Ref" : "cloudformationbucket"},"PolicyDocument": {"Version": "2008-10-17","Statement": [{"Sid": "AllowPublicRead","Effect": "Allow","Principal": {"AWS": "*"},"Action": "s3:GetObject","Resource": "arn:aws:s3:::pchakrab-cf-bucket-new/*"}]}}}}
}
我们可以将此模板上传到S3 Bucket并复制对象URL。然后,我们可以按照之前的步骤更新堆栈。一旦堆栈更新完毕,我们将在Bucket的“权限”选项卡中看到添加的Bucket策略。
使用CloudFormation创建DynamoDB表(Creating a DynamoDB Table with CloudFormation)
我们可以使用CloudFormation模板创建DynamoDB表。创建DynamoDB表的模板具有以下语法:
{"Type" : "AWS::DynamoDB::Table","Properties" : {"AttributeDefinitions" : [ AttributeDefinition, ... ],"BillingMode" : String,"ContributorInsightsSpecification" : ContributorInsightsSpecification,"GlobalSecondaryIndexes" : [ GlobalSecondaryIndex, ... ],"KeySchema" : [ KeySchema, ... ],"KinesisStreamSpecification" : KinesisStreamSpecification,"LocalSecondaryIndexes" : [ LocalSecondaryIndex, ... ],"PointInTimeRecoverySpecification" : PointInTimeRecoverySpecification,"ProvisionedThroughput" : ProvisionedThroughput,"SSESpecification" : SSESpecification,"StreamSpecification" : StreamSpecification,"TableClass" : String,"TableName" : String,"Tags" : [ Tag, ... ],"TimeToLiveSpecification" : TimeToLiveSpecification}
}
上述语法应嵌入在“Resources”标签中,如我们之前在S3 Bucket中看到的。我们通常不需要使用所有这些属性。我们可以使用以下模板创建一个带有主键“Id”的简单“Employee”表:
{"Resources": {"EmployeeTable": {"Type": "AWS::DynamoDB::Table","Properties": {"TableName": "Employee","AttributeDefinitions": [{"AttributeName" : "Id","AttributeType" : "N" }],"KeySchema": [{"AttributeName" : "Id","KeyType" : "HASH"}],"ProvisionedThroughput": {"ReadCapacityUnits": 5,"WriteCapacityUnits": 5}}}}
}
“EmployeeTable”是资源的逻辑名称。接下来,我们需要指定资源的“Type”,它将是一个DynamoDB表,即“AWS::DynamoDB::Table”。表的属性包括“TableName”、“AttributeDefinitions”、“KeySchema”和“ProvisionedThroughput”。我们不需要添加所有表属性,只需添加与主键相关的属性。 “KeySchema”定义了在“AttributeDefinitions”中定义的主键类型。指定表的吞吐量,包括读取和写入的值。
DynamoDB表
使用上述部分中显示的CloudFormation模板创建一个DynamoDB表。您需要使用不同的表名称和逻辑名称。
模板参数(Template Parameter)
一个示例参数语法如下所示:
"Parameters" : {"ParameterLogicalID" : {"Type": "DataType","ParameterProperty" : "value"}
}
这是我们如何将此参数的引用添加到我们的资源中。
"SomeResourceLogicalID" : {"Type": "type","Properties" : {"SomeProperty" : { "Ref" : "ParameterLogicalID" },....................................}
}
我们现在将看到如何使用参数添加主键的示例,为此我们将稍微更新我们上次使用的模板。让我们创建一个名为“EmployeeNew”的“Employee”表的副本。
{"Parameters": {"PrimaryKeyName": {"Type": "String","Default": "EmployeeId","Description": "Primary Key Name"},"PrimaryKeyType": {"Type": "String","Default": "N","Description": "Primary Key Type"}},"Resources": {"EmployeeTableNew": {"Type": "AWS::DynamoDB::Table","Properties": {"TableName": "EmployeeNew","AttributeDefinitions": [{"AttributeName" : {"Ref": "PrimaryKeyName"},"AttributeType" : {"Ref": "PrimaryKeyType"} }],"KeySchema": [{"AttributeName" : {"Ref": "PrimaryKeyName"},"KeyType" : "HASH"}],"ProvisionedThroughput": {"ReadCapacityUnits": 5,"WriteCapacityUnits": 5}}}}
}
每个参数都有一个类型,并定义了资源的必要属性,在我们的例子中是主键的名称和类型。我们可以在CloudFormation堆栈中应用模板以查看创建的DynamoDB表。
相关文章:

云计算-高级云资源配置(Advanced Cloud Provisioning)
向Bucket添加公共访问(Adding Public Access to Bucket) 在模块5中,我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket,添加公共访问权限。我们在模块5中使用的模板(third_templ…...

Nginx企业级负载均衡:技术详解系列(17)—— 长连接优化策略与下载服务器高效搭建
你好,我是赵兴晨,97年文科程序员。 今天咱们来聊聊Nginx的两个知识点:Nginx的长连接优化、如何将Nginx配置成下载服务器。 长连接配置详解 在Nginx的配置中,长连接是一个重要的性能优化手段。它允许一个TCP连接上发送多个请求和…...

LabVIEW如何确保步进电机的长期稳定运行
步进电机因其良好的定位精度和控制性,在自动化设备中得到了广泛应用。然而,长期稳定运行对于任何电机系统都是一个重要的挑战。LabVIEW作为一款强大的图形化编程语言,通过其灵活的控制算法和实时监控能力,为步进电机的稳定运行提供…...

vue2 bug 小白求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)
我的vue2项目出现了一个超级恶心的bug 具体流程: 页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 返回页面后页面没有刷新导致用户名还显示这 项目中没有用keep-alive缓存 也在设置了key 尝试了window.removeEventLi…...
上海云管平台怎么样?客服电话多少?
云计算已经成为了企业数字化转型的重要一部分,而在上海,云管平台发展更是大势所趋。这不不少小伙伴在问,上海云管平台怎么样?客服电话多少? 上海云管平台怎么样?客服电话多少? 【回答】&#…...

c++程序员为什么要做自己的底层库
五一期间,在家里翻到之前上学时候用的电脑和工作日志,粗略浏览一番,感慨10年岁月蹉跎,仍然没有找到自己技术方向的“道”。遂有感而发,写下此文。 算起来,接触软件开发也有10年时间了,最开始是…...

堆排序-java
这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。 文章目录 前言 一、堆排序 1.题目描述 2.堆 二、算法思路 1.堆的存储 2. 结点下移down 3.结点上移up 4.堆的基本操作 5.堆的初始化 三、代码如下 1.代码如下: 2.读入数据ÿ…...
Android MIPI屏配置
参考资料:RockChip发布的DRM Display Driver Development Guide手册,以及网上大量相关博客资料 首先要拿到《屏幕硬件规格书》和《DataSheet》,软件配置主要依靠DataSheet提供数据支持。 查阅DataSheet里面on sequence和off sequence说明&a…...
C#面:.Net、ASP.Net、C#、VisualStudio之间的关系是什么
C#是一种编程语言,它是由微软开发的,用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序和移动应用程序等。C#是一种面向对象的语言,它具有强大的类型安全性和丰富的库支持。 .NET是一个软件开发框架,它由微软…...

OpenMV学习笔记3——画图函数汇总
画图,即在摄像头对应位置画出图形,对于需要反馈信息的程序来说很直观。就如上一篇文章颜色识别当中的例子一样,我们在识别出的色块上画出矩形方框,并在中间标出十字,可以直观的看到OpenMV现在识别出的色块。 目录 一…...
【大模型应用开发极简入门】构建新闻稿生成器:提示词的使用与基于事实的提示词
文章目录 一. 提示词怎么写二. 完整代码三. 基于事实的prompt GPT-4和ChatGPT等LLM专用于生成文本。我们可以使用GPT-4和ChatGPT在各种场景中生成文本,举例如下。 电子邮件合同或正式文档创意写作逐步行动计划头脑风暴广告职位描述 对于本项目,我们将创建…...

JAVA和爬虫,那个值得学习
如果你是初学者,建议先从基础的编程语言学起,比如Java,它能为你打下坚实的编程基础,并且在未来转学其他语言或技术时更加容易。随着编程基础的建立,你可以根据自己的兴趣或职业规划,学习爬虫技术作为补充技…...

Vue.js 与 TypeScript(1) :项目配置、props标注类型、emits标注类型
像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误,也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全,TypeScript 还改善了开发体验和效率。 一、项目配置 在使用 npm cr…...

【考试100】安全员B证《建设工程安全生产技术》单选题
题库来源:考试100 【考试100】安全员B证《建设工程安全生产技术》单选题 1.在悬空部位作业时,操作人员应( ) A.遵守操作规定 B.进行安全技术交底 C.戴好安全帽 D.系好安全带 【考试100答案】:D…...

linux进阶的一些操作以及知识点------习题集(实践)
请创建以你姓名全拼的用户luwenhua,将其设置为免密登录,切换到luwenhua用户,打开终端,完成以下操作 (一)bash脚本基础练习 1)第一题:请在终端里定义两个用户变量num120,…...

提莫攻击 ---- 模拟算法
题目链接 题目: 分析: 如果两次攻击的时间差是>中毒的持续时间duration, 那么第一次攻击的中毒时间就是duration如果两次攻击的时间差是< 中毒的持续时间duration, 那么第一次攻击的持续时间就是这个时间差假设攻击了n次, 那么我们从第一次攻击开始计算时间差, 那么当我…...

SpringBootWeb 篇-深入了解 Spring 异常处理、事务管理和配置文件参数配置化、yml 配置文件
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 配置文件 1.1 yml 配置文件 1.2 参数配置化 1.2.1 使用 Value 注解注入单个配置参数 1.2.2 使用 ConfigurationProperties 注解将一组相关配置参数注入到一个类中…...

重学java 55. 集合 Set接口
我救自己万万次,铮铮劲草,绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合,只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…...
spring项目修改时间格式
一、配置方式 在application.yml上添加 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 二、注解方式 1、添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId&…...

每周统计-20240531
用于测试程序的稳定性: 龙虎榜: 成交额: 封成比: 收盘前放量: 开盘抢筹: 封单额:...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...