Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie kann ich die Anzahl der pro Monat aufgezeichneten CIs verwenden, um die AWS-Config-Abrechnung nachzuvollziehen?
Ich möchte die Anzahl der Konfigurationselemente (CIs) abrufen, die AWS Config aufgezeichnet hat. Dann möchte ich diese Informationen verwenden, um meine AWS-Config-Abrechnung nachzuvollziehen.
Lösung
Verwende Amazon Athena, um die Anzahl der CIs pro Monat für dein Konto zu ermitteln, damit du frühere und aktuelle Abrechnungstrends leichter erkennen kannst.
Überprüfen, ob dein Amazon S3-Bucket Konfigurationsdateien enthält
Der AWS-Config-Service muss die Konfigurationsverlaufsdateien erfolgreich an den angegebenen Amazon Simple Storage Service (Amazon S3)-Bucket übermitteln. AWS Config übermittelt CIs alle 6 Stunden als Konfigurationsverlaufsdateien an den Bucket. Weitere Informationen findest du unter Compliance-Verlauf für deine AWS-Ressourcen mit AWS Config anzeigen.
Führe die folgenden Schritte aus:
- Öffne die AWS Config-Konsole.
- Wähle im Navigationsbereich Einstellungen aus.
- Notiere dir im Abschnitt Amazon-S3-Bucket den Bucket-Namen.
- Öffne dieAmazon-S3-Konsole.
- Wähle im Navigationsbereich Buckets und dann deinen S3-Bucket aus.
- Überprüfe den S3-Bucket auf Konfigurationsdateien.
Hinweis: Wenn es keine Konfigurationsdateien gibt, fehlen deiner Rolle möglicherweise Berechtigungen. Weitere Informationen findest du unter AWS Identity and Access Management (IAM) für Amazon S3.
Eine Tabelle in Athena erstellen
Öffne die Athena-Konsole. Erstelle dann eine Tabelle mit der Syntax für deine Umgebung.
Wichtig: Ersetze in der folgenden Tabellensyntax LOCATION durch den Standort und die AWS-Region für die im S3-Bucket gespeicherten AWS-Config-Elemente. Verwende für BUCKET-NAME, ACCOUNT-ID, REGION und ORG-ID deine spezifischen Informationen.
Für die standardmäßige Implementierung von AWS Config
Verwende die folgende Tabellensyntax:
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/';
Für Athena-Engine Version 2
Wenn du Athena-Engine Version 2 verwendest, beträgt die maximale Zeilenlänge für Textdateien 100 MB. Wenn du über viele Ressourcen verfügst, überschreiten AWS-Config-Elemente, die im angegebenen S3-Bucket gespeichert sind, möglicherweise diesen Grenzwert. Beispielsweise liefert AWS Config auch Konfigurations-Snapshot-Dateien in derselben Bucket-LOCATION, und die Konfigurations-Snapshot-Datei könnte diesen Grenzwert überschreiten. Wenn du den Grenzwert überschreitest, erhältst du bei der Abfrage des AWS-Config-Elements eine Fehlermeldung, die der folgenden ähnelt:
„HIVE_BAD_DATA: Line too long in text file: <s3_path_to_config_data_object>“
Verwende in diesem Fall die folgende Tabellensyntax, um Athena zu veranlassen, direkt den Amazon-S3-Pfad abzufragen, in dem die Konfigurationsverlaufsdateien gespeichert sind:
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) PARTITIONED BY (`year` string,`month` string,`day` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.year.interval'='1', 'projection.year.range'='2021,2121', 'projection.year.type'='integer', 'projection.month.interval'='1', 'projection.month.range'='1,12', 'projection.month.type'='integer', 'projection.day.interval'='1', 'projection.day.range'='1,31', 'projection.day.type'='integer', 'storage.location.template'='s3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/${year}/${month}/${day}/ConfigHistory/')
Hinweis: Die folgende Beispieltabelle partitioniert die Athena-Tabelle mit einer Partitionsprojektion von /2021/1/1/ bis /2121/12/31/. Aktualisiere diese Partitionen entsprechend deinen Anforderungen. Das Datumsformat des Amazon-S3-Pfads für AWS-Config-Daten ist nicht mit dem Datumsformat der Athena-Partitionsprojektionen kompatibel.
Für AWS-Control-Tower-Umgebungen
Wenn du AWS Control Tower verwendest, verwende zur Anpassung an die Kontostruktur die folgende Tabellensyntax, um die Athena-Tabelle zu erstellen:
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) PARTITIONED BY (account string,region string,year string,month string,day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://BUCKET-NAME/ ORG-ID/AWSLogs/' -- Bucket name and org should be updated TBLPROPERTIES ( 'projection.enabled'='true', 'projection.account.type'='enum', 'projection.account.values'='<account-id1, accountid2>', -- Enter all account ids 'projection.region.type'='enum', 'projection.region.values'='<region-1,region-2,region-3>', -- Enter all regions 'projection.year.interval'='1', 'projection.year.range'='2021,2121', 'projection.year.type'='integer', 'projection.month.interval'='1', 'projection.month.range'='1,12', 'projection.month.type'='integer', 'projection.day.interval'='1', 'projection.day.range'='1,31', 'projection.day.type'='integer', 'storage.location.template'='s3://BUCKET-NAME/ORG-ID/AWSLogs/${account}/Config/${region}/${year}/${month}/${day}/ConfigHistory/') -- Bucket name and org should be updated
Beispiel für Athena-Abfragen
Die folgende Beispielabfrage ruft die Anzahl der Änderungen pro Ressource im Februar 2021 ab, sortiert nach den am häufigsten vorgenommenen Änderungen:
SELECT configurationItem.resourceType, configurationItem.resourceId, COUNT(configurationItem.resourceId) AS NumberOfChanges FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%' GROUP BY configurationItem.resourceType, configurationItem.resourceId ORDER BY NumberOfChanges DESC
Wenn du bestimmte Ressourcentypen aus dem AWS-Config-Recorder ausschließt, zeichnet der Recorder dennoch die Erstellung und Löschung dieser Ressourcen auf. Diese Aufzeichnungen werden gebührenfrei gemacht. Diese Ressourcen-CIs enthalten die folgenden Status für das Feld configurationItemStatus:
- ResourceNotRecorded
- ResourceDeletedNotRecorded
Die Aufzeichnungen enthalten auch grundlegende Metadaten wie Ressourcen-ID, ARN und CI, jedoch keine Informationen zur Ressourcenkonfiguration und zu den Beziehungen.
Hinweis: Diese Abfrage zählt immer noch die ResourceNotRecorded-Informationen. Führe die folgende Abfrage aus, um diese Informationen auszuschließen:
SELECT configurationItem.resourceType, configurationItem.resourceId, COUNT(configurationItem.resourceId) AS NumberOfChanges FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND configurationItem.configurationItemCaptureTime >= '2021-02-08T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%' AND configurationItem.configurationItemStatus NOT IN ('ResourceNotRecorded','ResourceDeletedNotRecorded') GROUP BY configurationItem.resourceType ORDER BY NumberOfChanges DESC
Die Ergebnisse ähneln dem folgenden Beispiel:
resourcetype resourceid NumberOfChanges AWS::EC2::VPC vpc-9ed00bfa 7 AWS::EC2::Subnet subnet-4472e248 5 AWS::EC2::SecurityGroup sg-450c6531 4
Die folgende Beispielabfrage ruft die Anzahl der Konfigurationselemente pro Tag im Februar 2021 ab:
SELECT result.configurationitemcapturetime, count(result.configurationitemcapturetime) AS NumberOfChanges FROM (SELECT regexp_replace(configurationItem.configurationItemCaptureTime, '(.+)(T.+)', '$1') AS configurationitemcapturetime FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result GROUP BY result.configurationitemcapturetime ORDER BY result.configurationitemcapturetime
Hinweis: Um nicht aufgezeichnete Ressourcen herauszufiltern, kannst du vor der Option GROUP BY die folgende zusätzliche Klausel hinzufügen:
„AND configurationItem.configurationItemStatus NOT IN ('ResourceNotRecorded','ResourceDeletedNotRecorded')“
Die Ergebnisse ähneln dem folgenden Beispiel:
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
Hinweis: Beim Vergleich der Zahl der CIs zwischen Athena-Abfrageergebnissen und AWS-Abrechnungsdaten für denselben Monat und dieselbe Region kann eine Diskrepanz auftreten. Die Daten, die von Athena abgefragt werden, können Tagesgrenzen überschreiten und CIs enthalten, die in den Folgemonaten fakturiert wurden. AWS-Config-CIs werden auf der Grundlage des Zeitpunkts gemessen, zu dem du configurationItemCaptureTime initiiert hast.
Es hat sich bewährt, den angegebenen Endtag um einen Tag nach Monatsende zu erhöhen.
Beispielsweise kannst du die ursprüngliche Abfrage in die folgende aktualisierte Abfrage ändern.
Ursprüngliche Abfrage:
AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
Aktualisierte Abfrage:
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
Hinweis: Der letzte Tag des Monats wird um einen Tag erhöht.
Ähnliche Informationen
- Themen
- Management & Governance
- Tags
- AWS Config
- Sprache
- Deutsch
Ähnliche Videos

