ã¯ããã«
ãã®èšäºã¯ã以äžã®ãããªèª²é¡ããæã¡ã®æ¹ã察象ãšããŠããŸãã
- æ°çŸãæ°åèŠæš¡ã®AWSãªãœãŒã¹ã管çããŠãã
- æ£åžããç£æ»ã®ãããAWS CLIã䜿ã£ãŠãªãœãŒã¹æ å ±ã宿çã«ååŸããã
- ããããåçŽãªã«ãŒãåŠçã§ã¯APIã®ã¬ãŒããªãããïŒã¹ããããªã³ã°ïŒã«é »ç¹ã«ééããäžéšãªãœãŒã¹æ å ±ã®ååŸãæ¬ æãããªã©ã§ã¹ã¯ãªãããå®å®ããªã
AWSç°å¢ã®èŠæš¡ã倧ãããªãã«ã€ããŠã倿°ã®ãªãœãŒã¹æ
å ±ååŸã¯å®è¡æéãšä¿¡é Œæ§ã®äž¡é¢ã§å€§ããªèª²é¡ãšãªããŸãã
æ¬èšäºã§ã¯ããã®èª²é¡ã解決ããããã«ãAWSã®ãªãœãŒã¹ãç¶²çŸ
çã«ååŸããããã®3ã€ã®ã¢ãããŒãããã»ããã¢ããã®æéããã³ã¹ãããå¹çãããªãœãŒã¹ã®ç¶²çŸ
æ§ãã®èгç¹ããåŸ¹åºæ¯èŒããŸããããã«ãAPIã¹ããããªã³ã°ãåé¿ããããã®å®è·µçãªã·ã§ã«ã¹ã¯ãªããèšèšã«ã€ããŠãäŸã亀ããªãã解説ããŸãã
ç®æ¬¡
æ¯èŒïŒAWSãªãœãŒã¹æ å ±ã®ååŸã3ã€ã®ã¢ãããŒã
AWSç°å¢ã®ãªãœãŒã¹æ å ±ãç¶²çŸ çã«ååŸããã«ã¯ãããã€ãã®ä»£è¡šçãªæ¹æ³ããããŸããããã§ã¯3ã€ã®ã¢ãããŒããåãäžããããããã®é·æãšçæãèŠãŠãããŸãããã
1ïŒåãµãŒãã¹ã®APIãã«ãŒãã§å®è¡ãã
ããã¯ãäŸãã°ãŸãaws ec2 describe-instancesã§å
šã€ã³ã¹ã¿ã³ã¹IDãååŸãããã®åIDã«å¯ŸããŠaws ec2 describe-instance-attributeã®ãããªãªãœãŒã¹ã®è©³çްæ
å ±ãååŸããã³ãã³ãããã«ãŒãå®è¡ããæ¹æ³ã§ãããããã¯ãS3ãã±ããåã®ãªã¹ãã«å¯ŸããŠaws s3api get-bucket-encryptionãäžã€ãã€å®è¡ããŠãããããªãæãçŽæçã§ã·ã³ãã«ãªã¢ãããŒããæããŸãã
- ã»ããã¢ãã
äžèŠã§ããAWS CLIãã€ã³ã¹ããŒã«ãããèªèšŒæ å ±ãèšå®ãããŠããã°ããã«å®è¡ã§ããŸãã - ã³ã¹ã
describeãlistãšãã£ããªãœãŒã¹æ å ±ãèªã¿åãAPIã®åŒã³åºãèªäœã¯ç¡æã§ãã - å¹ç
æªããšèšããããåŸãŸããããªãœãŒã¹æ°ãå¢ããã»ã©APIã®ã³ãŒã«æ°ãå¢å€§ããå€§èŠæš¡ãªç°å¢ãšãªããšAPIã¹ããããªã³ã°ãçºçããããšãããã§ããããæ°åã®ãªãœãŒã¹ã察象ãšããå°èŠæš¡ãªç°å¢ããäžåºŠããã®äœ¿ãæšãŠã¹ã¯ãªããã«ã¯åããŠããŸãããå€§èŠæš¡ãªç°å¢ã§ã®å®æçãªæ£åžããªã©ã«ã¯äžåãã§ãã - ãªãœãŒã¹ã®ç¶²çŸ
æ§
ã¹ã¯ãªããã®äœãèŸŒã¿æ¬¡ç¬¬ã§ç¶²çŸ çãªååŸã¯å¯èœã§ãããAPIã¹ããããªã³ã°ã«ãããšã©ãŒãé©åã«ãã³ããªã³ã°ããªããšãæ å ±ååŸãæ¬ æãããªã¹ã¯ã䌎ããŸãã
2ïŒAWS Config ã®APIãé«åºŠãªã¯ãšãªã掻çšãã
AWS Configãæå¹åããŠããAWSç°å¢ã§ããã°ãèšé²ããããªãœãŒã¹ã®æ§ææ å ±ã«å¯ŸããŠãã¯ãšãªã§é«éã«æ€çŽ¢ããããããšãã§ããŸãã
- ã»ããã¢ãã
å¿ é ã§ããäºåã«AWS Configãæå¹åããæ£åžãã®å¯Ÿè±¡ãšããããªãœãŒã¹ã¿ã€ããèšé²ããèšå®ãå®äºããŠããå¿ èŠããããŸãã - ã³ã¹ã
ææã§ããAWS Configã¯èšé²ããæ§ææ å ±ã®æ°ã«å¿ããŠèª²éãããŸããæ±äº¬ãªãŒãžã§ã³ã§ã¯ãèšé²ãããæ§æã¢ã€ãã 1ã€ããã (â») $0.003 ã®æéãçºçããŸããâ»é£ç¶çãªèšé²ãéžæããå Žå
äŸãã°ã10,000åã®ãªãœãŒã¹ãèšé²å¯Ÿè±¡ãšããŠããã1ã¶æã®éã«ãªãœãŒã¹ã®äœæãèšå®å€æŽã«ãã£ãŠåèš30,000åã®æ§ææ å ±ã®å€æŽãèšé²ãããå Žåãæé¡æéã¯ä»¥äžã®ããã«ãªããŸãã
30,000 * $0.003 = $90/æ
æ§ææ å ±ã¯ãªãœãŒã¹ãäœæãããæã ãã§ãªããèšå®ã倿Žããããã³ã«èšé²ããããããæ°ã¯ãªãœãŒã¹æ°ãããå€ããªãåŸåã«ãããŸãããã®ãããå€§èŠæš¡ãã€å€æŽãé »ç¹ãªç°å¢ã§ã¯çžå¿ã®ã³ã¹ãããããããšãæ³å®ããè²»çšå¯Ÿå¹æãæ€èšããå¿ èŠããããŸããïŒåèïŒ AWS Config ã®æéïŒ - å¹ç
é«ãã§ããç¹ã«é«åºŠãªã¯ãšãªã¯ãã¬ã³ãŒããŒã«ãã£ãŠèšé²æžã¿ã®ããŒã¿ããŒã¹ã«å¯ŸããŠæ€çŽ¢ããããããé«éã§ãã - ãªãœãŒã¹ã®ç¶²çŸ
æ§
èšé²å¯Ÿè±¡ã«äŸå: ConfigãååŸã§ããã®ã¯ãã¬ã³ãŒããŒã§èšé²ãæå¹ã«ããŠãããªãœãŒã¹ã¿ã€ãã®ã¿ã§ããèšé²å¯Ÿè±¡å€ã®ãªãœãŒã¹ã¯ååŸã§ããŸããã - APIã«ããååŸæ
å ±ã®éã:
batch-get-resource-config: 1åã§100åã®ãªãœãŒã¹æ å ±ãååŸã§ãäžæ¬ååŸã«é©ããŠããŸãã(åèïŒBatchGetResourceConfig)get-resource-config-history: å±¥æŽãã¿ã°ãå«ããŠè©³çŽ°ãªæ å ±ãååŸã§ããŸãããäžåºŠã«1ãªãœãŒã¹ãã€ããååŸã§ããŸãããå šéååŸã«å©çšãããšAPIã®RateLimitã«ãããå¯èœæ§ããããããäžæ¬ååŸã«ã¯äžåãã§ãã(åèïŒGetResourceConfigHistory)
ã¯ãšãªã®å®è¡äŸ
ã¯ãšãªäŸ1ïŒç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãïŒt2.microïŒãæã€EC2ã€ã³ã¹ã¿ã³ã¹ããã¹ãŠæ€çŽ¢ãã
SELECT
resourceId,
resourceName,
configuration.instanceType,
awsRegion
WHERE
resourceType = 'AWS::EC2::Instance'
AND configuration.instanceType = 't2.micro'
ãã®ã¯ãšãªãAWS CLIããå®è¡ããã«ã¯ã以äžã®ã³ãã³ãã䜿çšããŸãã
aws configservice select-resource-config \
--expression "SELECT resourceId, resourceName, configuration.instanceType, awsRegion WHERE resourceType = 'AWS::EC2::Instance' AND configuration.instanceType = 't3.micro'" \
| jq '.Results[] | fromjson'
ã¯ãšãªäŸ2ïŒãããªãã¯èªã¿åãã¢ã¯ã»ã¹ããããã¯ãããŠããªãS3ãã±ãããæ€çŽ¢ãã
SELECT
resourceId,
resourceName,
awsRegion
WHERE
resourceType = 'AWS::S3::Bucket'
AND configuration.publicAccessBlockConfiguration.blockPublicAcls = 'false'
(åèïŒ AWS Config ããã¥ã¡ã³ã â é«åºŠãªã¯ãšãª)
3: Resource Groups Tagging API ãæŽ»çšãã
aws resourcegroupstaggingapi get-resourcesã³ãã³ããå©çšãããšãEC2ã€ã³ã¹ã¿ã³ã¹ãS3ãã±ãããRDSããŒã¿ããŒã¹ãšãã£ãç°ãªãçš®é¡ã®AWSãµãŒãã¹ã«ãŸããã£ãŠãªãœãŒã¹ãäžåºŠã«æ€çŽ¢ã§ããŸãã
- ã»ããã¢ãã
äžèŠã§ãã - ã³ã¹ã:
ç¡æã§ãããã®APIã®åŒã³åºãèªäœã«è¿œå æéã¯çºçããŸããã - å¹ç
é«ãã§ããäžåºŠã®APIã³ãŒã«ã§ããªãŒãžã§ã³å ã®è€æ°ã®ãµãŒãã¹ã«ãŸããããªãœãŒã¹æ å ±ãæå€§100ä»¶ãŸã§ãŸãšããŠååŸã§ãããããå¹ççã§ãã - ãªãœãŒã¹ã®ç¶²çŸ
æ§
äœãããã®APIã¯ç¶²çŸ çãªãªãœãŒã¹æ£åžãã«ã¯åããŠããŸããã以äžã®åŒ±ç¹ãçè§£ããŠããå¿ èŠããããŸãã- èšå®æ å ±ãååŸã§ããªã: ååŸã§ããã®ã¯ARNãšã¿ã°ã®ã¿ã§ããæå·åèšå®ãªã©ã®è©³çްæ å ±ã¯ãå¥éåãµãŒãã¹ã®APIã§ååŸãçŽãå¿ èŠããããŸãã
- ã¿ã°ã®ç¡ããªãœãŒã¹ã¯ååŸã§ããªã: ãã®APIã®æå€§ã®åŒ±ç¹ã§ããã¿ã°ãäžåä»äžãããããšããªããªãœãŒã¹ã¯ãæ€çŽ¢çµæããå®å šã«æŒããŠããŸããŸããå šãªãœãŒã¹ã®æ£åžããšããèŠä»¶ã§ã¯èŽåœçã§ãã
(åèïŒ Resource Groups Tagging API User Guide â get-resources)
æ¯èŒè¡š
| ã¢ãããŒã | ã»ããã¢ãã | ã³ã¹ã | å¹çïŒé床/ã¹ããããªã³ã°äœå¶ïŒ | ãªãœãŒã¹ã®ç¶²çŸ æ§ | åè |
|---|---|---|---|---|---|
| 1. åAPIã®ã«ãŒãå®è¡ | äžèŠ | åºæ¬ç¡æ | äœã | ã¹ã¯ãªããã«äŸåãã | ã¹ããããªã³ã°ã«ããæ å ±æ¬ æãªã¹ã¯ãã |
| 2. AWS Config | å¿ èŠ | ææ | éåžžã«é«ã | èšé²å¯Ÿè±¡ã«éã | ç¶ç¶çãªãªãœãŒã¹ç®¡çãç£æ»ã«æé© |
| 3. Tagging API | äžèŠ | åºæ¬ç¡æ | é«ã | äœã | ã¿ã°ç¡ããªãœãŒã¹ãååŸã§ãããç¶²çŸ æ§ã«æ¬ ãã |
å®è·µïŒAPIã¹ããããªã³ã°ãåé¿ããã·ã§ã«ã¹ã¯ãªããã®å·¥å€«
äžèšãèžãŸããåã¢ãããŒãã®è¯ãæªããèŠããŠããŸãããAWS Configã匷åãªéžæè¢ã§ããäžæ¹ãã³ã¹ããæè»æ§ã®èгç¹ããAWS CLIã§ã®å®è£ ãæé©ãªã±ãŒã¹ããããŸããããã§ä»¥éããã¯ãåçŽãªã«ãŒãå®è¡ã®èª²é¡ãå æããCLIã§ãªãœãŒã¹ååŸã¹ã¯ãªãããæ§ç¯ããããã®ãã¯ããã¯ã5ã€ç޹ä»ããŸãã
ãã¯ããã¯1: äžæ¬ååŸç³»APIã®æŽ»çš
APIã¹ããããªã³ã°ãåé¿ããããã®éèŠãªèãæ¹ã¯ãããããAPIãåŒã³åºãåæ°ãæå°éã«æããããšã§ãããªãœãŒã¹IDãäžã€ã²ãšã€æå®ããŠAPIãã³ãŒã«ããã®ã§ã¯ãªããaws ec2 describe-instancesã®ããã«ããã£ã«ã¿ãŒæ¡ä»¶ãæå®ããããšã§äžåºŠã«å€æ°ã®ãªãœãŒã¹æ
å ±ããŸãšããŠååŸã§ãããäžæ¬ååŸç³»ãã®APIãå¯èœãªéãå©çšããŸããããããã«ãããAPIã³ãŒã«æ°ãåæžã§ããŸãã
ãã¯ããã¯2: åŠçãã§ãŒãºã®åé¢ïŒå¿çšïŒ
ãªãœãŒã¹æ å ±ãååŸããã ãã§ãªãããã®çµæã䜿ã£ãŠãªãœãŒã¹ã®ç¶æ ã倿ŽãããïŒäŸïŒç¹å®ã®ã¿ã°ãäžæ¬ã§å²ãåœãŠãïŒãšããããŒãºãå€ãããšæããŸãããã®ãããªå Žåã«ãã¹ã¯ãªããã®å ç¢æ§ãé«ããããã®å¿çšãã¯ããã¯ããåŠçãã§ãŒãºã®åé¢ãã§ãã
- ãªãœãŒã¹æ å ±ååŸãã§ãŒãº: ãŸããåŠç察象ãšãªããªãœãŒã¹ã®IDãARNãå šãŠååŸããäžæãã¡ã€ã«ã«ä¿åããŸãã
- å®è¡ãã§ãŒãº: 次ã«ããã®äžæãã¡ã€ã«ãèªã¿èŸŒã¿ãåãªãœãŒã¹ã«å¯ŸããŠè©³çްæ å ±ã®ååŸãèšå®å€æŽãšãã£ãAPIã³ãŒã«ãå®è¡ããŸãã
ãã®ãããªèšèšã«ããããšã§ãããå®è¡ãã§ãŒãºã®éäžã§ã¹ã¯ãªããã倱æããŠããã³ã¹ããåŠçæéã®ããããªãœãŒã¹æ å ±ååŸãåå®è¡ããããšãªããäžæããç®æããåŠçãåéã§ããŸãããããã°ã容æã«ãªããã¹ã¯ãªããã®ä¿¡é Œæ§ãåäžããŸãã
ãã¯ããã¯3: xargsã«ãããããåŠç
ãã¯ããã¯2ã§äœæããäžæãã¡ã€ã«ãå¹ççã«åŠçããã®ã«æé©ãªã®ãxargsã³ãã³ãã§ããxargsã¯ããã¡ã€ã«ãæšæºå
¥åããåãåã£ã倧éã®ããŒã¿ããåŸç¶ã®ã³ãã³ããåŠçããããããã«åå²ããŠæž¡ããŠãããŸãã
äŸãã°ãvolume_ids.txtãšãããã¡ã€ã«ã«100åã®IDãä¿åãããŠããå Žåã以äžã®ããã«xargsãšçµã¿åãããããšã§ãã20åãã€ãã®å°ããªãããã«åå²ããŠAPIãå®è¡ã§ããŸãã
cat volume_ids.txt | xargs -n 20 aws ec2 describe-volumes --volume-ids
ããã«ãããçæéã«å€§éã®APIã³ãŒã«ãéäžããã®ãé²ããAPIã¹ããããªã³ã°ã®ãªã¹ã¯ãäœæžããŸããïŒåèïŒxargs ã³ãã³ãïŒ
ãã¯ããã¯4: sleepã«ããåŸ æ©åŠç
ã·ã³ãã«ã§ãããéåžžã«å¹æçãªæ¹æ³ã§ããã«ãŒãåŠçããããåŠçã®åéã«sleep 1ã®ãããªæå³çãªåŸ
æ©æéãæ¿å
¥ããããšã§ãåäœæéãããã®APIã³ãŒã«æ°ãç©ççã«æå¶ããŸããããã«ãããAPIã¬ãŒããªãããã®éŸå€ãè¶
ããå¯èœæ§ãããã«äžããããšãã§ããŸãã
ãã¯ããã¯5: AWS CLIã®ãªãã©ã€èšå®
AWS CLIã«ã¯ãAPIãšã©ãŒçºçæã«èªåã§ãªãã©ã€åŠçãè¡ãæ©èœãçµã¿èŸŒãŸããŠããŸããç¹ã«adaptiveã¢ãŒãã¯ãã¹ããããªã³ã°ãšã©ãŒãæ€ç¥ãããšãåŸç¶ã®APIãªã¯ãšã¹ãã¬ãŒããèªåçã«èª¿æŽããŠãããåªããã®ã§ããã¹ã¯ãªããã®åé ã§ç°å¢å€æ°ãèšå®ããã ãã§ãã¹ã¯ãªããã®å
ç¢æ§ã倧ããåäžãããããšãã§ããŸãã
(åèïŒAWS CLI User Guide â Retries)
ã³ãŒãäŸïŒæ å ±ååŸã¹ã¯ãªãã
ãããã®ãã¯ããã¯ãçµã¿åãããããå šEC2ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¿ãããããŠããEBSããªã¥ãŒã ã®æå·åç¶æ ãCSVã«åºåãããã¹ã¯ãªããã®ãµã³ãã«ã§ãã
#!/bin/bash
# EBSããªã¥ãŒã ã®æå·åç¶æ
ãå®å
šã«ååŸããã¹ã¯ãªããäŸ
# --- èšå® ---
TARGET_REGION="ap-northeast-1"
OUTPUT_FILE="ebs_encryption_status.csv"
TMP_FILE="volume_ids.tmp"
# --- ãã¯ããã¯5: AWS CLIã®ãªãã©ã€èšå® ---
export AWS_RETRY_MODE=adaptive
export AWS_MAX_ATTEMPTS=10
echo "調æ»ãéå§ããŸã..."
echo '"InstanceId","VolumeId","Encrypted"' > "$OUTPUT_FILE"
# --- ãã¯ããã¯1 & 2: IDãªã¹ãååŸãã§ãŒãº ---
echo "IDãªã¹ãååŸãã§ãŒãº: 察象ããªã¥ãŒã IDãäžæãã¡ã€ã«ã«åéäž..."
aws ec2 describe-instances \
--region "$TARGET_REGION" \
--query "Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId" \
--output text > "$TMP_FILE"
if [ ! -s "$TMP_FILE" ]; then
echo "調æ»å¯Ÿè±¡ã®ããªã¥ãŒã ãèŠã€ãããŸããã§ããã"
exit 0
fi
# --- ãã¯ããã¯2, 3 & 4: 詳现æ
å ±ååŸãã§ãŒãº ---
echo "詳现æ
å ±ååŸãã§ãŒãº: åããªã¥ãŒã ã®æå·åç¶æ
ã確èªäž..."
cat "$TMP_FILE" | xargs -n 20 | while read -r batch; do
echo -n "."
aws ec2 describe-volumes \
--region "$TARGET_REGION" \
--volume-ids $batch \
--query "Volumes[].[Attachments[0].InstanceId, VolumeId, Encrypted]" \
--output text | while read -r instance_id volume_id encrypted_status; do
echo "\"$instance_id\",\"$volume_id\",\"$encrypted_status\"" >> "$OUTPUT_FILE"
done
# ãã¯ããã¯4: åãããåŠçã®éã«åŸ
æ©ãå
¥ãã
sleep 1
done
echo ""
echo "調æ»ãå®äºããŸãããçµæã¯ $OUTPUT_FILE ã確èªããŠãã ããã"
çºå±ïŒååŸãããªã¹ããç¶æ 倿Žã«äœ¿ã
ãã®ãã§ãŒãºãåé¢ããèšèšã®åŒ·ã¿ã¯ãIDãªã¹ãååŸãã§ãŒãºã§äœæããäžæãã¡ã€ã«(volume_ids.tmp)ãåå©çšã§ããããšã§ãã äŸãã°ãæ£åžãã®çµæãæå·åãããŠããªãããªã¥ãŒã å
šãŠã«ç¹å®ã®ã¿ã°ãä»ããããªã£ããšããŸãããã®å Žåã以äžã®ãããªãç¶æ
倿Žã¹ã¯ãªããããå¥éçšæããã ãã§ãå®å
šã«ã¿ã°ä»ãåŠçïŒå®è¡ãã§ãŒãºïŒãè¡ããŸãã
#!/bin/bash
# volume_ids.tmpãªã¹ãã®å
šããªã¥ãŒã ã«äžæ¬ã§ã¿ã°ãä»ããã¹ã¯ãªããäŸ
# --- èšå® ---
TARGET_REGION="ap-northeast-1"
TMP_FILE="volume_ids.tmp"
TAG_KEY="Needs-Encryption"
TAG_VALUE="true"
# ãªãã©ã€èšå®ã¯åæ§ã«æå¹å
export AWS_RETRY_MODE=adaptive
export AWS_MAX_ATTEMPTS=10
if [ ! -s "$TMP_FILE" ]; then
echo "ãšã©ãŒ: 察象ãªã¹ããã¡ã€ã« $TMP_FILE ãååšããŸããã"
exit 1
fi
echo "ç¶æ
倿Ž: 察象ããªã¥ãŒã ã«ã¿ã°ãä»äžäž..."
cat "$TMP_FILE" | xargs -n 20 | while read -r batch; do
echo -n "."
# create-tagsã¯åªçæ§ãæã€ããããã§ã«ã¿ã°ãååšããŠããšã©ãŒã«ãªããã«åå®è¡ã§ããŸã
aws ec2 create-tags \
--region "$TARGET_REGION" \
--resources $batch \
--tags Key=$TAG_KEY,Value=$TAG_VALUE
sleep 1
done
echo ""
echo "ã¿ã°ä»äžãå®äºããŸãã"
ãã®ããã«ããäœããããïŒç¶æ 倿ŽïŒãã®ããžãã¯ããäœã«å¯ŸããŠè¡ããïŒå€æŽå¯Ÿè±¡ãªãœãŒã¹ã®ååŸïŒãã®ããžãã¯ããå®å šã«åé¢ããããšã§ãã¹ã¯ãªããã®èŠéããè¯ããªããåå©çšæ§ãæ Œæ®µã«åäžããŸãã
ãŸãšã
AWSãªãœãŒã¹ã®ç¶æ ååŸã«ã¯è€æ°ã®ã¢ãããŒãããããããããèŠä»¶ã«å¯Ÿå¿ã§ããäžèœãªè§£æ±ºçã¯ãããŸããã
- AWS Configã¯ãã»ããã¢ãããšã³ã¹ããšããããŒãã«ãã¯ãªã¢ã§ããã°ããªãœãŒã¹ã®ç¶²çŸ æ§ãšãã芳ç¹ã§ä¿¡é Œæ§ã®é«ãéžæè¢ã§ããç¶ç¶çãªãªãœãŒã¹æ§æç®¡çãç£æ»å¯Ÿå¿ãæ±ããããç°å¢ã§ã¯ã第äžã®åè£ãšãªãã§ãããã
- äžæ¹ãAWS CLIã§æè»ã«å®è£ ããå Žåã¯ãAPIã®ç¹æ§ãæ·±ãçè§£ããããšãäžå¯æ¬ ã§ããç¹ã«å€§èŠæš¡ç°å¢ã«ãããŠã¯ãæ¬èšäºã§ç޹ä»ãããããªäžæ¬ååŸç³»APIã®æŽ»çšãxargsã«ãããããåŠçãsleepã«ããåŸ æ©åŠçããããŠCLIã®ãªãã©ã€èšå®ãšãã£ãå°éãªå·¥å€«ã®çµã¿åããããã¹ã¯ãªããã®å®å®çšŒåãå®çŸããéµãšãªããŸãã
ãã®èšäºããçããŸã®ç°å¢ãèŠä»¶ã«åãããæé©ãªã¢ãããŒããéžæããããã®äžå©ãšãªãã°å¹žãã§ãã