aws appconfig 理解和使用appconfig对应用程序进行动态配置

news2024/9/21 20:53:23

参考资料

  • Automating Feature Release using AWS AppConfig Integration with AWS Codepipeline
  • Deploying application configuration to serverless: Introducing the AWS AppConfig Lambda extension
  • Create a pipeline that uses Amazon AppConfig as a deployment provider

appconfig的基本概念

appconfig主要的功能是创建、管理以及快速部署应用程序配置。可以集成的服务包括ec2,lambda,ecs,eks。iot等。

来自chatgpt的解释

AWS AppConfig is a service provided by Amazon Web Services (AWS) that allows you to manage and deploy application configurations across different environments. It helps you deploy configurations and feature flags for your applications in a controlled manner, with the ability to monitor and roll back changes easily.

使用appconfig的优势如下

  • 配置源包括appconfig 托管配置,ssm 参数,github和codecommit仓库等
  • 使用自带的json校验,或者通过lambda函数定义配置校验规则
  • 控制配置的部署速度、部署时间和bake时间。
  • 监控配置过程,失败回滚

appconfig的关键概念

  • application,组织和管理配置数据的单位
  • envionment,环境是appconfig的逻辑部署组,application可以有多个环境
  • configuration profile,使得appconfig能够访问配置数据(可以附加校验器),可以设置的配置数据包括
    • yaml和json数据
    • s3对象
    • codepipeline管道
    • secret manager
    • parameter store
    • ssm documents

应用程序检查和获取配置数据的流程

https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html#learn-more-appconfig-how-it-works

appconfig的api在2021-11-18进行了迁移,GetConfiguration的api调用被GetLatestConfiguration取代

在这里插入图片描述

appconfig入门使用

应用和环境

创建application,应用程序是一个管理和部署配置文件的单元

  • 应用程序可以关联插件,包括eventbridge,sqs和sns
aws appconfig create-application --name my-app

创建environment,环境是application的逻辑部署组

  • 环境可以配置监控,需要设置cw alarm和对应的iam角色
  • 环境可以关联插件,包括eventbridge,sqs和sns
aws appconfig create-environment \
  --application-id ml6665u \
  --name my-testenv \
  --description "my test appconfig env"
  #--monitors "AlarmArn=ARN_of_the_Amazon_CloudWatch_alarm,AlarmArnRole=ARN_of_the_IAM role_for_AWS AppConfig_to_monitor_AlarmArn" \
  #--tags User_defined_key_value_pair_metadata_of_the_environment

配置文件

创建配置文件(configuration profile),包含具体的配置数据,需要指定以下信息

https://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html

  • 配置数据源
  • 访问配置数据的iam角色
  • 数据校验程序(json/yaml的静态校验,或lambda函数校验)

在这里插入图片描述

关于lambda函数校验

  • appconfig调用lambda函数校验的event示例如下

    {
        "ApplicationId": "The application Id of the configuration profile being validated", 
        "ConfigurationProfileId": "The configuration profile Id of the configuration profile being validated",
        "ConfigurationVersion": "The configuration version of the configuration profile being validated",
        "Content": "Base64EncodedByteString", 
        "Uri": "The uri of the configuration"    
    }
    
  • appconfig在调用StartDeploymentValidateConfigurationActivity时验证lambda,需要为appconfig.amazonaws.com授权调用该lambda函数

配置文件可以创建两种类型

  • faeature flag,Create, manage and safely deploy a single or a group of feature flags. Feature Flags help you release features quickly and safely.
  • freeform configuration,Create your own configurations and store them within Amazon AppConfig or reference existing data in S3, Parameter Store, or Secrets Manager.

feature flag

创建功能标志(feature flag),主要用于启用或禁用应用程序中的功能。注意

  • 类型为,AWS.AppConfig.FeatureFlags
  • 位置uri为,hosted
aws appconfig create-configuration-profile \
  --application-id ml6665u \
  --name my-config-profile \
  --location-uri hosted \
  --type AWS.AppConfig.FeatureFlags

简单创建一个功能标志

在这里插入图片描述

freeform configuration

