gpt4 book ai didi

chef-infra - 在 Chef Recipe 中动态获取 Elasticache 端点?

转载 作者:行者123 更新时间:2023-12-03 07:37:46 24 4
gpt4 key购买 nike

我创建了一个 CloudFormation 模板来运行我的 Web 应用程序,其中包含一个 Elastic Loadbalancer、三个运行 Tomcat 服务器的 EC2 实例和一个 Elasticache。我在启动时运行了一个 Chef 配方,除其他外,它还配置每个 Tomcat 的 context.xml 文件以指向 Elasticache。

我想知道在配方中配置 Elasticache 的最佳方法是什么,所以我需要做的就是在 CloudFormation 模板中快速更改以调出一堆它们(stack1-elasticache、stack2 -弹性疼痛等)

现在我简单地有一个硬编码的变量替换(对于Chef来说并不理想,因为任何更改都会在每个Chef'd盒子上更新,除非每个都有单独的配方),但我想知道是否有一种方法可以使用AWS CLI 和 Chef 的惰性节点评估执行以下操作:

ruby_block 'Get Elasticache endpoint' do
block do
node.run_state['elasticache'] = `some aws command to get the Elasticache endpoint I want`
end
end

source "context.xml.erb"
variables(lazy{
{
:tomcat_version => elasticache
}
}

令我困惑的是如何从亚马逊获得 Elasticache 名称。我计划做一些与我的示例非常相似的事情,增加每个新 Elasticache 的数量,并且它们的命名方案将与 Tomcat 相对应(stack1-TC1、stack2-TC2 等)。我怎样才能实现这个目标?

最佳答案

您可以检查 AWS ruby​​ SDK gem,它可以在 Cookbook 库或提供程序中使用来获取运行时详细信息。下面是一个链接和一些代码,您可以利用它们。

http://docs.aws.amazon.com/sdkforruby/api/Aws/ElastiCache/Client.html#describe_cache_clusters-instance_method

代码:-

require 'aws-sdk'

def create_aws_interface(aws_interface)
if !new_resource.aws_access_key.to_s.empty? && !new_resource.aws_secret_access_key.to_s.empty?
creds = ::Aws::Credentials.new(new_resource.aws_access_key, new_resource.aws_secret_access_key)
else
Chef::Log.info('use iam profile')
creds = ::Aws::InstanceProfileCredentials.new
end
Aws.config[:ssl_verify_peer] = false
aws_interface.new(credentials: creds, region: new_resource.region)
end

def ec
ec ||= create_aws_interface(::Aws::ElastiCache::Client)
end

# It will return all Elastic cache clusters in object, which needs to be parsed further.
def getClusterID()
resp = ec.describe_cache_clusters({
marker: "String",
show_cache_node_info: true,
})
end

关于chef-infra - 在 Chef Recipe 中动态获取 Elasticache 端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38917255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com