ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for Java 2.x 操作 CloudFormation:栈生命周期管理完整实战

使用 AWS SDK for Java 2.x 操作 CloudFormation:栈生命周期管理完整实战 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文以 javav2/example_code/cloudformation 目录中的示例代码为主体系统讲解如何使用 AWS SDK for Java 2.x 对 AWS CloudFormation 执行核心栈生命周期操作——创建栈CreateStack、查询栈信息DescribeStacks、获取栈模板GetTemplate与删除栈DeleteStack。通过阅读本文你将掌握 CloudFormationClient 的构建与关闭方式、waiter 等待器机制、模板 URL 与角色 ARN 的传参规范以及基于 JUnit 5 的集成测试写法从而能够在自己的 Java 项目中以代码方式实现基础设施即代码IaC的自动化编排。1. CloudFormation 与 SDK for Java 2.x为什么需要以代码管理基础设施AWS CloudFormation 允许你通过模板文件JSON 或 YAML以声明式方式创建并预置 AWS 基础设施部署实现可预期、可重复的资源编排。与该服务交互的两种主要方式分别是 AWS 管理控制台与 SDK/CLI。当基础设施的创建、查询、更新与拆除需要融入 CI/CD 流水线或运维自动化脚本时通过 SDK 以编程方式管理栈生命周期就成为了必要手段。本仓库中的示例展示了 CloudFormation 最核心的四个操作创建栈基于存放在 Amazon S3 上的模板文件在指定 Region 创建资源栈描述栈列出当前账号/Region 下的全部栈及其元数据描述、栈 ID 等获取模板取回指定栈实际使用的模板正文templateBody删除栈销毁指定栈及其托管的所有资源。这四步覆盖了创建 → 校验 → 检查 → 回收的完整生命周期是大多数 IaC 自动化场景的最小闭环。2. 环境准备与项目结构2.1 前置条件根据 javav2/README.md 的说明运行本组示例需要满足本地已克隆、Fork 或下载本仓库aws-doc-sdk-examples已安装 Apache Maven版本 3.0Java 示例默认通过默认凭据提供程序链default credentials provider chain获取 AWS 凭据可在共享配置文件~/.aws/config中配置 IAM Identity Center SSO或在~/.aws/credentials中配置临时凭据配置默认 Region若未设置则 SDK 默认使用us-east-1各示例代码内部也显式指定了 Region见下文。2.2 目录结构javav2/example_code/cloudformation/ ├── pom.xml # Maven 构建配置Java 21、SDK BOM 2.35.10 ├── metadata.yaml # 示例与服务的映射清单 ├── README.md # 示例总览 └── src/ ├── main/java/com/example/cloudformation/ │ ├── CreateStack.java # 创建栈 │ ├── DeleteStack.java # 删除栈 │ ├── DescribeStacks.java # 描述全部栈 │ └── GetTemplate.java # 获取指定栈的模板 └── test/java/CloudFormationTest.java # JUnit 5 集成测试pom.xml通过software.amazon.awssdk:bom版本 2.35.10统一管理 SDK 版本其中cloudformation是核心依赖同时引入了secretsmanager测试从 Secrets Manager 读取配置与gson等辅助库。示例代码的 Java 编译目标为 Java 21。3. 创建栈CreateStack 深度解析3.1 运行参数CreateStack.java 要求传入 3 个命令行参数参数位置说明stackNameargs[0]要创建的 CloudFormation 栈名称roleARNargs[1]拥有 CloudFormation 权限的 IAM 角色 ARNlocationargs[2]模板文件的存放位置例如https://s3.amazonaws.com/bucketname/template.yml代码中通过 Java 文本块text block定义usage提示参数个数校验不通过时打印用法并System.exit(1)退出。3.2 客户端构建与关键请求参数客户端构建采用标准的 Builder 模式Region region Region.US_EAST_1; CloudFormationClient cfClient CloudFormationClient.builder() .region(region) .build();随后调用createCFStack(cfClient, stackName, roleARN, location)。请求构建的核心代码如下CloudFormationWaiter waiter cfClient.waiter(); CreateStackRequest stackRequest CreateStackRequest.builder() .stackName(stackName) .templateURL(location) .roleARN(roleARN) .onFailure(OnFailure.ROLLBACK) .build(); cfClient.createStack(stackRequest);这里有几个值得注意的技术点templateURL模板并非以字符串内嵌在代码中而是存放在 S3 桶中通过 URL 引用。这意味着执行者的 IAM 角色需要具备读取对应 S3 桶对象的权限如s3:GetObject。roleARNCloudFormation 将代入该 IAM 角色来创建栈内的 EC2 等资源因此该角色需要同时具备 CloudFormation 权限以及栈内资源如 EC2、S3的对应权限。onFailure(OnFailure.ROLLBACK)当栈创建失败时自动执行回滚操作避免留下半创建状态的资源。这是生产环境中的推荐策略。CloudFormationWaitercfClient.waiter()返回 SDK 内置的等待器可在后续调用中配合describeStacks等轮询操作实现创建完成前的同步等待本示例中已创建 waiter 实例实际阻塞等待可结合WaiterResponse使用。异常统一捕获CloudFormationException打印错误信息后退出。整个客户端在使用完毕后通过cfClient.close()显式关闭释放底层连接资源。3.3 权限要点类注释中明确说明CreateStack.java运行本示例必须有一个位于 S3 桶中的合法模板使用的角色必须同时拥有 CloudFormation、Amazon S3 与 Amazon EC2 权限运行前需完成开发环境与凭据配置。4. 查询栈信息DescribeStacks 与 GetTemplate4.1 DescribeStacks列出所有栈DescribeStacks.java 无参数即可运行Region 固定为us-west-2通过一次describeStacks()调用获取全部栈DescribeStacksResponse stacksResponse cfClient.describeStacks(); ListStack stacks stacksResponse.stacks(); for (Stack stack : stacks) { System.out.println(The stack description is stack.description()); System.out.println(The stack Id is stack.stackId()); }返回的Stack对象包含丰富的元数据字段示例中仅展示了description与stackId实际开发中还常使用stackName、stackStatus、creationTime、lastUpdatedTime、outputs等字段用于监控与报表。注意describeStacks未指定stackName时返回的是当前账号与 Region 下的栈列表SDK 会自动处理分页。4.2 GetTemplate取回栈模板正文GetTemplate.java 接收一个参数stackNameRegion 固定为us-west-2通过getTemplate请求取回模板GetTemplateRequest typeRequest GetTemplateRequest.builder() .stackName(stackName) .build(); GetTemplateResponse response cfClient.getTemplate(typeRequest); String body response.templateBody(); System.out.println(body);templateBody返回的是栈实际生效的模板正文JSON/YAML 文本。这在模板漂移检查和归档审计场景中非常实用——你可以对比当前生效模板与仓库中维护的模板确认基础设施是否符合预期。5. 删除栈DeleteStackDeleteStack.java 接收一个参数stackName请求构建最为简洁DeleteStackRequest stackRequest DeleteStackRequest.builder() .stackName(stackName) .build(); cfClient.deleteStack(stackRequest); System.out.println(The AWS CloudFormation stack was successfully deleted!);删除操作会连带销毁栈管理的全部资源EC2 实例、S3 桶、安全组等属于破坏性操作。官方 README 亦反复提醒部分示例包含删除资源的操作运行前务必确认操作对象最好在独立测试账号中验证。删除完成后可结合第 4 节的DescribeStacks确认栈已进入DELETE_COMPLETE状态。6. 基于 JUnit 5 的集成测试CloudFormationTestCloudFormationTest.java 使用 JUnit 5junit-jupiter5.11.4编写了 4 个带执行顺序的集成测试完整串联了上述生命周期顺序测试方法验证的操作1testCreateStackCreateStack.createCFStack(...)2testDescribeStacksDescribeStacks.describeAllStacks(...)3testGetTemplateGetTemplate.getSpecificTemplate(...)4testDeleteStackDeleteStack.deleteSpecificTemplate(...)测试通过TestMethodOrder(MethodOrderer.OrderAnnotation.class)与Order注解保证执行顺序确保先创建、再查询、后删除的依赖关系成立。全部断言使用assertDoesNotThrow即只要调用未抛出异常即视为通过。测试所需的stackName、roleARN、location等参数不再通过本地配置文件注入而是从 AWS Secrets Manager 的test/cloudformation密文中读取通过Gson反序列化为SecretValues对象。这种设计避免了在仓库中明文存储凭据符合最小权限与安全最佳实践。7. 构建与运行指南7.1 Maven 构建进入示例目录后执行mvn packageMaven 会根据pom.xml自动下载 SDK for Java 2.x 等依赖。构建产物位于target目录。若希望生成包含全部依赖的 uber JAR可参考 javav2/README.md 中 maven-shade-plugin 的配置。7.2 运行示例以创建栈为例其余示例运行方式类似java -cp target/CloudFormationV2-1.0-SNAPSHOT.jar com.example.cloudformation.CreateStack myStack arn:aws:iam::123456789012:role/CFRole https://s3.amazonaws.com/my-bucket/template.yml7.3 运行测试mvn test运行前需确保 AWS Secrets Manager 中存在test/cloudformation密文且包含stackName、roleARN、location字段。注意这些测试会操作真实 AWS 资源创建并删除真实栈可能产生 AWS 账户费用建议在独立测试环境执行。8. 注意事项与成本提示费用运行示例代码或测试均可能在 AWS 账户中产生费用详见 AWS 定价页与免费套餐说明最小权限建议按仅授予完成任务所需的最低权限原则配置 IAM 角色参考 IAM 最佳实践中的Grant least privilege指引区域差异本仓库代码未在所有 AWS 区域经过测试。从源码可见各示例硬编码了 RegionCreateStack/DeleteStack使用us-east-1DescribeStacks/GetTemplate使用us-west-2实际使用时请按需调整为业务所在区域破坏性操作删除栈会销毁栈内全部资源务必在测试账号或明确授权的环境中操作。9. 进一步探索本示例元数据映射见 metadata.yaml可用于自动化工具识别示例所属服务完整的 Java v2 示例环境配置与测试说明见 javav2/README.md若需要更复杂的多服务编排场景可参考仓库中javav2/usecases/下的完整教程如 Step Functions 工作流、Lambda 用例等它们展示了将 CloudFormation 与其它服务结合的生产级模式。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐intel-ice部署实践企业级Intel网络驱动安装与配置全攻略intel ice部署实践企业级Intel网络驱动安装与配置全攻略 前往项目官网免费下载 https://ar.openeuler.org/ar/ http示例工程教程后端AWS SDK for Java V2 操作 AWS Elastic Beanstalk 实战指南应用与环境全生命周期管理AWS SDK for Java V2 操作 AWS Elastic Beanstalk 实战指南应用与环境全生命周期管理 本文以 aws doc sdk e示例工程教程后端免费大语言模型API零成本接入终极指南学生与独立开发者的第一份AI接口地图免费大语言模型API零成本接入终极指南学生与独立开发者的第一份AI接口地图 毕设想做个AI聊天机器人一看付费接口的账单立刻被劝退脑子里有个AI小创意想快速示例工程教程后端上一篇awesome-system-design终极指南分布式系统资源大全下一篇G-Helper色彩配置文件修复终极指南ROG游戏本显示异常完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表