对于freeform的配置文件,可以选择更多的数据源

在这里插入图片描述

部署策略

创建部署策略,即部署速度、部署时间和bake时间等

https://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html

  • 部署类型,支持线性指数部署类型
  • 步骤百分比,在部署的每个步骤中作为目标的调用
  • 部署时间,appconfig部署到主机的花费时间
  • Bake time,部署100%后,在完成之前对cw告警监控的时间,如果告警则回滚

类似codedeploy的部署策略,有三个预定义策略

  • AppConfig.AllAtOnce
  • AppConfig.Linear50PercentEvery30Seconds
  • AppConfig.Canary10Percent20Minutes

部署配置

实际就是将环境和配置文件绑定并发布

在这里插入图片描述

检索配置

将配置文件发布到环境中,就能够通过对应的接口检索到配置数据了

应用程序检索配置文件的逻辑参考上文的描述

  • 获取客户端会话

    $ aws appconfigdata start-configuration-session \
         --application-identifier ml6665u \
         --environment-identifier ez41c69 \
         --configuration-profile-identifier my-config-profile
    {
        "InitialConfigurationToken": "AYADeKP07JoESGyhSikVkg/JFc8AXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREFraGZmN3JKU2FHa0x4RnZXQ1hiV2xieU1KSzRhelEvR0FUOU5TaG9oUUkwNEtDbUx3TmZ0azZSL1ZKQTZyckxCZz09AAEAB2F3cy1rbXMAT2Fybjphd3MtY246a21zOmNuLW5vcnRoLTE6NDYzNDg3MTE3ODUzOmtleS9kZjQ0NjJjYi04ZTRkLTQ0ZjUtODQ0Ni1lMmY5NzgwMDdmZGEA9gEBA/83mxxxTS7TErRNGSXrJSRHsPbaRH1jcwJ+13883JraBviC0heW1uaOUwm3icxYUcCMHtohdSrBx990aU/etwA4vQVIBsmFQkXyL4ZC6KPis7Gx/Ssi89aH25FKZr2b3gxrg=="
    }
    
  • 请求配置,并得到了NextPollConfigurationToken

    $ export token=AYADeKP07JoxA4vQVIBsmFQkXyL4ZC6KPis7Gx/Ssi89aH25FKZr2b3gxrg==
    $ aws appconfigdata get-latest-configuration \
        --configuration-token $token mydata.json
    {
        "NextPollConfigurationToken": "AYADeJNIG08gqrex7XXHbUValqIAXwxtY/a0auK9QWr+EAjEA/a2Lp8/rMhdaMGgcrwI4JyBAGM1C9525wkkjJbFrmHSpZw6T+dxkwalgOa3gi4Xp",
        "NextPollIntervalInSeconds": "60",
        "ContentType": "application/json"
    }
    $ cat mydata.json
    {
    "action":
        {
            "action":"eat",
            "age":26,
            "enabled":true,
            "gender":"male",
            "married":true,
            "name":"zhangsan"
        }
    }
    
  • 后续调用必须提供NextPollConfigurationToken

将appconfig和eks集成

将appconfig和eks集成非常简单

  • appconfig作为一个sidecar从appconfig服务轮询并获取配置文件
  • application从appconfig-agent检索配置数据

创建以下deployment

kind: Pod
apiVersion: v1
metadata:
  name: test-appconfig
  labels:
    app: test-appconfig
spec:
  #serviceAccountName: eks-appconfig
  containers:
  - name: amazonlinux
    image: xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/amazonlinux:latest
    command: ["/bin/sh","-c","sleep 3600"]
  - name: appconfig-agent
    image: public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x
    ports:
    - name: http
      containerPort: 2772
      protocol: TCP
    env:
    - name: SERVICE_REGION
      value: cn-north-1

默认情况下,appconfig代理在端口 2772 上运行

在amazonlinux中访问appconfig

