拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Terraform AWS Provider 6.12.0 版本特性解读:Cognito 托管登录品牌资源上线与多项新属性支持

Terraform AWS Provider 6.12.0 版本特性解读Cognito 托管登录品牌资源上线与多项新属性支持【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读本文基于 terraform-provider-aws 仓库.changes/6.x/6.12.0.md发布说明系统解读 6.12.02025 年 9 月 4 日发布带来的新资源、新参数与行为变更。读完本文你将掌握aws_cognito_managed_login_branding新资源的完整用法了解 S3 ACL/Logging 中display_name属性的弃用时间线与迁移要点并能第一时间将 EFS IPv6 挂载、EC2 放置组、Lambda KMS 密钥加密、ECS 可用区再平衡等新能力应用到实战配置中。版本总览6.12.0 版本共包含 1 个全新资源、18 项增强含 1 个新 Region 支持和 3 项缺陷修复核心主题集中在托管登录品牌化、IPv6 网络能力、资源标识Identity支持与弃用属性清理四个方面新资源aws_cognito_managed_login_branding新 Regionap-southeast-6弃用通告S3 Bucket ACL 与 Logging 中的display_name属性行为变更ECS Service 的availability_zone_rebalancing默认语义调整一、新资源aws_cognito_managed_login_branding这是本版本唯一的新资源用于管理 Amazon Cognito 用户池客户端的托管登录界面品牌化Managed Login Branding包括登录页面的 Logo、背景图、配色方案等品牌资产与界面样式设置。相关实现位于 managed_login_branding.go并在 service_package_gen.go 中完成资源注册。1.1 Schema 属性说明根据源码中Schema()方法的定义managed_login_branding.go该资源支持以下属性属性必填/可选说明user_pool_id必填Cognito 用户池 ID变更会触发资源重建RequiresReplaceclient_id必填用户池客户端 ID变更会触发资源重建RequiresReplacesettings可选品牌化设置的 JSON 字符串基于 Smithy Document 类型与use_cognito_provided_values互斥use_cognito_provided_values可选/可计算是否使用 Cognito 提供的默认品牌值布尔与settings通过ExactlyOneOf校验互斥managed_login_branding_id可计算系统生成的品牌化资源 ID供导入与后续引用settings_all可计算合并 Cognito 默认值后的完整设置 JSON只读asset可选块品牌资产集合最多 40 个SizeBetween(0, 40)校验asset块内部包含 5 个属性全部为可选或必填的字符串category必填资产类别使用AssetCategoryType枚举校验color_mode必填配色方案模式如 LIGHT/DARK使用ColorSchemeModeType枚举extension必填资产文件扩展名使用AssetExtensionType枚举bytes可选资产文件的Base64 编码内容。源码中assetTypeModel.Expand()会通过inttypes.Base64Decode解码后传给 AWS APIresource_id可选资产资源 ID。值得注意的约束asset集合本身以及内部全部字段都带有RequiresReplace计划修饰符。源码注释解释了原因——Update API 允许更新单个资产但如果修改后的(category, color)组合与已有资产不同API 会将其当作新资产追加导致 Terraform 计划与实际状态不一致例如计划中只有一个资产实际却变成两个。为保持声明式行为只要asset被修改就会触发整个资源替换。1.2 完整配置示例resource aws_cognito_user_pool example { name example-pool } resource aws_cognito_user_pool_client example { name example-client user_pool_id aws_cognito_user_pool.example.id } # 方式一使用 Cognito 提供的默认品牌值 resource aws_cognito_managed_login_branding default { user_pool_id aws_cognito_user_pool.example.id client_id aws_cognito_user_pool_client.example.id use_cognito_provided_values true } # 方式二自定义 settings JSON 品牌资产 resource aws_cognito_managed_login_branding custom { user_pool_id aws_cognito_user_pool.example.id client_id aws_cognito_user_pool_client.example.id settings jsonencode({ # 品牌化设置例如 logo、背景色、按钮样式等键值 }) asset { category FAVICON_ICO color_mode LIGHT extension ICO bytes filebase64(${path.module}/favicon.ico) } }1.3 生命周期与底层 API 调用链从 managed_login_branding.go 的 CRUD 实现可以还原该资源与 AWS API 的映射关系Create调用CreateManagedLoginBranding随后调用DescribeManagedLoginBrandingReturnMergedResourcestrue回填settings_allRead先以ReturnMergedResourcesfalse只读取自定义值再以true读取合并后的完整值同时通过ListUserPoolClients分页遍历用户池全部客户端用DescribeManagedLoginBrandingByClient反向匹配client_id因为 AWS API 的 Describe 接口需要ManagedLoginBrandingId而非 ClientIdUpdate调用UpdateManagedLoginBranding。源码中有一处关键逻辑当settings发生变化且新值非空时会强制将UseCognitoProvidedValues设为falseDelete调用DeleteManagedLoginBranding当 AWS 返回ResourceNotFoundException时视为幂等成功资源已不存在直接返回Import导入 ID 采用user_pool_id,managed_login_branding_id两段式格式源码常量managedLoginBrandingIDParts 2导入后client_id会在下一次 Read 时被自动回填。该资源基于Terraform Plugin Framework实现resource.ResourceWithConfigure并通过FrameworkResource注解注册属于仓库中 Framework 风格的新一代资源。二、S3 ACL / Logging 的 display_name 属性弃用6.12.0 对以下三个属性发布正式弃用通告跟踪 Issue #44090aws_s3_bucket_acl的access_control_policy.grant.grantee.display_nameaws_s3_bucket_acl的access_control_policy.owner.display_nameaws_s3_bucket_logging的target_grant.grantee.display_name原因是 AWS 官方已停止对display_name的支持API 响应自2025 年 7 月 15 日起开始不一致地返回该字段并将在2025 年 11 月 21 日完全停止返回。这些属性将在未来某个大版本中从 Provider 中移除。迁移建议在相关资源配置中停止读取或依赖display_name改用idCanonical User ID来标识授权主体。例如resource aws_s3_bucket_acl example { bucket aws_s3_bucket.example.id access_control_policy { owner { id ACCOUNT_CANONICAL_USER_ID # 不再使用 display_name } grant { grantee { type CanonicalUser id GRANTEE_CANONICAL_USER_ID # 使用 id 而非 display_name } permission FULL_CONTROL } } }三、网络能力增强EFS IPv6 与 EC2 放置组3.1 EFS Mount Target 支持 IPv6#44079aws_efs_mount_target资源及其数据源aws_efs_mount_target同时新增ip_address_type与ipv6_address两个属性ip_address_type可选/可计算ForceNew取值通过awstypes.IpAddressType枚举校验ipv6_address可选/可计算ForceNew使用 IPv6 地址格式校验validation.IsIPv6Address。在 mount_target.go 的 Create 实现中这两个值会被透传到CreateMountTargetAPI 的IpAddressType与Ipv6Address字段。Read 阶段则根据返回结果自动推导地址类型mount_target.goIpAddress与Ipv6Address均存在 →DUAL_STACK仅IpAddress→IPV4_ONLY仅Ipv6Address→IPV6_ONLY。使用示例在支持 IPv6 的子网中创建双栈挂载点resource aws_efs_mount_target dualstack { file_system_id aws_efs_file_system.example.id subnet_id aws_subnet.example.id ip_address_type DUAL_STACK # 可选显式指定 IPv6 地址否则由 AWS 自动分配 # ipv6_address 2001:db8:... security_groups [aws_security_group.example.id] }3.2 EC2 实例与启动模板支持放置组 ID#38527aws_instance资源与数据源新增placement_group_id参数aws_launch_template新增placement.group_id参数用于直接以放置组 ID 形式指定实例放置位置与现有placement_group按名称引用形成互补。在 ec2_instance.go 的 Schema 中placement_group与placement_group_id通过ConflictsWith声明互斥二者不可同时配置Read 阶段会把 AWS 返回的放置组 ID 写入placement_group_idec2_instance.go。四、Lambda 函数支持 source_kms_key_arn#44080aws_lambda_function资源与aws_lambda_function数据源新增source_kms_key_arn参数用于指定加密函数部署包zip 包的 KMS 密钥 ARN在 function.go 的 Schema 中该属性为可选字符串通过verify.ValidARN做 ARN 格式校验并与image_uri通过ConflictsWith互斥容器镜像部署场景不适用Update 逻辑中只要配置了source_kms_key_arn就会在每次更新请求中始终携带该字段function.go确保密钥变更可被正确应用Read 阶段将该值回写到状态function.go。resource aws_lambda_function example { function_name example role aws_iam_role.example.arn filename function.zip handler index.handler runtime python3.12 source_kms_key_arn aws_kms_key.example.arn # 加密部署包 }五、ECS Serviceavailability_zone_rebalancing 行为变更#432416.12.0 对aws_ecs_service的availability_zone_rebalancing参数做了一次语义调整移除 Terraform 侧默认值将该参数改为 Optional Computed。变更后的实际行为对于兼容AvailabilityZoneRebalancing的新资源未配置时由 ECS 侧默认启用ENABLEDTerraform 会从服务端读取实际值并写入状态对于已有服务更新时若未显式配置该参数Terraform 会保留服务当前的值不会因 plan 中的空值而误改需要注意的边界情况如果某个存量服务从未配置过该值且本次更新也未配置ECS 会将其视为DISABLED处理。该参数在 service.go 中定义OptionalComputedCreate/Update 阶段仅在显式配置时d.GetOk才传入 APIRead 阶段回写服务端返回的AvailabilityZoneRebalancing值。对应测试用例见 service_test.go覆盖了ENABLED状态断言与statecheck精确值校验。六、其他增强与新增能力6.1 FSx OpenZFS 配额数量上限移除#44120 / #44118aws_fsx_openzfs_file_system与aws_fsx_openzfs_volume的user_and_group_quotas参数不再限制最大条目数可配置任意数量的用户/组配额条目实现位于 openzfs_file_system.go。6.2 SSM 系列资源支持资源标识#44075以下 6 个资源新增resource identity 支持即通过资源自身的唯一属性组合进行引用与导入而非仅依赖内部 IDaws_ssm_associationaws_ssm_documentaws_ssm_maintenance_windowaws_ssm_maintenance_window_targetaws_ssm_maintenance_window_taskaws_ssm_patch_baseline关于资源标识的设计背景可参考仓库设计文档 resource-identity.md 与 add-resource-identity-support.md。6.3 Synthetics Canary 支持临时存储#44105aws_synthetics_canary的run_config块新增ephemeral_storage参数用于控制 canary 运行时使用的临时存储大小。6.4 新区域支持#44127Provider 开始支持ap-southeast-6AWS 亚太地区新区域作为合法区域值。七、缺陷修复本版本修复了 3 个问题资源修复内容跟踪 Issueaws_s3tables_table_policy移除name与namespace的 plan 期校验避免因桶内资源尚未就绪导致的误报#44072aws_servicecatalog_provisioned_product更新失败时将provisioning_parameters与provisioning_artifact_id回填为最近一次成功部署的值避免状态被失败请求污染#43956aws_wafv2_web_acl修复 WebACL 包含大量规则时更新操作的性能问题#42740升级建议与注意事项关注弃用属性若现有配置中使用了 S3 ACL/Logging 的display_name应在本版本升级后尽快迁移到id属性以免在 AWS 于 2025 年 11 月 21 日完全停止返回该字段后产生状态漂移或不可预期差异复核 ECS 服务 plan升级后availability_zone_rebalancing变为 Optional Computed存量服务的 plan 输出可能出现该字段的读回与回写属于预期行为无需手工干预了解新资源的重建语义aws_cognito_managed_login_branding的asset块任何字段变更都会触发整体替换RequiresReplace在频繁更换品牌素材的场景下请结合filebase64的文件内容变化评估 plan 影响验证导入格式导入aws_cognito_managed_login_branding时ID 必须为user_pool_id,managed_login_branding_id两段式格式。参考资源版本发布说明.changes/6.x/6.12.0.mdCognito 新资源实现managed_login_branding.go 与对应测试 managed_login_branding_test.goEFS 挂载点实现mount_target.goLambda 函数实现function.goEC2 实例实现ec2_instance.goECS Service 实现service.go资源标识设计说明resource-identity.md、add-resource-identity-support.md【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门