Benachrichtigen Sie Slack of AWS-Rechnungen täglich mit Lambda für Ruby

Als ich die Präzedenzfälle gegoogelt habe, gab es viele Beispiele für Python, also das Mindesteinstellungs-Memo, als ich es von Hand mit [Ruby] doc gemacht habe.

1. Erstellen Sie AWS Lambda mit Runtime Ruby

Erstellen Sie mit einem Klick auf den Lambda-Konsolenbildschirm im Web

2. Schreiben Sie den Erfassungsprozess in Ruby

lambda_functions.rb


require 'aws-sdk'
require 'net/http'
require 'uri'
require 'json'

#Lambda-Einstiegspunkt
def lambda_handler(event:, context:)
  fetch_cost
    .then { |response| pretty_response(response) }
    .then { |message| notify_slack(message) }

  #Rückgabe als HTTP-Antwort
  { statusCode: 200, body: 'ok' }
end

#Rechnungsinformationen abrufen
def fetch_cost(time = Time.now)
  #Ich benötige keine Anmeldeinformationen, da ich mich bereits authentifiziert habe(Siehe unten)
  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

#Formatieren des Rückgabewerts der API
def pretty_response(res)
  #Kürzung. Passend
end

#Post an Slack
def notify_slack(message)
  #eingehender Webhook Legen Sie die festgelegte URL in der Umgebungsvariablen fest
  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

Klicken Sie hier für die vollständige Quelle (Inhalt). Was Sie tun, ist fast dasselbe wie [Develpers.IO-Präzedenzfallerfassungsprozess in Python] [Klassenmethode].

Wenn Sie ändern möchten, was Sie sehen möchten, können Sie [was an Aws :: CostExplorer :: Client # get_cost_and_usage] api_doc übergeben werden soll, oder pretty_response ändern.

3. Legen Sie die Startzeit in CloudWatch-Ereignissen fest

  1. "Trigger hinzufügen" auf dem Lambda-Funktionseinstellungsbildschirm
  2. Wählen Sie "Event Bridge (CloudWatch Events)".
  3. Kann auf die gleiche Weise wie cron eingestellt werden (Referenz: [Platzhalter für AWS_Cron-Ausdrücke] cron)

Ich war süchtig nach IAM-Zertifizierung

Ich wusste nicht, wo ich die IAM-Authentifizierung erhalten soll, wenn ich die Lambda-Funktion ausführe, aber wenn Sie das Juwel aws-sdk verwenden, können Sie dies tun, ohne etwas zu tun. Der Grund ist wie folgt.

Anfangs wusste ich das nicht, daher war es nutzlos, weil ich ein IAM getrennt von der Rolle für die Ausführung erstellt und diesen Zugriffsschlüssel und Pfad verwendet habe.

Referenzierte Webseite

Recommended Posts

Benachrichtigen Sie Slack of AWS-Rechnungen täglich mit Lambda für Ruby
Benachrichtigen Sie Slack regelmäßig über Artikel, die in Qiita mit AWS Lambda + DynamoDB + CloudWatch vorrätig sind
Holen Sie sich die S3-Objektgröße mit AWS SDK for Ruby
Erstellen Sie AWS Lambda mit Quarkus
Versuchen Sie, SlackBot mit Ruby x Sinatra auf AWS Lambda auszuführen
Erstellen Sie ein periodisches Programm mit Ruby x AWS Lambda x CloudWatch-Ereignissen
Lernen Sie AWS kostenlos mit LocalStack
Eindrücke von Black Jack-Cli mit Ruby
Holen Sie sich eine Liste der S3-Dateien mit ListObjectsV2Request (AWS SDK für Java)
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Erste Schritte mit Ruby für Java-Ingenieure
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
Erklärung von Ruby auf Schienen für Anfänger ①
Der Name ist und das Alter ist Senden Sie eine Benachrichtigung an Slack mit der Java-freien Version von Sentry (mit Lambda)