aws beanstalk 结合packer创建自定义平台

news2024/11/19 14:34:01

参考资料

  • https://github.com/aws-samples/eb-custom-platforms-samples#updating-packer-template
  • Elastic Beanstalk 自定义平台

今天使用eb平台创建环境的时候,发现有名为packer的选项,查询文档发现aws beanstalk支持自定义平台,这功能几乎没人用,好奇驱使下尝试一番。

从很多方面而言,自定义平台都是比自定义映像更高级的自定义方式。用户可以通过自定义平台从头开始开发整个新平台,自定义 Elastic Beanstalk 在平台实例上运行的操作系统、附加软件和脚本

拉取仓库

$ git clone git@github.com:aws-samples/eb-custom-platforms-samples.git
$ cd eb-custom-platforms-samples/NodePlatform_Ubuntu

之前介绍过通过packer构建eks自定义镜像,了解了packer的入口配置,对于beanstalk的自定义环境来说同样使用标准的packer构建配置。

$ cat custom_platform.json
{
  "variables": {
    "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}",
    "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}",
    "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}"
  },
  "builders": [
    {
      "type": "amazon-ebs",
      "name": "HVM AMI builder",
      "region": "cn-north-1",
      "source_ami": "ami-043b7efd4c7a4c758",
      "instance_type": "m3.medium",
      "ssh_username": "ubuntu",
      "ssh_pty": "true",
      "ami_name": "Beanstalk Custom Platform running Node on Ubuntu Server 16.04 LTS (built on {{isotime \"20060102150405\"}})",
      "tags": {
        "eb_platform_name": "{{user `platform_name`}}",
        "eb_platform_version": "{{user `platform_version`}}",
        "eb_platform_arn": "{{user `platform_arn`}}"
      }
    }
  ],
  "provisioners": [
    {
      "type": "file",
      "source": "builder",
      "destination": "/tmp/"
    },
    {
      "type": "shell",
      "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}",
      "scripts": [
        "builder/builder.sh"
      ]
    }
  ]
}