$ curl "http://localhost:2772/applications/my-app/environments/my-config-profile/configurations/my-config-profile"
curl: (3) URL using bad/illegal format or missing URL
curl: (97) Could not resolve host: curl
{"Message":"User: arn:aws-cn:sts::xxxxxxx:assumed-role/eksctl-test124-nodegroup-test124-NodeInstanceRole-XTF9X5WL2NMR/i-0a661ae8d299361
96 is not authorized to perform: appconfig:StartConfigurationSession on resource: arn:aws-cn:appconfig:cn-north-1:xxxxxxx:application/m
l6665u/environment/my-config-profile/configuration/thtqvv5 because no identity-based policy allows the appconfig:StartConfigurationSession a
ction"}

创建策略如下

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "myappconfig",
            "Effect": "Allow",
            "Action": "appconfig:*",
            "Resource": "*"
        }
    ]
}

我们需要给appconfig-agent配置appconfig的权限

eksctl create iamserviceaccount \
   --cluster test124 \
  --name eks-appconfig \
  --namespace default \
  --attach-policy-arn arn:aws-cn:iam::xxxxxxx:policy/MyAppconfigFullAccess \
  --override-existing-serviceaccounts \
  --region cn-north-1 \
  --approve

之后取消pod中的sa注释,重新创建pod

再次访问成功拿到配置数据

bash-5.2# curl "http://localhost:2772/applications/my-app/environments/my-config-profile/configurations/my-config-profile"
{"Message":"Environment not found","ReferencedBy":{"EnvironmentIdentifier":"my-config-profile"},"ResourceType":"Environment"}

此外,appconfig代理的环境变量配置

https://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/appconfig-integration-containers-agent.html#appconfig-integration-containers-agent-configuring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒懂算法 | 搜索基础

本篇介绍了BFS和DFS的概念、性质、模板代码。 01、搜索简介 搜索,就是查找解空间,它是“暴力法”算法思想的具体实现。 暴力法(Brute force,又译为蛮力法):把所有可能的情况都罗列出来,然后逐一检查,从中找到答案。这种方法简单、直接,不玩花样,利用了计算机强大的…

JavaScript 中的 String 类型 模板字面量定义字符串

ECMAScript 6新增了使用模板字面量定义字符串的能力。与使用单引号或双引号不同,模板字面量保留换行字符,可以跨行定义字符串: let str1 早起的年轻人\n喜欢经常跳步;let str2 早起的年轻人喜欢经常跳步;console.log(str1);// 早起的年轻人…

【游戏逆向】游戏玩家技能冷却分析

技能冷却对于不同的游戏有不同的存放方式,而技能冷却的遍历也大多不会和技能的普通属性放在一起,在《在**明月刀》这款游戏中,技能的冷却判断格外重要,因为技能的连贯性对打怪的效率影响很大。 我们需要找一个冷却相对较长的技能用来进行扫描和过滤,一般选择几十秒即可,…

【本周特惠课程】基于GAN的图像增强理论与实践(涵盖图像降噪、色调映射、去模糊、超分辨、修复等方向)...

前言欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下:第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用…

Windows扫描工具RunScanner使用实验(21)

实验目的 掌握利用Runscanner扫描和分析电脑;预备知识 RunScanner是一个完全免费的Windows系统工具,您可以用它轻松地将隐藏在您系统中的autostart程序,spyware,adware,主页劫持,未经认证的驱动揪出来,并可以导入和导出报告以帮助别人或获取帮助.目前它可以…

华为OD机试题,用 Java 解【素数之积】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

C++中的利器——模板

