ã¯ããã« ããã«ã¡ã¯ãWEARããã¯ãšã³ãéšSREãããã¯ã® æ¥æ¥ ã§ããæ®æ®µã¯ WEAR ãšãããµãŒãã¹ã®SREãšããŠéçºã»éçšã«æºãã£ãŠããŸããæ¬èšäºã§ã¯ãçŽ60ïŒ
ã®ã³ã¹ãåæžã«æåãã NATã²ãŒããŠã§ã€ ã®éä¿¡å
容ã®èª¿æ»æ¹æ³ãšéä¿¡éã®åæžæ¹æ³ã«ã€ããŠã玹ä»ããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ èæ¯ ã³ã¹ãã®ææ¡ NATã²ãŒããŠã§ã€ã®éä¿¡å
å®¹ã®ææ¡ CloudWatchã¡ããªã¯ã¹ã§ã®ç¢ºèª VPCãããŒãã°ã§ã®ç¢ºèª ãªãŸã«ããŒã§ã®ã¯ãšãªãã°ã§ã®ç¢ºèª 調æ»çµæãããšã«NATã²ãŒããŠã§ã€çµç±ã§ã®éä¿¡éãåæžãã AWSãµãŒãã¹ãšã®éä¿¡ Datadogãšã®éä¿¡ WEARã®APIãšã®éä¿¡ ECRãããªãã¯ãªããžããªãšã®éä¿¡ çµæ ãŸãšã èæ¯ ZOZOã§ã¯ãã广çãªæé·ãç®æããŠã³ã¹ãã®æé©åãé²ããŠããŸããã³ã¹ãã®å¢å€§ã¯ãµãŒãã¹ã®æ¡å€§ãéåãããåå ãšãªããããåžžã«æé©ãªç¶æ
ã«ä¿ã€ããšãå¿
èŠã§ããWEARã§ãäžèŠãªã³ã¹ããå¯èœãªéãåæžã驿£åãã¹ããã³ã¹ãææ¡ãšå¯Ÿå¿ãç¶ããŠããŸãã ã³ã¹ãã®ææ¡ ãŸãã¯ã³ã¹ããææ¡ããŸããAWSã®ã³ã¹ã㯠AWS Cost ExplorerïŒä»¥äžãCost ExplorerïŒ ã§ç¢ºèªã§ããŸããWEARã§ã¯ãElastic Container Service for KubernetesããS3ããCloudFrontãã«æ¬¡ãã§ãEC2ãã®ä»ãã«æéãããã£ãŠããŸããããEC2ãã®ä»ãã®æéããããŸã§é«ãããšã¯æ³å®å€ã ã£ãããããEC2ãã®ä»ãã®å
èš³ã確èªããŸãããã£ã«ã¿ãŒã®ãµãŒãã¹ããEC2 - Otherããã°ã«ãŒãåã®æ¡ä»¶ã®ãã£ã¡ã³ã·ã§ã³ããAPIãªãã¬ãŒã·ã§ã³ããšããããšã§ãAPIåäœã§æéã確èªã§ããŸããçµæã¯ä»¥äžã®ã°ã©ãã®éãã§ã 1 ã å
èš³ã確èªãããšãã³ã¹ãã®3åã®2ã»ã©ãNATã²ãŒããŠã§ã€ã®ã³ã¹ãã§ãããããã«è©³çްã«å
容ã確èªããŸããå
ã»ã©ãŸã§ã®ã¬ããŒããã©ã¡ãŒã¿ãè§£é€ãããã£ã«ã¿ãŒã®ãAPIãªãã¬ãŒã·ã§ã³ãããNatGatewayããã°ã«ãŒãåã®æ¡ä»¶ã®ãã£ã¡ã³ã·ã§ã³ãã䜿çšã¿ã€ããã«ããŸãã NATã²ãŒããŠã§ã€ã®æéã«é¢ããããã¥ã¡ã³ã ã確èªãããšããNATã²ãŒããŠã§ã€ãããã®æéïŒUSD/æïŒããšãåŠçããŒã¿1GBãããã®æé (USD)ãã§æ§æãããŠããŸããã°ã©ããèŠããšãNATã²ãŒããŠã§ã€ã®èµ·åæéã«ããæéããããNATã²ãŒããŠã§ã€ã®ããŒã¿åŠçã«é¢ããæéãå§åçã«é«ãããšãããããŸããã€ãŸããNATã²ãŒããŠã§ã€ãçµç±ããŠå€§éã®éä¿¡ãè¡ãããŠãããšããããšãèªã¿åããŸãã æ¬¡ç« ã§ã¯ãNATã²ãŒããŠã§ã€ãçµç±ããéä¿¡ã詳ãã調æ»ããŸãã NATã²ãŒããŠã§ã€ã®éä¿¡å
å®¹ã®ææ¡ CloudWatchã¡ããªã¯ã¹ã§ã®ç¢ºèª ãŸã㯠Amazon CloudWatchïŒä»¥äžãCloudWatchïŒ ã§NATã²ãŒããŠã§ã€ã® CloudWatchã¡ããªã¯ã¹ ã確èªããŸããã¡ããªã¯ã¹ã®è©³çŽ°ã¯ å
¬åŒããã¥ã¡ã³ã ã«èšèŒããããŸãã WEARã§ã¯ã BytesOutToDestination ã BytesInFromDestination ã®2åã»ã©ã®éã§ãããããã¯ãNATã²ãŒããŠã§ã€ãçµç±ããå€åãã®éä¿¡éããNATã²ãŒããŠã§ã€ãçµç±ããå
åãã®éä¿¡éã®2åããããšã瀺ããŸãã VPCãããŒãã°ã§ã®ç¢ºèª 次ã«ã VPCãããŒãã° ãçšããŠããã詳现ãªéä¿¡å
容ã確èªããŸããVPCãããŒãã°ã«ã¯VPCå
éšã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹éã®éä¿¡å
容ãèšé²ãããŠããŸãã Amazon S3ïŒä»¥äžãS3ïŒ ãã±ããã«åºåãããVPCãããŒãã°ã Amazon AthenaïŒä»¥äžãAthenaïŒ ã§ã¯ãšãªããŠéä¿¡å
容ã確èªããŸã 2 ã VPCãããŒãã°ã®AthenaããŒãã«ã¯ä»¥äžã®å
容ã§äœæããããšãåæã«èª¬æããŸãã VPCãããŒãã°ããŒãã«äœæã¯ãšãª CREATE EXTERNAL TABLE `vpc_flow_logs_table`( `version` int COMMENT '' , `account_id` string COMMENT '' , `interface_id` string COMMENT '' , `srcaddr` string COMMENT '' , `dstaddr` string COMMENT '' , `srcport` int COMMENT '' , `dstport` int COMMENT '' , `protocol` bigint COMMENT '' , `packets` bigint COMMENT '' , `bytes` bigint COMMENT '' , ` start ` bigint COMMENT '' , ` end ` bigint COMMENT '' , `action` string COMMENT '' , `log_status` string COMMENT '' , `vpc_id` string COMMENT '' , `subnet_id` string COMMENT '' , `instance_id` string COMMENT '' , `tcp_flags` int COMMENT '' , ` type ` string COMMENT '' , `pkt_srcaddr` string COMMENT '' , `pkt_dstaddr` string COMMENT '' , `region` string COMMENT '' , `az_id` string COMMENT '' , `sublocation_type` string COMMENT '' , `sublocation_id` string COMMENT '' , `pkt_src_aws_service` string COMMENT '' , `pkt_dst_aws_service` string COMMENT '' , `flow_direction` string COMMENT '' , `traffic_path` int COMMENT '' ) PARTITIONED BY ( `logdate` string COMMENT '' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT ' org.apache.hadoop.mapred.TextInputFormat ' OUTPUTFORMAT ' org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat ' LOCATION ' $LOCATION_OF_LOGS ' TBLPROPERTIES ( ' projection.enabled ' = ' true ' , ' projection.logdate.format ' = ' yyyy/MM/dd/HH ' , ' projection.logdate.interval ' = ' 1 ' , ' projection.logdate.interval.unit ' = ' HOURS ' , ' projection.logdate.range ' = ' 2022/01/01/00,NOW ' , ' projection.logdate.type ' = ' date ' , ' skip.header.line.count ' = ' 1 ' , ' storage.location.template ' = ' $LOCATION_OF_LOGS/${logdate} ' , ' typeOfData ' = ' file ' ) $LOCATION_OF_LOGS ã¯VPCãããŒãã°ã®åºåå
S3ãã¹ã«èªã¿æ¿ããŠãã ããã WEARã§ã¯AthenaããŒãã«ã®äœæã Terraform ã® aws_glue_catalog_table ã§è¡ã£ãŠããŸããäžèšã®ã¯ãšãªã¯ aws_glue_catalog_table ããäœæãããããŒãã«ã SHOW CREATE TABLE ã§åºåããã¯ãšãªã®ãããå
¬åŒããã¥ã¡ã³ããšã¯è¡šçŸãäžéšç°ãªã£ãŠããŸãã æ¬¡ã®ãããªã¯ãšãª 3 ã§VPCå
éšããNATã²ãŒããŠã§ã€ãçµç±ããå€åãã®éä¿¡ã確èªããŸããSQLå
ã«ã³ã¡ã³ãããŠããç®æã¯é©å®èªåã®ç°å¢ã«èªã¿æ¿ããŠãã ããã SELECT pkt_dst_aws_service, SUM (bytes) AS bytesTransferred FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 調æ»å¯Ÿè±¡ã®æ¥ä»(UTC) GROUP BY pkt_dst_aws_service ORDER BY bytesTransferred DESC ãã®ã¯ãšãªã§ã¯ãç¹å®ã®æ¥ä»ã§VPCå
éšããNATã²ãŒããŠã§ã€çµç±ã§éä¿¡ãããã©ãã£ãã¯éãAWSãµãŒãã¹ 4 ããšã«ç¢ºèªããŠããŸãããã®äŸã§ã¯1æ¥ã§èª¿æ»ããŠããŸãããAthenaã¯ã¹ãã£ã³ããããŒã¿éã«æéãæ¯äŸããŸã 5 ããµãŒãã¹ã®èŠæš¡ã«ãã£ãŠã¯ãŸãæéåäœã§ã¯ãšãªããã¹ãã£ã³éã蚱容ã§ããããšã確èªããŠãã ããã çµæã®äŸã以äžã®è¡šã«èšèŒããŸãã pkt_dst_aws_service ã - ã§ããç®æã¯AWSã管çããŠããªãIPã«åããéä¿¡ã§ããè¡šã®æ°å€ã¯WEARã®å®éã®å€ã§ã¯ãªããããŒããŒã¿ã§ããä»åŸåºãŠããAthenaã®ã¯ãšãªçµæã¯ãã¹ãŠå®éã®å€ã§ã¯ãªãããããŒããŒã¿ãèšèŒããŸãã pkt_dst_aws_service bytesTransferred AMAZON 106000 EC2 4500 - 2000 DYNAMODB 1000 CLOUDFRONT 3 GLOBALACCELERATOR 1 ç¶ããŠãNATã²ãŒããŠã§ã€ãçµç±ããŠVPCå
éšã§åä¿¡ãããã©ãã£ãã¯ã確èªããŸãã SELECT pkt_src_aws_service, SUM (bytes) AS bytesTransferred FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr NOT LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 調æ»å¯Ÿè±¡ã®æ¥ä»(UTC) GROUP BY pkt_src_aws_service ORDER BY bytesTransferred DESC pkt_src_aws_service bytesTransferred EC2 21000 AMAZON 6000 - 5000 CLOUDFRONT 1500 DYNAMODB 1000 GLOBALACCELERATOR 1 ãã®æç¹ã§ Amazon DynamoDBïŒä»¥äžãDynamoDBïŒ ã® ã²ãŒããŠã§ã€ãšã³ããã€ã³ã ãäžè¶³ããŠãããNATã²ãŒããŠã§ã€ãçµç±ããŠéä¿¡ããŠããŸã£ãŠããããšãèªã¿åããŸãã Datadog ã®ããã«ã IPã¢ãã¬ã¹ç¯å²ãå
¬é ããŠãããµãŒãã¹ãå©çšããŠããå ŽåãVPCãããŒãã°ã® pkt_dstaddr ïŒéä¿¡å
IPã¢ãã¬ã¹ïŒã ãã§ææ¡ãå¯èœã§ã 6 ãããããVPCãããŒãã°ã®ã¿ã§ã¯ AMAZON ã®å
èš³ãªã©ãå
·äœçã«ã©ã®ãšã³ããã€ã³ãã«åããŠéä¿¡ããŠããããããããŸãããããããææ¡ãããããVPCå
éšã®åå解決ã®éã®ã¯ãšãªãã°ã掻çšããŠãã詳现ã«èª¿æ»ããŸãã ãªãŸã«ããŒã§ã®ã¯ãšãªãã°ã§ã®ç¢ºèª ãªãŸã«ããŒã§ã®ã¯ãšãªã®ãã°èšé² ãèšå®ãããšãVPCå
éšã§è¡ãããåå解決ã®ã¯ãšãªãã°ãS3ã«ä¿åã§ããŸããVPCãããŒãã°ã§ç¢ºèªã§ããéä¿¡å
ã®IPã¢ãã¬ã¹ãšã¯ãšãªãã°ã®åå解決ã®çµæãçªãåãããããšã§ãNATã²ãŒããŠã§ã€ãçµç±ããŠè¡ãããéä¿¡å
ã®ãã¡ã€ã³ãææ¡ã§ããŸãã ããã¥ã¡ã³ã ã«åŸã£ãŠã¯ãšãªãã°ã®AthenaããŒãã«ãäœæããŸãã ãªãŸã«ããŒã®ã¯ãšãªãã°ã®AthenaããŒãã«ã¯ä»¥äžã®å
容ã§äœæããããšãåæã«èª¬æããŸãã ãªãŸã«ããŒã®ã¯ãšãªãã°ããŒãã«äœæã¯ãšãª CREATE EXTERNAL TABLE `vpc_dns_query_logs_table`( `version` string COMMENT '' , `account_id` string COMMENT '' , `region` string COMMENT '' , `vpc_id` string COMMENT '' , `query_timestamp` string COMMENT '' , `query_name` string COMMENT '' , `query_type` string COMMENT '' , `query_class` string COMMENT '' , `rcode` string COMMENT '' , `answers` array<struct<rdata:string, type :string,class:string>> COMMENT '' , `srcaddr` string COMMENT '' , `srcport` int COMMENT '' , `transport` string COMMENT '' , `srcids` struct<instance:string,resolver_endpoint:string> COMMENT '' , `firewall_rule_action` string COMMENT '' , `firewall_rule_group_id` string COMMENT '' , `firewall_domain_list_id` string COMMENT '' ) PARTITIONED BY ( `logdate` string COMMENT '' ) ROW FORMAT SERDE ' org.openx.data.jsonserde.JsonSerDe ' STORED AS INPUTFORMAT ' org.apache.hadoop.mapred.TextInputFormat ' OUTPUTFORMAT ' org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat ' LOCATION ' $LOCATION_OF_LOGS ' TBLPROPERTIES ( ' projection.enabled ' = ' true ' , ' projection.logdate.format ' = ' yyyy/MM/dd ' , ' projection.logdate.interval ' = ' 1 ' , ' projection.logdate.interval.unit ' = ' DAYS ' , ' projection.logdate.range ' = ' 2022/01/01,NOW ' , ' projection.logdate.type ' = ' date ' , ' storage.location.template ' = ' $LOCATION_OF_LOGS/$VPC_ID/${logdate} ' , ' typeOfData ' = ' file ' ) $LOCATION_OF_LOGS ã¯ãªãŸã«ãã®ã¯ãšãªãã°ã®åºåå
S3ãã¹ã $VPC_ID ã¯ãã°ãèšé²ããŠããVPCã®IDã«èªã¿æ¿ããŠãã ããã VPCãããŒãã°ããŒãã«ãšåæ§ã«AthenaããŒãã«ã®äœæãTerraformã§è¡ã£ãŠãããäžèšã¯ SHOW CREATE TABLE ã§åºåããã¯ãšãªã§ãããã®ãããå
¬åŒããã¥ã¡ã³ããšã¯è¡šçŸãäžéšç°ãªã£ãŠããŸãã æ¬¡ã®ãããªã¯ãšãªã§VPCãããŒãã°ãšãªãŸã«ããŒã®ã¯ãšãªãã°ãçªãåãããŸãã SELECT R.query_name, SUM (F.bytesTransferred) AS bytes_day, ROUND ( SUM (F.bytesTransferred) * 30.0 / ( 1000 * 1000 * 1000 ), 2 ) AS GB_months FROM ( SELECT pkt_dstaddr, SUM (bytes) AS bytesTransferred FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 調æ»å¯Ÿè±¡ã®æ¥ä»(UTC) AND pkt_dst_aws_service = ' AMAZON ' GROUP BY pkt_dstaddr ) F LEFT JOIN ( SELECT DISTINCT query_name, answer.rdata FROM " vpc_dns_query_logs_database " . " vpc_dns_query_logs_table " -- ãªãŸã«ããŒã®ã¯ãšãªãã°ããŒãã«ãååšããããŒã¿ããŒã¹.ãªãŸã«ããŒã®ã¯ãšãªãã°ããŒãã« CROSS JOIN UNNEST(answers) as st(answer) WHERE answer. type = ' A ' AND logdate = ' YYYY/MM/dd ' -- 調æ»å¯Ÿè±¡ã®æ¥ä»(UTC) ) R ON F.pkt_dstaddr = R.rdata GROUP BY R.query_name ORDER BY bytes_day DESC ãã®ã¯ãšãªã§ã¯ã倧ããåããŠ3ã€ã®ããšãè¡ã£ãŠããŸãã VPCãããŒãã°ããŒãã«ããNATã²ãŒããŠã§ã€ãçµç±ãããã©ãã£ãã¯ã®éä¿¡å
IPã¢ãã¬ã¹ãååŸïŒã¯ãšãªã® F éšåïŒ ãªãŸã«ããŒã®ã¯ãšãªãã°ããŒãã«ãããã¡ã€ã³ãšIPã¢ãã¬ã¹ã®å¯Ÿå¿è¡šãäœæïŒã¯ãšãªã® R éšåïŒ 1ãš2ãIPã¢ãã¬ã¹ã§çµåããéä¿¡å
ãã¡ã€ã³ããšã®ãã©ãã£ãã¯éãååŸ ã¯ãšãªã®çµæã確èªãããšã firehose.ap-northeast-1.amazonaws.com. ãš sqs.ap-northeast-1.amazonaws.com. ã«å¯Ÿãããã©ãã£ãã¯éãå€ãããšã確èªã§ããŸãããWEARã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã°ã aws-for-fluent-bit ãçšã㊠Amazon Data FirehoseïŒä»¥äžãFirehoseïŒ ã«éä¿¡ããŠããŸãããã®ãµãŒãã¹ã«å¯Ÿããéä¿¡ãã»ãšãã©ã§ããã ã€ã³ã¿ãŒãã§ã€ã¹VPCãšã³ããã€ã³ã ãäžè¶³ããŠããããšã«æ°ä»ããŸããã Amazon Simple Queue ServiceïŒä»¥äžãSQSïŒ ãåæ§ã«ãVPCãšã³ããã€ã³ããäžè¶³ããŠããããšã倿ããŸããã ä»ã®ç®æã«ã€ããŠãåæ§ã«èª¿æ»ãã¹ãã pkt_dst_aws_service = 'EC2' ãªã©ã«å€æŽããªãããã©ãã£ãã¯éã確èªããŠãããŸã 7 ã ãã®çµæã以äžã®ãã¡ã€ã³ã«å¯ŸããŠã®éä¿¡éãå€ãããšã確èªã§ããŸããã d5l0dvt14r5h8.cloudfront.net. ã«èŠèŠãã¯ãããŸããã§ããããAWSãµããŒãã«ç¢ºèªãããšããã Amazon ECR ãããªãã¯ãªããžããªïŒä»¥äžãECRãããªãã¯ãªããžããªïŒ ã§ããããšã倿ããŸããïŒ2024幎7æçŸåšïŒã *.datadoghq.com WEARã®API d5l0dvt14r5h8.cloudfront.net. ããã§éä¿¡å
容ã倿ããŸãããNATã²ãŒããŠã§ã€çµç±ã§å€§éã«éä¿¡ããŠãããåæžå¹æãèŠèŸŒããããªå®å
ã¯ä»¥äžã®éãã§ãã AWSãµãŒãã¹ Datadog WEARã®API ECRãããªãã¯ãªããžããª æ¬¡ç« ããã¯ãã®çµæãå
ã«ãå¯èœãªéãNATã²ãŒããŠã§ã€ãçµç±ããã«æžãããã«å¯Ÿå¿ããŸãã 調æ»çµæãããšã«NATã²ãŒããŠã§ã€çµç±ã§ã®éä¿¡éãåæžãã AWSãµãŒãã¹ãšã®éä¿¡ AWSãµãŒãã¹ãNATã²ãŒããŠã§ã€çµç±ã§éä¿¡ãããªãããã«ã¯ãVPCãšã³ããã€ã³ããå¿
èŠã§ãããã ããéä¿¡ãããã¹ãŠã®AWSãµãŒãã¹ã«å¯ŸããŠVPCãšã³ããã€ã³ããçšæããã°ãããšã¯éããŸãããVPCãšã³ããã€ã³ãã«ãèµ·åæéã«ããæéãšãããŒã¿åŠçã«ããæéãçºçããããã§ãã ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ãã®æé ã確èªãã NATã²ãŒããŠã§ã€ã§éä¿¡ããå Žåã®æé ãšã®æçåå²ç¹ã確èªããŸãã NATã²ãŒããŠã§ã€ã¯ãã§ã«ååšããå€éšãžã®éä¿¡ã«å©çšããŠããŸããNATã²ãŒããŠã§ã€ã¯åé€ã§ããªããããNATã²ãŒããŠã§ã€ã®èµ·åæéã«é¢ããã³ã¹ãã¯èæ
®ããªãããšã«ããŸãããŸããã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ãã¯AZããšã«èµ·åæéã®æéãããããŸããWEARã§ã¯3AZãå©çšããŠããããã3ã€ãšããŠèšç®ããŸãã ap-northeast-1 ãªãŒãžã§ã³ã®æéã¯ä»¥äžã®ããã«ãªã£ãŠããŸãïŒ2024幎7æçŸåšïŒã NATã²ãŒããŠã§ã€ã®æé衚 NAT ã²ãŒããŠã§ã€ãããã®æé (USD/æ) åŠçããŒã¿ 1 GB ãããã®æé (USD) USD 0.062 USD 0.062 ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ãã®æé衚 å AZ ã® VPC ãšã³ããã€ã³ã 1 ã€ãããã®æé (USD/æé) USD 0.014 AWS ãªãŒãžã§ã³ã§ 1 ãæã«åŠçãããããŒã¿ åŠçããŒã¿ 1 GB ãããã®æé (USD) æåã® 1 PB 0.01 USD 次㮠4 PB 0.006 USD 5 PB以äžã®ãã® 0.004 USD 1ãæãããã®éä¿¡éïŒGBïŒã ãšãã以äžã®åŒãæºãã ãèšç®ããŸããVPCãšã³ããã€ã³ãã®èµ·åæé㯠24æé*30æ¥*3AZ ã§èšç®ããŠããŸãããŸããèª¿æ»æã«æŠç®ããçµæã1ã¶æã«1PB以äžã¯äœ¿ã£ãŠããªããããæåã®1PBã®æéã§èšç®ããŸãã ãããš ãšãªããããæã«581GB以äžéä¿¡ããã®ã§ããã°NATã²ãŒããŠã§ã€çµç±ãããVPCãšã³ããã€ã³ãçµç±ã®æ¹ãå®ããšããããšãå°ããŸãã ãã®ãããWEARã§ã¯FirehoseãšSQSã®ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ãã远å ã§äœæããããšã«ããŸãããã²ãŒããŠã§ã€ã¿ã€ãã®VPCãšã³ããã€ã³ãã®å Žåã¯è¿œå æéãªãã§å©çšã§ãã 8 ãããDynamoDBã®VPCãšã³ããã€ã³ããäœæããŸãã Datadogãšã®éä¿¡ Datadog㯠AWS PrivateLinkïŒä»¥äžãPrivateLinkïŒ ãçµç±ããŠéä¿¡ããæ¹æ³ãæäŸããŠããŸã 9 ããã ãã調æ»ã®éçšã§WEARã§ã¯ãã®æ¹æ³ã¯æå¿µããŸããã Datadogã«ã¯ ãµã€ã ãšããæŠå¿µããããŸããåãµã€ãã¯å®å
šã«ç¬ç«ããŠããããµã€ãéã§ããŒã¿ã®å
±æã¯ã§ããŸãããWEARã§ã¯ Amazon Elastic Kubernetes ServiceïŒä»¥äžãEKSïŒ ã®ãªãŒãžã§ã³ãšäœ¿çšããŠããDatadogãµã€ãã®å Žæãç°ãªã£ãŠããŸããããã®å ŽåããVPCãã¢ãªã³ã°ã䜿çšããä»ã®ãªãŒãžã§ã³ããã®æ¥ç¶ãã§ããããªãŒãžã§ã³éã®éä¿¡ã¯ã2024幎7ææç¹ã§ 1GBããã$0.09 ããã£ãŠããŸããŸãããã®ãããWEARã§ã¯Datadogãžã®éä¿¡ã«é¢ããŠã¯NATã²ãŒããŠã§ã€ãçµç±ããããšã蚱容ããŸããããå©çšäžã®Datadogãµã€ãã®PrivateLinkãšããŒã¿éä¿¡å
ãåäžãªãŒãžã§ã³ã«ããå Žåã¯PrivateLinkãçšããæ¹æ³ãæ€èšããŠã¿ãŠãã ããã WEARã®APIãšã®éä¿¡ 調æ»çµæãããWEARã®Webã¢ããªã±ãŒã·ã§ã³ããAPIãžã®éä¿¡ãNATã²ãŒããŠã§ã€ãçµç±ããŠè¡ãããŠããããšãããããŸãã 10 ãéä¿¡çµè·¯ã®æŠç¥ã¯ä»¥äžã®å³ã®éãã§ããAWSéã®éä¿¡ã®ããã€ã³ã¿ãŒãããã«ã¯åºãŠããŸããããNATã²ãŒããŠã§ã€ãçµç±ããŠéä¿¡ããŠããŸã£ãŠããŸãã ãããã¯åäžVPCã«ååšããŠãããããVPCå
éšã®ã¿ã§éä¿¡ãå®çµãããããšããã§ããWEARã®EKSå
ã®Pod㯠Application Load BalancerïŒä»¥äžãALBïŒ ã®é
äžã«ååšããŸããèª¿æ»æç¹ã§ã¯ã€ã³ã¿ãŒãããåãã®ALBã®ã¿ååšããŸãããå
éšåãã®ALBãäœæããVPCå
éšããã®éä¿¡ã¯å
éšåãã®ALBã«å¯ŸããŠè¡ãããã«ããŸãã WEARã§ã¯ãALBãšALBã®ãšã€ãªã¢ã¹ã¬ã³ãŒãã®äœæã AWS Load Balancer Controller ãš ExternalDNS ãçšããŠIngressã«å°çšã®ã¢ãããŒã·ã§ã³ãä»äžããããšã§è¡ã£ãŠããŸãã æ¢åã®Ingressãèžè¥²ããæ°ãã«å
éšåãALBçšã®IngressãäœæããŸãã alb.ingress.kubernetes.io/scheme ã¢ãããŒã·ã§ã³ã®ããã©ã«ãå€ã¯ internal ã§ãããåŸè¿°ããçç±ã«ããæç€ºçã« internal ãèšå®ããŠãããŸãã 以äžã«å
éšåãALBäœæã®ãµã³ãã«IngressãèšèŒããŸãããŸããå
éšåãALBãäœæãããã©ã€ããŒããµããããã«èªåæ€åºçšã®ã¿ã° 11 ãä»äžãããŠããããšã確èªããŠãã ããã apiVersion : networking.k8s.io/v1 kind : Ingress metadata : name : api-internal namespace : api annotations : kubernetes.io/ingress.class : alb alb.ingress.kubernetes.io/scheme : internal external-dns.alpha.kubernetes.io/hostname : api.wear.jp # ã€ã³ã¿ãŒãããåãIngressã®ãã®ãšåã # (以äžç¥) spec : rules : - http : paths : - path : / pathType : Prefix backend : service : name : api port : number : 80 次ã«ãäœæããå
éšåãALBã®ãšã€ãªã¢ã¹ã¬ã³ãŒããç»é²ããããã®ãã©ã€ããŒããã¹ããŸãŒã³ãšããã©ã€ããŒããã¹ããŸãŒã³çšã®ExternalDNSãæ°ãã«äœæããŸãããã©ã€ããŒããã¹ããŸãŒã³åã¯ãšã€ãªã¢ã¹ã¬ã³ãŒãã®ã¬ã³ãŒãåãšäžèŽãããŸãã ããã§1ã€æ³šæããªããã°ãªããªãããšããããŸãã ãã§ã«éä¿¡ãè¡ãããŠãããã¡ã€ã³ã«å¯ŸããŠæ°ãã«ãã©ã€ããŒããã¹ããŸãŒã³ãäœæããå Žåã¯ããšã€ãªã¢ã¹ã¬ã³ãŒããäœæãããŸã§ã¯EKSã®VPCã«ãã©ã€ããŒããã¹ããŸãŒã³ãé¢é£ä»ããŠã¯ãããªã ãšããããšã§ãã ãã©ã€ããŒããã¹ããŸãŒã³ãäœæããæç¹ã§ãé¢é£ä»ããããŠããVPCå
éšã®éä¿¡ã¯ãã®ãã©ã€ããŒããã¹ããŸãŒã³ã§åå解決ã詊ã¿ãŸãããããããã©ã€ããŒããã¹ããŸãŒã³ã®äœæãšãšã€ãªã¢ã¹ã¬ã³ãŒãã®äœæã¯åæã«ã§ããªããããåå解決ã«å€±æããŠããŸããŸãããã©ã€ããŒããã¹ããŸãŒã³ã¯äœææã«å¿
ã1ã€ä»¥äžã®VPCãé¢é£ä»ããªããã°ãªããªãããã䜿çšããŠããªãVPCã®ã¿ãäžæçã«é¢é£ä»ããŠãããŸãã 以äžã« Terraform ãçšãããµã³ãã«ã³ãŒããèšèŒããŸããããã§ã¯ã䜿çšããŠããªãããã©ã«ãã®VPCãäžæçã«ãã©ã€ããŒããã¹ããŸãŒã³ã«é¢é£ä»ãããŠããŸãã resource " aws_route53_zone " " private_api " { name = " api.wear.jp " vpc { # äžæçã«default VPCãæå®ã vpc_id = data.aws_vpc.default.id vpc_region = " ap-northeast-1 " } force_destroy = false } # äžæçã«default VPCãæå®ããããã®ããŒã¿ãœãŒã¹ data " aws_vpc " " default " { default = true } åããã¡ã€ã³ã§ãããªãã¯ãã¹ããŸãŒã³ãšãã©ã€ããŒããã¹ããŸãŒã³ãåºãåããããã«ãã©ã€ããŒããã¹ããŸãŒã³çšã®ExternalDNSãæ°ãã«äœæããŸã 12 ã以äžã®ãªãã·ã§ã³ã§èµ·åããŸãã --aws-zone-type=private --annotation-filter=alb.ingress.kubernetes.io/scheme=internal --domain-filter=${ãã©ã€ããŒããã¹ããŸãŒã³å} å
éšåãALBã®ããã®ã¢ãããŒã·ã§ã³ãã€ããŠãããªãœãŒã¹ã®ã¿ã察象ã«èšå®ããŠããŸããããããããã©ã«ãå€ã«ããããããæç€ºçã«Ingressã«ã¢ãããŒã·ã§ã³ãèšå®ããçç±ã§ãã å
ã
èµ·åããŠãããããªãã¯ãã¹ããŸãŒã³çšã®ExternalDNSã«ã¯ --annotation-filter=alb.ingress.kubernetes.io/scheme=internet-facing ãçšããŠåèµ·åããã€ã³ã¿ãŒãããåãALBçšã®ãªãœãŒã¹ã®ã¿ã察象ã«ããŸãã ExternalDNSã®æºåãã§ãããå
éšåãçšIngressãEKSå
ã«äœæããå
éšåãALBãšALBã®ãšã€ãªã¢ã¹ã¬ã³ãŒããäœæãããŠããããšã確èªããŸããäžæçã«é¢é£ä»ããŠãããVPCå
éšããdigã³ãã³ãçã§åå解決ãããã©ã€ããŒãã¢ãã¬ã¹ã«è§£æ±ºãããããšã確èªããŠãããŸãã確èªåŸããã©ã€ããŒããã¹ããŸãŒã³ãEKSã®VPCã«é¢é£ä»ãããäžæçãªVPCã®é¢é£ä»ãã¯è§£é€ããŸãã 以äžã«ãµã³ãã«ã³ãŒããèšèŒããŸããããã§ã¯ããã©ã€ããŒããã¹ããŸãŒã³ã«é¢é£ä»ããããŠããVPCãã䜿çšããŠããªãVPCããvariablesã«èšå®ãããEKSã®VPCã«å€æŽããŠããŸãã variable " vpc_id " { type = string description = " EKSã®VPC ID " } resource " aws_route53_zone " " private_api " { name = " api.wear.jp " vpc { vpc_id = var.vpc_id vpc_region = " ap-northeast-1 " } force_destroy = false } æçµçãªéä¿¡çµè·¯ã®æŠç¥ã¯ä»¥äžã®å³ã®éãã§ããããã§ãWEARã®Webã¢ããªã±ãŒã·ã§ã³ããAPIãžã®éä¿¡ãVPCå
éšã§å®çµããããã«èšå®ã§ããŸããã ECRãããªãã¯ãªããžããªãšã®éä¿¡ WEARã§ã¯ãaws-for-fluent-bitãåããšãããè€æ°ã®ã³ã³ããã€ã¡ãŒãžã§ECRãããªãã¯ãªããžããªã®ãã®ãå€çšããŠããŸãã ããã¥ã¡ã³ã ã«ã¯ä»¥äžã®ãããªèšèŒããããŸãã çŸåšãVPC ãšã³ããã€ã³ã㯠Amazon ECR ãããªãã¯ãªããžããªããµããŒãããŠããŸããããã«ã¹ã«ãŒãã£ãã·ã¥ã«ãŒã«ã䜿çšããŠãVPC ãšã³ããã€ã³ããšåããªãŒãžã§ã³ã«ãããã©ã€ããŒããªããžããªã§ãããªãã¯ã€ã¡ãŒãžããã¹ãããããšãæ€èšããŠãã ããã äžèšã®æ¡å
éãããã«ã¹ã«ãŒãã£ãã·ã¥ã«ãŒã«ã䜿çšããããšã«ããŸãããã«ã¹ã«ãŒãã£ãã·ã¥ã«ãŒã«ã䜿çšãããšãDockerHubãECRãããªãã¯ãªã©ã«ãããªããžããªãèªåã®AWSã¢ã«ãŠã³ãã®ãã©ã€ããŒããªããžããªã«ãã£ãã·ã¥ããŠããããšãã§ããŸãããããããæåã§ã€ã¡ãŒãžãããã·ã¥ããŠããå¿
èŠã¯ãªããèªåã®ãªããžããªãããã«ããããšããéã«ã€ã¡ãŒãžãååšããªããã°ãèªåçã«èšå®å
ã®ãªããžããªãããã«ããŠã€ã¡ãŒãžãæ ŒçŽããŠãããŠãããŸãã 詳现㯠ããã¥ã¡ã³ã ããåç
§ãã ããããŸããWEARã§ã¯ Amazon Elastic Container RegistryïŒä»¥äžãECRïŒ çšã®VPCãšã³ããã€ã³ãã¯ãã§ã«äœæããŠãã£ããããæ°ãã«äœæããå¿
èŠã¯ãããŸããã§ããã 以äžã«Terraformãçšãããµã³ãã«ã³ãŒããèšèŒããŸãã resource " aws_ecr_pull_through_cache_rule " " ecr_public " { ecr_repository_prefix = " ecr-public " upstream_registry_url = " public.ecr.aws " } èšå®å®äºåŸããããã§ã¹ãã®ã€ã¡ãŒãžã以äžã®ããã«æžãæããŸãã $ACCOUNT_ID ã¯ãã©ã€ããŒããªããžããªãååšããAWSã¢ã«ãŠã³ãã®IDã§ãããŸããWEARã§ã¯å
ã
Datadogã®ã³ã³ããã€ã¡ãŒãžãHelmã®ããã©ã«ãå€ã§ãã gcr.io/datadoghq ãããã«ããŠããŸãããããã®ã¿ã€ãã³ã°ã§ECRã«åãæ¿ããŸãã 13 ã - image: public.ecr.aws/aws-observability/aws-for-fluent-bit + image: $ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-public/aws-observability/aws-for-fluent-bit ããã§ãååãã«æã«ã¯NATã²ãŒããŠã§ã€ãçµç±ããŠã€ã¡ãŒãžããã«ãããŸããããã®åŸã¯VPCãšã³ããã€ã³ãçµç±ã§ãã©ã€ããŒããªããžããªãããã«ãããããã«ãªããŸããã çµæ 察å¿å®äºåŸãNATã²ãŒããŠã§ã€ãçµç±ããéä¿¡éãã©ã®ãããæžã£ãã®ãã確èªããŸãããŸãã¯ã以äžã®ã¯ãšãªã§VPCå
éšããNATã²ãŒããŠã§ã€ãçµç±ããå€åãã®éä¿¡ã«å¯ŸããŠå¯Ÿå¿ååŸã®åæžéã確èªããŸã 14 ã SELECT B.pkt_dst_aws_service AS pkt_dst_aws_service, ROUND ( CAST (B.bytes_day- COALESCE (A.bytes_day, 0 ) AS double)/B.bytes_day* 100 , 2 ) AS Reduction_percentage FROM ( SELECT pkt_dst_aws_service, SUM (bytes) AS bytes_day FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 察å¿åã®æ¥ä»(UTC) GROUP BY pkt_dst_aws_service ) B LEFT JOIN ( SELECT pkt_dst_aws_service, SUM (bytes) AS bytes_day FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 察å¿åŸã®æ¥ä»(UTC) GROUP BY pkt_dst_aws_service ) A ON B.pkt_dst_aws_service = A.pkt_dst_aws_service ORDER BY B.bytes_day DESC pkt_dst_aws_service Reduction_percentage AMAZON 99.91 EC2 -2.82 - -2.14 DYNAMODB 100.0 CLOUDFRONT 93.75 GLOBALACCELERATOR 100.0 çµæã確èªãããšã AMAZON ãžã®éä¿¡éã99.91ïŒ
ã CLOUDFRONT ã93.75ïŒ
ã DYNAMODB ãžã®éä¿¡éã100.0ïŒ
åæžã§ããŠããããšãããããŸãããVPCãšã³ããã€ã³ããããŸãäœçšããŠããããã§ããå¢ããŠããç®æããããŸãããéä¿¡éã¯æ¥ã«ãã£ãŠèª€å·®ããããã察å¿ã«ãããã®ã§ã¯ãããŸãããNATã²ãŒããŠã§ã€ãçµç±ããŠVPCå
éšã«åä¿¡ããéä¿¡ã«é¢ããŠã確èªããŸãã NATã²ãŒããŠã§ã€ãçµç±ããå
åãéä¿¡ã®åæžé確èªã¯ãšãª SELECT B.pkt_src_aws_service AS pkt_src_aws_service, ROUND ( CAST (B.bytes_day- COALESCE (A.bytes_day, 0 ) AS double)/B.bytes_day* 100 , 2 ) AS Reduction_percentage FROM ( SELECT pkt_src_aws_service, SUM (bytes) AS bytes_day FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr NOT LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 察å¿åã®æ¥ä»(UTC) GROUP BY pkt_src_aws_service ) B LEFT JOIN ( SELECT pkt_src_aws_service, SUM (bytes) AS bytes_day FROM " vpc_flow_logs_database " . " vpc_flow_logs_table " -- VPCãããŒãã°ããŒãã«ãååšããããŒã¿ããŒã¹.VPCãããŒãã°ããŒãã« WHERE srcaddr NOT LIKE ' x.y.% ' -- VPC CIDRã®ãããã¯ãŒã¯éšå(äŸïŒVPC CIDRã`172.168.0.0/16`ã®æã`172.168.`) AND dstaddr in ( ' x.y.a.b ' , ' x.y.c.d ' , ' x.y.e.f ' ) -- NatGateway IP AND action = ' ACCEPT ' AND logdate BETWEEN ' YYYY/MM/dd/00 ' AND ' YYYY/MM/dd/23 ' -- 察å¿åŸã®æ¥ä»(UTC) GROUP BY pkt_src_aws_service ) A ON B.pkt_src_aws_service = A.pkt_src_aws_service ORDER BY B.bytes_day DESC çµæã¯ä»¥äžã®éãã§ããWEARã®APIïŒ EC2 ïŒãžã®éä¿¡ãVPCå
éšã§å®çµããããšããã«ã¹ã«ãŒãã£ãã·ã¥ã«ãŒã«ã«ãã£ãŠ CLOUDFRONT ãå€éšãµãŒãã¹ãžã®éä¿¡åæ°ãæžã£ãããšã§éä¿¡éã倧å¹
ã«æžã£ãŠããŸãã pkt_src_aws_service Reduction_percentage EC2 89.15 AMAZON 98.22 - 63.65 CLOUDFRONT 99.14 DYNAMODB 100.0 GLOBALACCELERATOR 100.0 Cost Explorerã§å¯Ÿå¿ååŸã®1æ¥æ¯ã®ã°ã©ãã確èªããŸããæçµçã«å¯Ÿå¿ãå®äºããã®ã¯6/6é ã§ããã°ã©ãã®éãã倧å¹
ã«ã³ã¹ããæžãããŸãããNATã²ãŒããŠã§ã€ã®ã³ã¹ãã ãã§èšããšã80ïŒ
ã»ã©åæžã§ããŸããã ããããNATã²ãŒããŠã§ã€ãçµç±ããªããªã£ãåãVPCãšã³ããã€ã³ãã®ã³ã¹ããå¢ããŠããã¯ãã§ãããã¡ãã確èªããŸããAPIãªãã¬ãŒã·ã§ã³ã«ãVpcEndpointãã远å ããã°ã©ãã確èªããŸãã VPCãšã³ããã€ã³ãã®éä¿¡ã³ã¹ããå å³ããŠããã³ã¹ãã倧å¹
ã«åæžã§ããŠããŸãã察å¿åã®NATã²ãŒããŠã§ã€ãšVPCãšã³ããã€ã³ãã®ç·é¡ã§èšç®ãããšãæçµçã«ã¯60ïŒ
ã»ã©åæžã§ããŸããã ãŸãšã æ¬èšäºã§ã¯NATã²ãŒããŠã§ã€ã®éä¿¡å
容ã®èª¿æ»ãšéä¿¡éã®åæžæ¹æ³ã«ã€ããŠç޹ä»ããŸãããVPCãããŒãã°ãšãªãŸã«ããŒã®ã¯ãšãªãã°ã確èªããããšã§è©³çްãªéä¿¡å
å®¹ãææ¡ã§ããŸãããéä¿¡å
容ã«å¿ããŠé©åãªå¯Ÿå¿ãããçµæãçŽ60ïŒ
ã®ã³ã¹ããåæžã§ããŸãããNATã²ãŒããŠã§ã€ã®ã³ã¹ãåæžãæ€èšããŠããæ¹ãããã°ããã²åèã«ããŠã¿ãŠãã ããã ZOZOã§ã¯ãäžç·ã«ãµãŒãã¹ãäœãäžããŠãããæ¹ãåéäžã§ãããèå³ã®ããæ¹ã¯ã以äžã®ãªã³ã¯ãããã²ãå¿åãã ããã corp.zozo.com çµæç»åã®y軞ã¯ãã¹ã¯åŠçãæœããŠãããŸããä»åŸåºãŠããCost Explorerã®ç»åã¯ãã¹ãŠy軞ããã¹ã¯åŠçæžã¿ã®ãã®ã§ãã ↩ Amazon VPC ãããŒãã°ã®ã¯ãšãª ↩ åèïŒ ãµã³ãã«ã¯ãšãª - Amazon CloudWatch Logs ↩ ããã§ã®AWSãµãŒãã¹ã¯ãã¹ãŠã®ãµãŒãã¹åã§ã¯ãªããVPCãããŒãã°ã® pkt-src-aws-service ãã£ãŒã«ãã®å€ã§è¡šç€ºããããã®ïŒåèïŒ VPC ãããŒãã°ã䜿çšãã IP ãã©ãã£ãã¯ã®ãã°èšé² - Amazon Virtual Private Cloud ïŒ ↩ Amazon Athena ã®æé ↩ Datadogãžã®éä¿¡ã¯ãã»ãšãã©ã pkt_src_aws_service = 'EC2' ã«å
å
ãããŠããŸãã ↩ ããããããã®ãã pkt_dst_aws_service ããšã«ã¯ãšãªãå®è¡ããŠããŸããããã®ã«ã©ã ã«ã¯ããŒãã£ã·ã§ã³ãèšå®ãããŠããªãããããã®æ¡ä»¶å¥ã«ãã£ãŠã¹ãã£ã³éãæžããããšã¯ã§ããŸãããAthenaã®ã¹ãã£ã³éã«ããæéãæžããããå Žåã pkt_dst_aws_service ã«ããŒãã£ã·ã§ã³ãèšå®ããããšãæ€èšãããããã®æ¡ä»¶ãåé€ãã1åã®ã¯ãšãªã§ãã¹ãŠãåºåããŠãã ããã ↩ ã²ãŒããŠã§ã€ãšã³ããã€ã³ã - Amazon Virtual Private Cloud ↩ AWS PrivateLink ãä»ã㊠Datadog ã«æ¥ç¶ãã ↩ èæ¯ïŒ WEAR Webããã³ããšã³ããªãã¬ã€ã¹ã®ã¢ãŒããã¯ãã£éžå®ãšNext.jsãžã®ç§»è¡ ↩ ããŒåïŒ kubernetes.io/role/internal-elb ãå€ïŒ1ã®ã¿ã°ãå¿
èŠïŒåèïŒ Amazon EKS ã§ã®ã¢ããªã±ãŒã·ã§ã³è² è·åæ£ ïŒ ↩ åèïŒ ExternalDNSã§Private Hosted ZoneãšPublic Hosted Zoneã«ã¬ã³ãŒããåºãåãã | DevelopersIO ↩ Docker ç°å¢ã®ã³ã³ããã€ã¡ãŒãž ↩ ããããããã®ããã«1ã€ã®ã¯ãšãªã«ããŠããŸããã察å¿åã®çµæã¯æåã«ã¯ãšãªããéã©ããã«ã¡ã¢ããŠããã察å¿åŸã®æ¥ä»ã ãã¯ãšãªããŠæåã§æ¯èŒããæ¹ãAthenaã®æéäžè¯ããšæããŸãã ↩