构建脚本`builder的含义,对于构建文件和脚本的具体含义,官方文档有详细描述

https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/custom-platforms.html

$ tree -L 2
├── builder.sh
├── CONFIG
├── platform-uploads
│   ├── etc
│   └── opt
└── setup-scripts
    ├── 00-sync-apt.sh
    ├── 01-install-nginx.sh
    └── 02-setup-platform.sh

开始构建新的自定义平台,选择符合要求的ubuntu 16.04作为源ami

$ ebp init
$ ebp create
Creating application version archive "app-230114_061319657514".
Uploading NodePlatform_Ubuntu/app-230114_061319657514.zip to S3. This may take a while.
Upload Complete.
Note: An environment called 'eb-custom-platform-builder-packer' has been created in order to build your application. This environment will not automatically be terminated and it does have a cost associated with it. Once your platform creation has completed you can terminate this builder environment using the command 'eb terminate'.
2023-01-14 06:13:20    INFO    Initiated platform version creation for 'NodePlatform_Ubuntu/1.0.0'.
2023-01-14 06:13:23    INFO    Creating Packer builder environment 'eb-custom-platform-builder-packer'.

beanstalk回单独创建一个环境来进行新ami的构建,新环境使用专属ami启动

整体关系如下,实际是把packer当作应用程序进行部署
在这里插入图片描述

可见一共启动了两台实例

在这里插入图片描述

实例使用的ami为 aws-elasticbeanstalk-amzn-2018.03.0.x86_64-packer-hvm-202105262310

在这里插入图片描述

构建相关的日志可以登录构建实例查看对应日志,例如/var/log/packer-builder/NodePlatform_Ubuntu:1.0.0-builder.log

$ eb events
2023-01-14 06:15:27    ERROR   [Instance: i-xxxxxxxxx] Command failed on instance. Return code: 1 Output: (TRUNCATED)...e to Version 3. More information can be found here: https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/
'packer build' failed, the build log has been saved to '/var/log/packer-builder/NodePlatform_Ubuntu:1.0.0-builder.log'.
$ ls /var/log/packer-builder
NodePlatform_Ubuntu:1.0.0-builder.log  NodePlatform_Ubuntu:1.0.1-builder.log  rotated
$ cat NodePlatform_Ubuntu:1.0.1-builder.log

或者直接查看platform日志

$ ebp logs 

构建完毕之后直接在创建环境时指定即可

$ eb create -p <platform arn>

一直报pip安装相关错误,在部署脚本里也没找到对应的逻辑,推测是pakcer版本适配的报错(6年前的示例),无法继续尝试

相关错误

没有指定source ami

2023-01-14 07:26:12    ERROR   Packer failed with error: '1 error(s) occurred:
* A source_ami or source_ami_filter must be specified'

ami不兼容,需要提供packer构建配置中符合的ami类型,不能写实例存储的ami

Packer failed with error: '--> HVM AMI builder: The provided source AMI has an invalid root device type.
1.0.0 b"Expected 'ebs', got 'instance-store'.'"

无法找到ec2终端节点,中国区的适配错误

ERROR   Packer failed with error: '--> HVM AMI builder: Error querying AMI: RequestError: send request failed
caused by: Post https://ec2.region.amazonaws.com/: dial tcp: lookup ec2.region.amazonaws.com on 172.31.0.2:53: no such host'

packer构建错误

2023-01-14 06:25:18    ERROR   Packer failed with error: '--> HVM AMI builder: Script exited with non-zero exit status: 1'
2023-01-14 06:25:18    ERROR   'packer build' failed, the build log has been saved to '/var/log/packer-builder/NodePlatform_Ubuntu:1.0.1-builder.log'
2023-01-14 06:25:28    ERROR   [Instance: i-xxxxxxxxx] Command failed on instance. Return code: 1 Output: (TRUNCATED)...e to Version 3. More information can be found here: https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/
'packer build' failed, the build log has been saved to '/var/log/packer-builder/NodePlatform_Ubuntu:1.0.1-builder.log'.
2023-01-14 06:25:28    ERROR   Unsuccessful command execution on instance id(s) 'i-xxxxxxxxx'. Aborting the operation.

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

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

相关文章

4. 使用预训练的PyTorch网络进行图像分类

4. 使用预训练的PyTorch网络进行图像分类 这篇博客将介绍如何使用PyTorch预先训练的网络执行图像分类。利用这些网络只需几行代码就可以准确地对1000个常见对象类别进行分类。这些图像分类网络是开创性的、最先进的图像分类网络&#xff0c;包括VGG16、VGG19、Inception、Dens…

windows下 pytorch的安装(gpu版本以及cpu版本)

一. 查看是否有gpu 打开cmd 输入nvidia-smi 是以下这种情况的就是有gpu 没有gpu的话就会报错 下载安装cuda以及cudnn&#xff08;安装cpu版本可以跳过此步骤直接进行pytorch的安装&#xff09; 下载cuda 看清楚两个箭头指的地方 一个是11.3.0 一个是日期 后面下载cudnn的时…

ProEssentials Pro 9.8.0.32 Crack

ProEssentials .Net图表组件用于对您的科学、工程和金融图表进行评估和选择&#xff01; Winforms 图表, WPF 图表, C/MFC/VCL 图表. Gigasoft拥有20多年帮助企业开发大型客户端和嵌入式图表项目的经验 为何选择ProEssentials&#xff1f; 我们真诚地希望您能针对您的具体实施…

day03 链表 | 203、移除链表元素 707、设计链表 206、反转链表

题目 203、移除链表元素 删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;head [], val 1 输出&#xff1a;[] 示例 3&#xff1a; 输入&am…

Pytorch Kaggle实战:House Prices - Advanced Regression Techniques

通过Kaggle比赛&#xff0c;将所学知识付诸实践 目录 1、下载和缓存数据集 2、访问和读取数据集 3、数据预处理 3、训练 4、K折交叉验证 5、模型选择 6、提交Kaggle预测 1、下载和缓存数据集 建立字典DATA_HUB,它可以将数据集名称的字符串映射到数据集相关的二元组上&am…

网络抓包-抓包工具tcpdump的使用与数据分析

1.测试背景 本次测试选用两台不同的服务器&#xff0c;ip分别为.233和.246,233服务器为客户端&#xff0c;246服务器为服务端。利用tcp协议就行socket通信。socket网络编程部分示例代码为基本的通信代码&#xff0c;需要了解tcp网络通讯的基本协议与过程。服务器上采用tcpdump…

【学习笔记】【Pytorch】八、池化层

【学习笔记】【Pytorch】八、池化层学习地址主要内容一、最大池化操作示例二、nn.MaxPool2d类的使用1.使用说明2.代码实现三、池化公式学习地址 PyTorch深度学习快速入门教程【小土堆】. 主要内容 一、最大池化操作示例 二、nn.MaxPool2d类的使用 作用&#xff1a;对于输入信…

Min_25筛

概述 Min_25是日本一个ACM选手的ID&#xff0c;这个筛法是他发明的&#xff0c;所以称之为Min_25筛。它能在亚线性复杂度求出一类积性函数的 fff 的前缀和&#xff0c;前提 是这个积性函数在质数和质数的幂位置的函数值比较好求。借助埃拉托色尼筛的思想 将原问题转化成与质因…

华为PIM-SM 动态RP实验配置

目录 建立PIM SM邻居 配置DR 配置动态RP 组成员端DR上配置IGMP 配置PIM安全 配置SPT切换 配置Anycast RP 配置接口的IP地址&#xff0c;并配置路由协议使得全网互通 建立PIM SM邻居 AR5操作 multicast routing-enable 开启组播路由转发功能 int g0/0/0 pim sm …

MacOS对文件夹加密的方法

背景 MacOS没有那种类似于windows那种对文件夹加解密的软件&#xff0c;MacOS自带有一种加解密&#xff0c;但是其实使用体验上跟windows那种很不一样。 win上的加解密都很快&#xff0c;就好像仅仅对文件夹进行加解密&#xff08;我估计是安全性较低的&#xff0c;因为加密过…

【JavaSE】异常的初步认识

目录 1、初步认识异常 1、算数异常 2、空指针异常 3、数组越界异常 2、异常的结构体系 3、异常的分类 1、编译时异常/受查异常 2、运行时异常/非受查异常 4、异常的处理 1、处理异常的编程方式&#xff08;防御式编程&#xff09; 1、事前防御性&#xff08;LBYL&a…

【软件测试】软件测试基础知识

1. 什么是软件测试 软件测试就是验证软件产品特性是否满足用户的需求 2. 调试与测试的区别 目的不同 调试&#xff1a;发现并解决软件中的缺陷测试&#xff1a;发现软件中的缺陷 参与角色不同 调试&#xff1a;开发人员测试&#xff1a;测试人员&#xff0c;开发人员等&a…

软件测试复习04:动态测试——黑盒测试

作者&#xff1a;非妃是公主 专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录等价划分法边值分析法错误推测法因果图法示例习题等价划分法 等价类&#xff1a;一个几何&#xf…

如何快速搭建自己的阿里云服务器(宝塔)并且部署springboot+vue项目(全网最全)

&#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 文章目录&#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01;一、前言二、准备工作1、新手申请2、安全组设置3、修改实例4.这里可以 直接用阿里云…

【图像处理OpenCV(C++版)】——4.2 对比度增强之线性变换

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

【数据结构】5.7 哈夫曼树及其应用

文章目录前言5.7.1 哈夫曼树的基本概念哈夫曼树的特点5.7.2 哈夫曼树的构造算法哈夫曼树的构造过程哈夫曼算法的实现算法思路算法实现5.7.3 哈夫曼编码哈夫曼编码思想前缀编码哈夫曼编码哈夫曼编码的性质哈夫曼编码的算法实现文件的编码和解码前言 编程&#xff1a;将学生的百…

【精品】k8s(Kubernetes)由基础到实战学法指南

轻松快速学会k8s四招 图1 k8s四招 学完本篇,您会获得什么惊喜? 从初学k8s,到帮助别人学会的过程中,发现朋友们和我,并非不努力,而是没有掌握更好的方法。有方法可让我们学的更快更轻松,这篇文章,以一个networkpolicy的题目,来逐步讲解,帮助大家建立一种,自己可以根…

深入了解延迟队列 DelayQueue

1. 前言 前面我们了解了基于数组&#xff0c;链表实现的阻塞队列&#xff0c;以及优先级队列。今天我们来了解下基于优先级队列的延迟队列&#xff0c;而且今天的内容很核心哦。 大家快搬好小板凳做好&#xff0c;听我慢慢分析 2. 简单实例 Task 类 public class Task implem…

数据结构(字符串)

字符串简称串&#xff0c;由零个或多个字符组成的有限序列&#xff0c;一般记为s&#xff1d;“a0 a1a2…an-1”,&#xff08;n≥0&#xff09;。其中s称作串名&#xff0c;用双引号括起来的字符序列是串的值。字符ai&#xff08;0≤i≤n-1&#xff09;可以是字母、数字或其它字…

开发第三天(Day 03)

首先对ipl.nas进行修改&#xff1a; ; haribote-ipl ; TAB4ORG 0x7c00 ; 这个程序被读入哪里; 以下是标准FAT12格式软盘的描述JMP entryDB 0x90DB "HARIBOTE" ; 可以自由地写引导扇区的名字 (8字节)DW 512 ; 1扇区…