Quand j'ai cherché sur Google les cas précédents, il y avait beaucoup d'exemples de Python, donc le mémo de réglage minimum quand je l'ai fait à la main avec [Ruby] doc.
Créer avec un clic de bouton depuis l'écran de la console Lambda sur le Web
--Runtime avec Ruby 2.7
ce: GetCostAndUsage
au rôle d'exécutionlambda_functions.rb
require 'aws-sdk'
require 'net/http'
require 'uri'
require 'json'
#Point d'entrée Lambda
def lambda_handler(event:, context:)
fetch_cost
.then { |response| pretty_response(response) }
.then { |message| notify_slack(message) }
#Renvoyer comme réponse HTTP
{ statusCode: 200, body: 'ok' }
end
#Obtenir des informations de facturation
def fetch_cost(time = Time.now)
#Je n'ai pas besoin d'informations d'identification car je me suis déjà authentifié(Voir ci-dessous)
client = Aws::CostExplorer::Client.new(region: 'us-east-1')
client.get_cost_and_usage(
time_period: {
start: Time.local(time.year, time.month, 1).strftime('%F'),
end: time.strftime('%F'),
},
granularity: 'MONTHLY',
metrics: ['AmortizedCost'],
group_by: [ { type: "DIMENSION",key: 'SERVICE' }]
)
end
#Formater la valeur de retour de l'API
def pretty_response(res)
#réduction. De manière appropriée
end
#Publier sur Slack
def notify_slack(message)
#Webhook entrant Définissez l'URL définie dans la variable d'environnement
uri = URI.parse(ENV['SLACK'])
params = { text: message }
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
res = http.start do
request = Net::HTTP::Post.new(uri.path)
request.set_form_data(payload: params.to_json)
http.request(request)
end
unless res.is_a? Net::HTTPSuccess
raise 'Failed POST Slack'
end
res
end
Cliquez ici pour la source complète (gist). Ce que vous faites est presque la même chose que [processus d'acquisition de cas précédents Develpers.IO en Python] [méthode de classe].
Si vous voulez changer ce que vous voulez voir, vous pouvez changer [ce que vous passez à ʻAws :: CostExplorer :: Client # get_cost_and_usage] [api_doc] ou changer
pretty_response`.
Je ne savais pas où obtenir l'authentification IAM lors de l'exécution de la fonction Lambda, mais si vous utilisez le gem aws-sdk, vous pouvez le faire sans rien faire. La raison en est la suivante.
) sont définies sur ʻAWS_ACCESS_KEY_ID
et ʻAWS_SECRET_ACCESS_KEY`] ENV.Au début, je ne le savais pas, donc c'était inutile car j'ai créé un IAM séparément du rôle d'exécution et utilisé cette clé d'accès et ce chemin.
?
.