AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 810093
Accepted
StandardEyre
StandardEyre
Asked: 2016-10-20 12:08:57 +0800 CST2016-10-20 12:08:57 +0800 CST 2016-10-20 12:08:57 +0800 CST

如何通过 Chef 配方向 AWS OpsWorks 中的 Windows Server 2012 实例添加标签?

  • 772

我的雇主需要在 OpsWorks 中启动的 AWS ec2 实例上线后为其添加标签。

这些实例都是此堆栈中的 MS Windows Server 2012 R2 Base。目标是向堆栈 Foo 中启动的实例和堆栈 Bar 中的“应用程序”:“bar”添加自定义标签,如“application”:“foo”。

我找到了一个github repo chef-aws-tag,如果我在 Linux 上运行 Chef 11,我相信它会满足我的需求。OpsWorks 仅适用于 Windows Server 2012,并且仅适用于 Chef 12.2。

当我将 github 存储库中的 chef-aws-tag 配方添加到 Setup 生命周期事件时,实例在“running_setup”处失败,并带有“setup_failed”。

Chef 失败日志随后在 running_setup 阶段报告此失败:

INFO: HTTP Request Returned 412 Precondition Failed : No such cookbook: aws 
ERROR: Running exception handlers
FATAL: Net::HTTPServerException: 412 "Precondition Failed "

这与 metadata.rb 中的依赖项匹配,即:depends 'aws', '>= 0.2.4'
我了解缺少依赖项。我不清楚如何实现这种依赖。配方在 S3 中,存储库 URL 是https://s3-us-west-2.amazonaws.com/employer/ec2instance-tagging.zip

当我将配方添加到配置生命周期事件时,机器可以正常联机,但未添加标签。ec2 实例显示“stock”标签;键 "opsworks:instance" 、 "opsworks:layer:foo_layer" 、 "opsworks:stack" 和 "Name" 都有我期望的值。我想通过配方添加的标签(“应用程序”、“团队”、“环境”)不存在。

自定义 JSON 在堆栈级别添加:

{ "aws-tag": {
        "tags": {
            "team": "specialteam",
            "application": "foo",
            "environment": "development"
        }
    }
}

是否有特定于 OpsWorks AWS 的食谱或食谱我应该在启动后调用以在实例上设置标签?我怎么称呼那个食谱?

我已阅读有关使用 OpsWorks 自定义应用程序部署的 AWS 博客文章。我是否缺少相同的“通过厨师在实例上设置 aws 标签”食谱或食谱,它位于 GitHub 上的Amazon Web Services - Labs存储库中?

github 上的aws opsworks-cookbooks说“对于 Chef 12.2 Windows 和 Chef 12 Linux,没有内置的食谱”,但我希望这是错误的 :-) 并且已经添加了我还没有找到的食谱。或者,希望有人已经这样做并在某处记录了它。

我正在按照这篇 AWS 博客文章快速探索 AWS OpsWorks 中的 Chef 环境(再次为 Linux 编写)和这个关于在 Opsworks 上调试 Chef 的 SF 问题进行故障排除


windows-server-2012-r2 chef opsworks
  • 1 1 个回答
  • 420 Views

