海南省建设监理协会网站,皮具网站源码,企业如何在网站做认证,东营新闻联播在线直播今晚前言在公有云技术与产品飞速发展的时代#xff0c;业务对于其自身的可用性提出了越来越高的要求#xff0c;当跨区域容灾已经无法满足业务需求的情况下#xff0c;我们通常会考虑多云部署我们的业务平台#xff0c;以规避更大规模的风险。但在多云平台部署的架构下#xf…前言在公有云技术与产品飞速发展的时代业务对于其自身的可用性提出了越来越高的要求当跨区域容灾已经无法满足业务需求的情况下我们通常会考虑多云部署我们的业务平台以规避更大规模的风险。但在多云平台部署的架构下多云资源的管理成为了一个耗时耗力管理与运维成本颇高的难点。这导致了第一云管人员需要精通掌握两家甚至多家云厂商的技术与服务产品或者第二多支独立团队分别运维与管理导致的高团队成本等诸多痛点。所以公有云资源纳管平台以下简称云管平台应运而生。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术观点和项目并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏看到这里请一定不要匆匆划过点这里让它成为你的技术宝库云管平台简化了运管人员的操作流程降低了公有云产品的技术门槛但是在多云产品的集中式纳管上却难度重重。其一不同公有云厂商使用独立的 infrastructure-as-code 以下简称 IaC 体系或者服务譬如亚马逊云科技的 Cloudformation 服务其二不论云厂商还是开源的 IaC 产品均使用标记语言或者类标记语言编写代码鲜有使用 Java Python 或者 Golang 等开发语言的运行时这对于精通于开发语言的云管平台的开发人员导致了额外学习成本需要从0开始学习标记语言往往会导致开发团队的抵触甚至拒绝其三标记语言运行过程中更倾向于将整体堆栈运行完毕之后输出对应的 outputs但在运行过程中存在难以直接循环调用 outputs无法写入数据库等诸多难点这增大了编写难度以及代码编写工作量。有没有一款产品能够适配主流公有云 IaC又可以使用高级编程语言编写代码呢什么是 PulumiPulumi 是非常流行的现代化 IaC 平台。Pulumi 引入了主流编程语言譬如 JavaScriptPythonJavaGolang.NET以及标记语言 YAML可以使用上述语言通过 Pulumi SDK 管理不同云厂商的资源。Pulumi 目前已经支持了主流公有云厂商譬如亚马逊云科技微软 Azure谷歌云与阿里云及其生态譬如 FastlyAkamaiCloudflareKubernetesKongApache Kafka 等。Pulumi 的组成如下图所示每一个 Pulumi 项目包含至少一个程序组程序组由编程语言书写描述不同资源的运作以及彼此之间的关系。以下以 Python 代码为例描述我们在 Pulumi 中创建了 web-sg 名称安全组并附加该安全组以 ’ami-6869aa05’为镜像创建了实例规格为 t2.micro 的 EC2 虚拟机。import pulumi
import pulumi_aws as awsgroup aws.ec2.SecurityGroup(web-sg,descriptionEnable HTTP access,ingress[{ protocol: tcp, from_port: 80, to_port: 80, cidr_blocks: [0.0.0.0/0] }])server aws.ec2.Instance(web-server,amiami-6869aa05,instance_typet2.micro,vpc_security_group_ids[group.name]
)pulumi.export(public_ip, server.public_ip)
pulumi.export(public_dns, server.public_dns)Pulumi 如何工作 Pulumi 的运作由几个部分组成第一语言处理中枢。Language Host 负责运行 Pulumi 的程序并为您的开发语言准备好与之对应的环境譬如 Python3.7。语言中枢由两部分组成1.执行器。它会协助 Pulumi 准备并设置好相应的 Runtime运行时2.运行时。它会负责为您编写的程序做好运行准备并在过程中监控程序的运行。第二资源提供方 Provider。资源提供方通过资源插件Resource Plugin用来管理资源与原生 SDK 协作来管理云端资源。有了上述两部分组成Engine 引擎就可以实现云端资源的管理。引擎已经被封装进 pulumi cli无需额外安装与部署。如何创建一个 Pulumi 项目1.安装 Pulumi以 Linux 为例curl -fsSL https://get.pulumi.com | sh
复制代码2.安装运行时以 Python 为例请阅读 如何在 Linux 上安装 Python3 本文不再复述3.配置权限请阅读 安装或更新最新版本的 Amazon CLI 完成 Amazon CLI 的安装本文不再复述请阅读 配置 Amazon CLI 完成完成权限配置本文不再复述4.创建新项目$mkdir newproject cd newproject
$pulumi new aws-pythonPulumi new 的命令行会通过交互式的方式为您创建新的项目与新的堆栈stack并安装好所有需要的组件Module。5.部署这个项目执行 pulumi up 进行项目部署执行成功后我们可以在 S3 中看到有 pulumi 创建出来的 S3 桶6.调整项目部署我们要在已经部署的项目中做出一些调整。之前的部署结束后我们创建了一个 S3 桶这次我们需要为其添加一个 index.html 并将其托管为静态站点6.1创建站点首页#touch index.html在其中添加文本htmlbodyh1Hello, Amazon!/h1/body
/html保存后编辑__main__.py在结尾处添加bucketObject s3.BucketObject( ‘index.html’, bucketbucket.id, sourcepulumi.FileAsset(‘index.html’))再次执行 pulumi up 变更部署6.2 调整部署这次我们需要编辑 S3 bucket 的属性使其托管静态站点并调整 Bucket ACL使其可以被匿名访问。编辑 main.py替换 bucket segment使其成为bucket s3.Bucket(my-bucket,websites3.BucketWebsiteArgs(index_documentindex.html,
))在结尾处增加输出pulumi.export(bucket_endpoint, pulumi.Output.concat(http://, bucket.website_endpoint))执行 Pulumi up发布项目变更后得到输出结果Outputs: bucketEndpoint: http://my-bucket-e7bfd5a.s3-website-us-west-2.amazonaws.combucketName : my-bucket-e7bfd5a访问 bucketEndpoint我们可以看到7.销毁项目我们可以执行 pulumi destroy 销毁项目。结论通过这个简单的案例我们展示了通过 pulumi 可以轻松的创建管理与删除一个项目在项目中我们可以创建调整管理删除与项目相关的 Resource将 pulumi 与编程语言相结合可以实现云管平台的个性化需求并通过云管平台的几次点击实现复杂逻辑下不同云服务的组合满足业务场景的需求。额外案例我们会额外提供几个 pulumi program方便大家直观的了解到 pulumi 的编码方式。创建一个名称为 “DocumentDBCluster”Amazon DocumentDB 的 Cluster自动备份保存15天必须开启删除保护。然后将 DocumentDB Cluster Endpoint 输出。import pulumi
import pulumi_aws as awsdocdb aws.docdb.Cluster(docdb,backup_retention_period5,cluster_identifierDocumntDBCluster,enginedocdb,master_passwordmustbeeightchars,master_usernamefoo,deletion_protectionTrue,skip_final_snapshotTrue)
pulumi.export(DocumentCluster_endpoint, docdb.endpoint)下面是一个稍微复杂一些的场景场景共由五个部分组成第一部分环境定义第二部分创建 SSHHTTP 的安全组第三部分创建 EC2 并附加 EIP第四部分创建 Aurora ServerlessV2第五部分输出。大家能够通过下列 python 代码与场景逐一对应。import pulumi
import pulumi_aws as awsconfig pulumi.Config()
availability_zone config.require(availabilityZone)
environment_type config.get(environmentType)
if environment_type is None:environment_type dev
ami_id config.get(amiID)
if ami_id is None:ami_id
ami_id_value /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 if ami_id else aws.get_ssm_parameter_string().value
key_pair_name config.require(keyPairName)
db_instance_identifier config.get(dbInstanceIdentifier)
if db_instance_identifier is None:db_instance_identifier mydatabase
db_username config.get(dbUsername)
if db_username is None:db_username postgres
db_password config.require(dbPassword)web_app_security_group aws.ec2.SecurityGroup(webAppSecurityGroup,namewebAppSG,descriptionAllow HTTP/HTTPS and SSH inbound and outbound traffic,ingress[aws.ec2.SecurityGroupIngressArgs(ip_protocoltcp,from_port80,to_port80,cidr_ip0.0.0.0/0,),aws.ec2.SecurityGroupIngressArgs(ip_protocoltcp,from_port443,to_port443,cidr_ip0.0.0.0/0,),aws.ec2.SecurityGroupIngressArgs(ip_protocoltcp,from_port22,to_port22,cidr_ip0.0.0.0/0,),
])web_app_instance aws.ec2.Instance(webAppInstance,availability_zoneavailability_zone,image_idami_id_value,instance_typet2.small,key_namekey_pair_name,security_groups[web_app_security_group.id,default,])
web_app_eip aws.ec2.EIP(webAppEIP,vpcTrue,
instanceweb_app_instance.id)web_app_database aws.rds.Cluster(webAppDatabase,cluster_identifierdb_instance_identifier,engineaurora-postgresql,engine_modeprovisioned,engine_version13.6,database_namedb_username,master_usernamedb_username,master_passworddb_password,serverlessv2_scaling_configurationaws.rds.ClusterServerlessv2ScalingConfigurationArgs(max_capacity1,min_capacity0.5,))
web_app_database_instance aws.rds.ClusterInstance(webAppDatabaseInstance,cluster_identifierweb_app_database.id,instance_classdb.serverless,engineweb_app_database.engine,engine_versionweb_app_database.engine_version)pulumi.export(websiteURL, web_app_eip.id.apply(lambda id: fhttp://{id}))
pulumi.export(webServerPublicDNS, web_app_instance.public_dns_name)
pulumi.export(webAppDatabaseEndpoint, web_app_database.endpoint)参考资源了解 Pulumi 的 Registryhttps://www.pulumi.com/registry?trkcndc-detail/安装 Python3https://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/install-linux-python.html?trkcndc-detail安装或更新最新版本的 Amazon CLIhttps://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html?trkcndc-detail配置 Amazon CLIhttps://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-configure.html?trkcndc-detail本篇作者付晓明亚马逊云解决方案架构师负责云计算解决方案的咨询与架构设计同时致力于数据库边缘计算方面的研究和推广。在加入亚马逊云科技之前曾在金融行业 IT 部门负责互联网券商架构的设计对分布式高并发中间件等具有丰富经验。文章来源https://dev.amazoncloud.cn/column/article/6309e39986218f3ca3e8f81f?sc_channelCSDN