前文本文主要是讲解一下C中的利器——模板,相信铁子们在学完这一节后,写代码会更加的得心应手,更加的顺畅。一,泛型编程想要学习模板,我们要先了解为什么需要模板,我们可以看看下面这个程序。int add(int&a…

MDK Keil5 创建Stm32工程-理论篇(这里以Stm32F103Zet6为例)

一、文件夹创建与文件说明整个工程可以粗略的划分为几个文件夹:BSP底层驱动比如GPIO\Timer等驱动文件CMSIS内核相关的文件Firmware生成的固件下载文件Mycode用户编写的相关文件,主要编写的文件都在这个文件夹里Project工程文件startup芯片启动文件STM32F…

1.C#与.NET简介

目录 一、C#语言及其特点 二、C#与.NET Framework/.NET Core关系 三、C#应用开发 四、案例展示 五、学习环境 一、C#语言及其特点 C#是美国微软公司发布的一种面向对象的,运行于 .NET Framework 和 .NET Core (完全开源,跨平台&#xff…

什么是LSM-Tree

前言 十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是GFS(2003年),MapReduce(2004年),BigTable(2006年),为开源界在大数据领域带来了无数的灵感&#…

unity的安装配置和第一个游戏-unity开学第一课

许多的小伙伴学编程语言其实是因为玩游戏,玩着玩着就想写游戏了,于是开始学习c学习C#学习java,但相比之下C#的操作会更加容易,所以就开始学习unity来编游戏了。这里就就算是unity开学第一课啦-unity的安装配置和第一个游戏。 文章…

Maven项目的创建

目录 1.创建java项目 1.1 新建项目​编辑 2 创建web项目 2.1 新建项目 2.2 启动项目 2.2.1 修改jdk的版本 2.2.2 设置单元测试的版本 2.2.3 删除pluginManagement标签 2.2.4添加web部署插件 2.2.5 启动项目 1.创建java项目 1.1 新建项目 创建resources目录 利用maven…

类模板函数模板从属类型

准备看个项目找实习&#xff0c;边看边学&#xff0c;一看到处都是template 和typename&#xff0c;好几年前学的C都忘记光了&#xff0c;在这里先做个笔记复习一下。template <class T> T abs(T x) {if(x < 0) return -x;return x; } int main() {int x 1;cout <…

PyQt5可视化 7 饼图和柱状图实操案例 ①Qt项目的创建

目录 一、新建Qt项目 二、添加组件和布局 三、添加资源 1. 新建资源文件 2. 添加图标资源 四、frameHead 1. toolBtnGenData 2. toolBtnCounting 3. comboTheme 4. comboAnimation 5. Horizontal Spacer 6. toolBtnQuit 7. 设置toolBtnQuit的功能 8. frameHead的…

设计模式(十六)----结构型模式之代理享元模式

1、概述 定义&#xff1a; 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 2 结构 享元&#xff08;Flyweight &#xff09;模式中存在以下两种状…

CentOS系统安装部署Zabbix

1、LNMP环境部署&#xff1a; 1&#xff09;系统升级&#xff1a; yum update -y 2&#xff09;安装依赖库&#xff1a; yum install -y zlib pcre pcre-devel openssl openssl-devel 3&#xff09;添加用户www&#xff0c;那么也自动创建了用户组&#xff1a;www&#xf…

C/C++开发,无可避免的多线程(篇五).实现自己的线程封装类

一、c11以前的线程封装版本 在本专栏的多线程课题第一篇就说过&#xff0c;c11标准前&#xff0c;实现多线程事务是由调用的<pthread.h>头文件的线程相关功能函数来实现的。 现在通过<pthread.h>的pthread_create、pthread_join、pthread_exit等功能函数来封装一个…

VRRP主备备份

1、VRRP专业术语 VRRP备份组框架图如图14-1所示: 图14-1:VRRP备份组框架图 VRRP路由器(VRRP Router):运行VRRP协议的设备,它可能属于一个或多个虚拟路由器,如SwitchA和SwitchB。虚拟路由器(Virtual Router):又称VRR…

元宇宙、区块链 通俗易懂

什么是区块链&#xff1f;比特币挖矿是什么&#xff1f;元宇宙是什么&#xff1f;Web(万维网)的三权化进化&#xff1a;基于此&#xff0c;介绍下“元宇宙”。1992年&#xff0c;美国作家史蒂芬森在《雪崩》一书中首次提出了“元宇宙(Metaverse)”的概念。元宇宙实际上就是一种…

新C++(13):布隆过滤器

"明白成功&#xff0c;不一定赢在起跑线!"位图反思上篇呢&#xff0c;我们在遇到海量数据时&#xff0c;如果只是进行诸如&#xff0c;查找一个数在不在这样的简单逻辑情况&#xff0c;在使用数组这样的内存容器&#xff0c;无法存储这么多数据时&#xff0c;我们采用…