1 个回答

  • Voted
  1. Best Answer
    StandardEyre
    2016-11-10T13:10:23+08:002016-11-10T13:10:23+08:00

    我能够自己弄清楚其中的一些。通过向 AWS Support 提交案例,我收到了足够多的指示来解决这个问题。

    减速带可以解决

    1. 使用存档文件时针对不同平台的不同食谱目录结构。

      如果您通过存储在 AWS S3 上的存档文件提供配方,AWS 需要一种用于 Linux 的目录结构和另一种不同的 Windows目录结构。

      Linux 可以将多个说明书放在一个根目录中。这是$ berks package默认情况下所做的。

      Windows 不接受该根目录。该$ berks package命令没有以 Windows 接受的方式构建一个包含多个说明书的存档的选项。我不得不手动编辑 tarfile。

    2. Windows 上的红宝石

      'aws' 食谱中可能会出现一个"error: Seahorse::Client::NetworkingError: SSL_connect" 错误。AWS 想要服务之间的 https。这需要一个有效的证书颁发机构捆绑包。Windows 上的 Ruby 无法访问 OS CA 证书包。在以下情况下可以解决此问题:

      a)您安装 aws-sdk gem,然后

      b)在配方中设置路径curl-ca-bundle.crt

    3. 有关依赖项和社区食谱的详细信息。

      Windows 上 Chef 12 的 AWS 文档没有提及 Berksfile 或社区食谱。这些都记录在 AWS for Chef 11 on Linux 上。

    4. 调用更新时指定区域。

      奇怪的是,在实例上运行配方说实例不存在。

      FATAL: Aws::EC2::Errors::InvalidInstanceIDNotFound: aws_resource_tag[i-5ccd24d4] (stemsoft::default line 27) had an error: Aws::EC2::Errors::InvalidInstanceIDNotFound: The instance ID 'i-5ccd24d4' does not exist

      AWS 错误代码显示 InvalidInstanceID.NotFound 可能是由于 a) 不在区域内,或 b) 最近创建的实例的 ID 未通过系统传播。

      修复是包含region stack['region']在aws_resource_tag配方的块中。

    5. 附加到正确角色的正确策略

      确保使用正确的策略设置“aws-opsworks-ec2-role”和“aws-opsworks-service-role”。'aws-opsworks-service-role' 可以保持原样,因此 OpsWorks 服务可以对其他 AWS 服务进行 API 调用。“aws-opsworks-ec2-role”是默认 IAM 实例配置文件,需要 ec2 上的权限才能创建和描述标签。

    程序

    以下步骤的目标是构建一个在 Microsoft Windows Server 2012 上运行 Chef 12 的 OpsWorks 堆栈,其中包含一个(自定义)说明书,其中包含设置自定义标签的配方。在我的示例中,标签从堆栈中设置的自定义 json 获取其信息。

    我还没有找到这样做的现有食谱。我宁愿使用现有的食谱而不是构建自定义食谱。

    在此过程结束时,配方使用厨师社区“aws”食谱 从堆栈设置中定义的自定义 json 中设置的值更新“团队”标签。

    为此,配方通过搜索现有数据包来获取实例详细信息。它还通过搜索第二个现有数据包来获取区域详细信息。

    (它对我有用....)

    1. 在 AWS,构建堆栈
    2. 在 AWS,将自定义 json 分配给堆栈
      • { "aws-tag": { "tags": { "team": "teamFooBar" } } }
    3. 在 AWS,使用自定义存储库配置堆栈。此示例使用 s3
    4. 在 AWS,构建层
      • 简称全小写
      • 安全组 AWS-OpsWorks-Blank-Server
      • 配方/配置“配置生命周期事件”例如,如果您的配方被命名为一次性,那么“配置生命周期事件”应包含onetime::default 配方
    5. 在本地,安装ChefDK(Chef Development Kit)
      • 在本地安装 Git for Windows
      • 我喜欢git-bash.exe
    6. 在本地,使用 Chef 初始化说明书目录 cookbook_dir
      • cd 到 build_root
      • 在 build_root 中制作目录 cookbook_dir
      • 在 build_root 中chef generate cookbook cookbook_dir
        • 例子:$ chef generate cookbook cookbook_dir --berks --copyright 'EMPLOYER' --email '[email protected]'
    7. 在本地,编辑 cookbook_dir\metadata.rb
      • 添加depends 'aws'
    8. 在本地,编辑 cookbook_dir\recipes\default.rb
      • '#{node['aws-tag']['tags']['team']}' 在我的示例中将返回“teamFooBar”
      • 编辑配方以调用正确的 ca-bundle.crt
      • 编辑后,检查配方红宝石语法$ ruby -c /path/to/cookbook_dir/recipes/default.rb
    9. 在本地,一次性设置,初始化 berksfile
      • 在 Git for Windows MinTTY cd 到 cookbook_dir 并用于$ berks install初始化 berksfile 和跟踪依赖项
    10. 在本地,编辑 cookbook_dir Berksfile
      • 添加cookbook 'aws'
    11. 在本地, cd 进入 cookbook_dir 并运行$ berks package以构建 cookbook_dir.tar.gz
    12. 在本地编辑 MS Windows Server 2012 的存档文件
      • 解压 cookbook_dir.tar.gz 。将所有内容移出目录'cookbooks'并上一级。重新打包 cookbook_dir.tar.gz
    13. 将 cookbook_dir.tar.gz 上传到 s3
      • 从 s3 中删除以前的副本
      • 确保权限正确(必要时“公开所有内容”)
    14. 在 AWS,一次性设置,编辑分配给由 OpsWorks 启动的实例的角色,更新标签的权利
      • “aws-opsworks-ec2-role”“声明”:[{“操作”:[“ec2:CreateTags”,“ec2:DescribeTags”],“资源”:[“*”],“效果”:“允许” }]
    15. 让实例运行
      • 添加一个实例
      • 启动一个实例
      • 堆栈>运行命令>更新自定义食谱
    16. 修复适用于 Windows 的 aws-sdk gem 未附带正确的 ca-bundle.crt
      • 安装红宝石
        • 在初始设置中,需要此步骤
        • 在随后的测试运行中,不需要此步骤
      • 安装 aws-sdk
        • 在初始设置中,需要此步骤
        • 在随后的测试运行中,不需要此步骤
    17. 确认有效
      • 检查 ec2 实例是否存在正确的标签
      • 检查 OpsWorks 实例日志(配置命令)
      • 成功范例:INFO: AWS: Updating the following tags for resource i-12345678 (skipping AWS tags): { .... "team"=>"teamFooBar"}

    示例配方

    示例配方 example::default.rb

    Chef::Log.info("********** from custom json, Team  is  '#{node['aws-tag']['tags']['team']}' **********")
    
    instance = search("aws_opsworks_instance", "self:true").first
    Chef::Log.info("Instance id from data bag: #{instance['ec2_instance_id']}" )
    
    stack = search("aws_opsworks_stack").first
    Chef::Log.info("**********  stack['region'] from data bag:  '#{stack['region']}' **********")
    
    include_recipe 'aws'
    chef_gem "aws-sdk" do
        compile_time false
        action :install
        version node[:aws][:aws_sdk_version]
    end
    
    ruby_block "Set the AWS Bundle" do
       block do
          require 'aws-sdk'
          Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt'
       end
       action :run
    end
    
    aws_resource_tag instance['ec2_instance_id'] do
        tags('team' => node['aws-tag']['tags']['team']   )
        region stack['region']
        action :update
        Chef::Log.info("********** updated tags('team') **********")
    end
    

    • 0

相关问题

  • IIS 8.5 不接受应用级别的身份验证设置

  • RRAS NAT 不转发特定 Hyper-V 虚拟机

  • Server 2012 重复数据删除:在 Hyper-V 主机或来宾 VM 上运行?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve