首页 > 解决方案 > 使用 Chef-Solo 在 Spinnaker Pipeline 中烘焙 AMI

问题描述

我正在尝试在 Spinnaker 中构建测试管道以烘焙 AMI,然后更新 CloudFormation 模板以将 AMI 部署到 Auto Scaling 组中的 EC2 实例。

我开发了一个小型测试厨师食谱,在本地运行打包程序时效果很好。我在我的笔记本电脑上本地运行 berks 来出售我的食谱并将它们从我们内部的 Chef 超市中取出。Packer 配置了 chef-solo 供应器,如下面的示例打包器模板所示,并将食谱传输到打包器构建器 EC2 实例并运行 Chef。目前,我们正在使用 Linux 进行测试,但希望同时支持 Linux 和 Windows AMI。

是否可以将 chef-solo 与 Spinnaker 的自定义打包程序模板一起使用?如果是这样,在打包程序执行之前,berks 应该在何时何地运行以供应食谱?

{
  "variables": {
    "aws_access_key": "{{env `AWS_ACCESS_KEY_ID`}}",
    "aws_secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}",
    "aws_region": "{{env `AWS_REGION`}}",
    "ssh_private_key_file": "{{env `SSH_PRIVATE_KEY_FILE`}}",
    "subnet_id": "{{env `AWS_SUBNET_ID`}}",
    "vpc_id": "{{env `AWS_DEFAULT_VPC_ID`}}"
  },
  "builders": [
    {
      "type": "amazon-ebs",
      "access_key": "{{user `aws_access_key`}}",
      "secret_key": "{{user `aws_secret_key`}}",
      "region": "{{user `aws_region`}}",
      "source_ami_filter": {
        "filters": {
          "virtualization-type": "hvm",
          "name": "amzn2-ami-hvm-*-x86_64-gp2",
          "root-device-type": "ebs"
        },
        "most_recent": true,
        "owners": [
          "amazon"
        ]
      },
      "ami_name": "test-ami-{{timestamp}}",
      "ami_description": "Test Linux AMI",
      "communicator": "ssh",
      "instance_type": "m4.large",
      "subnet_id": "{{user `subnet_id`}}",
      "tags": {
        "Name": "Test Linux AMI"
      },
      "ssh_username": "ec2-user",
      "ssh_keypair_name": "TestKeypair",
      "ssh_private_key_file": "{{user `ssh_private_key_file`}}",
      "vpc_id": "{{user `vpc_id`}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell-local",
      "command": "berks vendor --delete -b ./Berksfile ./cookbooks"
    },
    {
      "type": "chef-solo",
      "cookbook_paths": [
        "./cookbooks"
      ],
      "run_list": [
        "recipe[test_cookbook]"
      ]
    }
}

标签: amazon-ec2chef-infrapipelinepackerspinnaker

解决方案


推荐阅读