ãAWS CLIãAmazon DynamoDBã¨Amazon OpenSearch Serverlessã®zero-ETL integrationã AWS CLI ã§æ§ç¯ãã
- åæ¸ã
- 注æç¹
- åèãªã³ã¯
- ç°å¢
- å ¨ä½å
- 0. äºåæºå
- 1. S3ã¨DynamoDBã®ä½æ
- 2. Pipelineã®Roleãä½æ
- 3. Amazon OpenSearch Collectionã®ä½æ
- 4. Policyã®ä½æ
- 5. Pipelineã®ä½æ
- 6. ãã¹ãå®è¡
- ãªã½ã¼ã¹ã®åé¤
- ä½è«: ChatGPT 㨠AWS CLI
- ã¾ã¨ã
åæ¸ã
2023å¹´ã®å¹´æ«ã«å ¬éããããDynamoDBã¨OpenSearch Serviceã®zero-ETL integrationã AWS CLI ã§æ§ç¯ããæé ãè¨é²ãã¦ããã¾ãã zero-ETL integrationã¯ãDynamoDBã«æå ¥ãããã¼ã¿ãOpenSearch Serviceã«åæãããä»çµã¿ã§ãã ã¤ãã³ããæ¾ã£ã¦Lambdaã§OpenSearchã«æå ¥ããå¦çãèªåã§æ¸ãå¿ è¦ãç¡ããªããããã³ã¼ãã£ã³ã°ã®é¢ã§ããªã½ã¼ã¹ç®¡çã®é¢ã§ã便å©ã«ãªãã¯ãã§ãã
以ä¸ã®ä½æ¥ã¯å ¨ã¦ã³ããã§å®è¡ã§ãã¾ãã(â»åé¤æé ãè¨è¼ãã¦ããã¾ã)
注æç¹
ãªã½ã¼ã¹ã¯èª²éããã¾ãã ãã¹ããçµãã£ããåé¤ãã¦ããã¾ãããã以ä¸ã®æé ãå®è¡ãã¦çºçããåé¡ã«ã¤ãã¦ãçè ã¯ä¸åã®è²¬ä»»ãåããã¨ãã§ãã¾ãããèªå·±è²¬ä»»ã§ãé¡ããã¾ãã
åèãªã³ã¯
AWSå ¬å¼ã®ç´¹ä»è¨äºã§ãã
Amazon DynamoDB の Amazon OpenSearch Service とのゼロ ETL 統合が利用可能になりました | Amazon Web Services ブログ
å ¬å¼ãã¥ã¼ããªã¢ã«ã§ãããã¡ãã¯GUIãã¼ã¹ã§ããæ¬è¨äºã§ã¯ãä¸ã®collection(serverless)çã®ãªã½ã¼ã¹ããAWS CLIã使ã£ã¦æ§ç¯ãã¾ãã
Tutorial: Ingesting data into a domain using Amazon OpenSearch Ingestion - Amazon OpenSearch Service
DynamoDB zero-ETL integration with Amazon OpenSearch Service - Amazon DynamoDB
AWS CLIã®åºæ¬ã¨ãªãå®è¡æé ã«ã¤ãã¦ã以ä¸ã®ã·ãªã¼ãºãåèã«ããã¦ããã ãã¦ãã¾ãã
ç°å¢
ãã¼ã¸ã§ã³ | |
---|---|
MacOS Sonoma | 14.4.1 |
AWS CLI | 2.15.34 |
awscurl | 0.33 |
å ¨ä½å
以ä¸ã®ãªã½ã¼ã¹ãä½ãã¾ãã
- Amazon S3
- Amazon DynamoDBã®Table
- Amazon OpenSearch Service ã® collection
- 3種ã®ããªã·ã¼
- Data access policies
- Encryption policies
- Network policies
- 3種ã®ããªã·ã¼
- Pipeline
- IAM Role
- IAM Policy : OpenSearchã¨DynamoDBã¸ã®ã¢ã¯ã»ã¹æ¨©
Pipelineã¯ä»¥ä¸ã®åãããã¾ãã
- DynamoDBã®ç£è¦(ãã¼ã¿ãæå ¥ããããã¨ãæç¥)
- OpenSearchã¸ã®ãã¼ã¿æå ¥/åé¤/æ´æ°
- S3ã¸ããã¯ã¢ãããªã©ãã¢ãããã¼ã
ã¾ããAmazon OpenSearch Serviceã¯ãªã½ã¼ã¹ãã¼ã¹ã®ããªã·ã¼ãæã¡ã¾ãã IAM Roleã§Amazon OpenSearch Serviceã¸ã®ã¢ã¯ã»ã¹ã許å¯ããã ãã§ã¯ä¸ååã§ãAmazon OpenSearch Serviceã® Data access policies ã§IAM Roleã«å¯¾ãã¦è¨±å¯ãåºãå¿ è¦ãããã¾ã(å¾è¿°)ã
0. äºåæºå
AWS CLIãå©ç¨ã§ããããã«ãã¦ããã¾ãã ã¾ããCLIãå®è¡ããã¦ã¼ã¶ã«å¿ è¦ãªæ¨©éãã¤ãã¦ããã¾ãã
ä½æãããªã½ã¼ã¹åãªã©ããå¤æ°ã§å®ç¾©ãã¦ããã¾ãã以ä¸ãã·ã§ã«ã§å®è¡ããå¾åã®æé ã«é²ãã§ãã ããã
export AWS_DEFAULT_REGION='ap-northeast-1' COLLECTION_NAME=ingestion-collection PIPELINE_NAME=serverless-ingestion TABLE_NAME=ingestion-table BUCKET_NAME="ingestion-dynamodb" BUCKET_ARN=arn:aws:s3:::${BUCKET_NAME} && echo $BUCKET_ARN PATH_PREFIX1="opensearch-export" PATH_PREFIX2="dynamodb-pipeline" IAM_POLICY_NAME=pipeline-policy IAM_ROLE_NAME=PipelineRole ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) && echo $ACCOUNT_ID COLLECTION_ARN="arn:aws:es:${AWS_DEFAULT_REGION}:${ACCOUNT_ID}:domain/${COLLECTION_NAME}" && echo $COLLECTION_ARN
1. S3ã¨DynamoDBã®ä½æ
S3ã®Bucketãä½æãã¾ãã
aws s3api create-bucket --bucket $BUCKET_NAME --create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION
å®äºç¢ºèªããã¾ããæå®ããååã®bucketãã§ãã¦ããã°æåã§ãã
aws s3 ls | grep $BUCKET_NAME
DynamoDBãä½æãã¾ãã ä»åã¯ãnameã¨ageãã£ã¼ã«ããæã¡ãã¹ã«ã¼ããããæå°ã«åºå®ãããã¼ãã«ãä½æãããã¨ã«ãã¾ãã(é©å½ã«å¤æ´ãã¦ã大ä¸å¤«ã§ã)
aws dynamodb create-table \ --table-name $TABLE_NAME \ --attribute-definitions \ AttributeName=name,AttributeType=S \ AttributeName=age,AttributeType=N \ --key-schema \ AttributeName=name,KeyType=HASH \ AttributeName=age,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=1,WriteCapacityUnits=1
å®äºç¢ºèªãå ¼ãã¦ããã¼ãã«ã®ARNãåå¾ãã¦ããã¾ãã
TABLE_ARN=$(aws dynamodb describe-table --table-name $TABLE_NAME --query Table.TableArn --output text) && echo $TABLE_ARN
PITR(Point-in-Time-Recovery)ã®æå¹åãè¡ãã¾ããOpenSearch Ingestionåæãã¼ã¿å©ç¨æã«å¿ è¦ã§ãã
aws dynamodb update-continuous-backups --table-name $TABLE_NAME --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true # ç¢ºèª aws dynamodb describe-continuous-backups --table-name $TABLE_NAME
DynamoDB StreamãNEW_IMAGEã«å¤æ´ãã¾ãã ( â»å¤æ´çºçæãæ°ããã¤ã¡ã¼ã¸ããã£ããã£ã§ããããã«ãªãã¾ãã)
aws dynamodb update-table --table-name $TABLE_NAME --stream-specification StreamEnabled=true,StreamViewType=NEW_IMAGE # ç¢ºèª aws dynamodb describe-table --table-name $TABLE_NAME --query Table.StreamSpecification
2. Pipelineã®Roleãä½æ
å ã«Roleã ãä½ãã¾ããPolicyã¯æé 4ã§ä½æãã¾ã(collectionãä½æãããã®IDãæã«å ¥ãã¦ããpolicyãä½æãããããã§ãã)
ã¾ã㯠Trust policy ããã¡ã¤ã«ã«ä¿åãã¦ããã¾ãã ããã®Roleã使ãã®ã¯osis-pipelines.amazonaws.comã§ãããã¨ç¤ºãããã®ãã®ã§ãã
IAM_ROLE_PRINCIPAL='osis-pipelines.amazonaws.com' FILE_IAM_ROLE_DOC="role-document.json" cat << EOF > ${FILE_IAM_ROLE_DOC} { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "${IAM_ROLE_PRINCIPAL}" }, "Effect": "Allow", "Sid": "" } ] } EOF cat ${FILE_IAM_ROLE_DOC}
ä¸è¨ã®Trust policyãæå®ãã¦Roleãä½æãã¾ãã
aws iam create-role --role-name $IAM_ROLE_NAME --assume-role-policy-document file://$FILE_IAM_ROLE_DOC
ä½æããRoleã確èªãã¾ãã
aws iam list-roles --query "Roles[?RoleName == '${IAM_ROLE_NAME}'].RoleName"
3. Amazon OpenSearch Collectionã®ä½æ
å°ãè¤éã§ããã以ä¸ã®ãªã½ã¼ã¹ãä½æãã¾ãã
- Data access policies
- ãªã½ã¼ã¹ããªã·ã¼ã§ããå ã»ã©ä½æããRoleã«ã¢ã¯ã»ã¹è¨±å¯ãåºãã¾ãã
- Encryption policies
- å¿ é ã§ããOpenSearch collectionä¿åãã¼ã¿ã®æå·åæ¹æ³ãæå®ãã¾ãã
- Network policies
- ä»åã¯Publicã¢ã¯ã»ã¹ã許å¯ãã¾ããAWSãã°ã¤ã³ã§ããã·ã¥ãã¼ããéããããã«ãªãã¾ãã
- collection
- ä»åã¯Domainã§ã¯ãªããOpenSearchã®serverlessçã使ãã¾ãã
ãã¤ã³ã: ä¸éãã¼ãã«ã®ãããªãªãã¸ã§ã¯ãã¯ããã¾ãããåã«ä½ãäºå®ã®collectionåãæå®ããå種ããªã·ã¼ãåãã£ã¦ä½æãã¦ãããã¨ã§ããªã·ã¼ãæå¹åãã¾ãã ç¹ã«Encryption policiesã¯å ã«ä½ã£ã¦ãããªãã¨ãcollectionãä½æãããã¨ãã§ãã¾ããã
Data access policiesã®ä½æ
policy documentããã¡ã¤ã«ã«ä¿åãã¦ããã¾ãã ä»åã¯CLIã¦ã¼ã¶ã¨å ã»ã©ä½æããRoleã許å¯ãã¾ããGUIã§ã確èªããããã°ãAWSã®ããã³ã³ã«ãã°ã¤ã³ãã¦ããã¦ã¼ã¶ã追å ã§æå®ãã¦ãã ããã(å¾ãã追å ãããã¨ãã§ãã¾ã)
FILE_ACCESS_POLICY_DOC="access-policy-document.json" CALLER_ARN=$(aws sts get-caller-identity --query Arn --output text) && echo $CALLER_ARN IAM_ROLE_ARN=$(aws iam get-role --role-name $IAM_ROLE_NAME --query Role.Arn --output text) && echo $IAM_ROLE_ARN cat << EOS > $FILE_ACCESS_POLICY_DOC [ { "Rules": [ { "Resource": [ "index/${COLLECTION_NAME}/*" ], "Permission": [ "aoss:CreateIndex", "aoss:UpdateIndex", "aoss:DescribeIndex", "aoss:ReadDocument", "aoss:WriteDocument" ], "ResourceType": "index" } ], "Principal": [ "${IAM_ROLE_ARN}", "${CALLER_ARN}" ], "Description": "Rule 1" } ] EOS cat $FILE_ACCESS_POLICY_DOC
Data access policiesãä½æãã¾ãã
詳ããã¯aws opensearchserverless create-access-policy help
ãã¿ã¦ãã ããã
ãªãã2024/06ç¾å¨ typeã¯data以å¤é¸æã§ãã¾ããã
ACCESS_POLICY_NAME=access-policy aws opensearchserverless create-access-policy --name $ACCESS_POLICY_NAME --policy file://$FILE_ACCESS_POLICY_DOC --type data
Encryption policiesã®ä½æ
policy documentããã¡ã¤ã«ã«ä¿åãã¦ããã¾ããä»åã¯AWSãæä¾ããkeyã使ãã®ã§ãAWSOwnedKeyãtrueã«ãã¾ãã
FILE_ENC_POLICY_DOC="access-policy-document.json" cat << EOS > $FILE_ENC_POLICY_DOC { "Rules": [ { "ResourceType": "collection", "Resource": [ "collection/${COLLECTION_NAME}" ] } ], "AWSOwnedKey": true } EOS cat $FILE_ENC_POLICY_DOC
Encryption policiesãä½æãã¾ãã ãããã«ããã§ããããã¡ãã¯create-security-policyã®APIã使ããtypeã¨ãã¦encryptionãæå®ãã¾ãã
ENC_POLICY_NAME=encryption-policy aws opensearchserverless create-security-policy --name $ENC_POLICY_NAME --policy file://$FILE_ENC_POLICY_DOC --type encryption
Network policiesã®ä½æ
Network policiesãä½æãã¾ãã policy documentãã¾ããã¡ã¤ã«ã«æ¸ãè¾¼ã¿ã¾ã
FILE_NET_POLICY_DOC="access-policy-document.json" cat << EOS > $FILE_NET_POLICY_DOC [ { "Rules": [ { "ResourceType": "dashboard", "Resource": [ "collection/${COLLECTION_NAME}"] }, { "ResourceType": "collection", "Resource": [ "collection/${COLLECTION_NAME}"] } ], "AllowFromPublic": true } ] EOS cat $FILE_NET_POLICY_DOC
Network policiesãä½æãã¾ãã ãããã«ããã§ããããã¡ãã¯create-security-policyã®APIã使ããtypeã¨ãã¦networkãæå®ãã¾ãã
NET_POLICY_NAME=network-policy aws opensearchserverless create-security-policy --name $NET_POLICY_NAME --policy file://$FILE_NET_POLICY_DOC --type network
Collectionãä½æãã¾ãã ãã¹ãç¨ãªã®ã§replicasã¯ç¡å¹ã«ãã¦ãtypeã¯SEARCHã«ãã¦ããã¾ãã
aws opensearchserverless create-collection --name $COLLECTION_NAME --standby-replicas DISABLED --type SEARCH
4. Policyã®ä½æ
pipelineã«ä»ä¸ããPolicyãä½æãã¾ãã
ã¾ãã¯å¿ è¦ãªæ¨©éãJSONã§è¨è¼ãããã¡ã¤ã«ã«ä¿åãã¦ããã¾ãã
COLLECTION_ID=$(aws opensearchserverless batch-get-collection --names $COLLECTION_NAME --query 'collectionDetails[].id' --output text) && echo $COLLECTION_ID FILE_IAM_POLICY_DOC="policy-document.json" cat << EOS > $FILE_IAM_POLICY_DOC { "Version": "2012-10-17", "Statement": [ { "Sid": "allowRunExportJob", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeContinuousBackups", "dynamodb:ExportTableToPointInTime" ], "Resource": [ "${TABLE_ARN}" ] }, { "Sid": "allowCheckExportjob", "Effect": "Allow", "Action": [ "dynamodb:DescribeExport" ], "Resource": [ "${TABLE_ARN}/export/*" ] }, { "Sid": "allowReadFromStream", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": [ "${TABLE_ARN}/stream/*" ] }, { "Sid": "allowReadAndWriteToS3ForExport", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "${BUCKET_ARN}/${PATH_PREFIX1}/*", "${BUCKET_ARN}/${PATH_PREFIX2}/*" ] }, { "Action": [ "aoss:BatchGetCollection", "aoss:APIAccessAll" ], "Effect": "Allow", "Resource": "arn:aws:aoss:${AWS_DEFAULT_REGION}:${ACCOUNT_ID}:collection/${COLLECTION_ID}" }, { "Action": [ "aoss:CreateSecurityPolicy", "aoss:GetSecurityPolicy", "aoss:UpdateSecurityPolicy" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "aoss:collection": "${COLLECTION_NAME}" } } } ] } EOS cat $FILE_IAM_POLICY_DOC
Policyãä½æãã¾ãã
aws iam create-policy --policy-name ${IAM_POLICY_NAME} --policy-document file://$FILE_IAM_POLICY_DOC
ä½æããPolicyã確èªãã¾ãã
IAM_POLICY_ARN="arn:aws:iam::${ACCOUNT_ID}:policy/${IAM_POLICY_NAME}" && echo $IAM_POLICY_ARN aws iam get-policy --policy-arn $IAM_POLICY_ARN
æé 2ã§ä½æããpipelineç¨ã®Roleã«ãPolicyãç´ã¤ãã¾ãã
aws iam attach-role-policy --role-name $IAM_ROLE_NAME --policy-arn $IAM_POLICY_ARN
Policyãç´ã¤ãã¦ãããã¨ã確èªãã¾ãã
aws iam list-attached-role-policies --role-name $IAM_ROLE_NAME
5. Pipelineã®ä½æ
ãã¡ãã®å ¬å¼ããã¥ã¡ã³ããåèã«ãã¦ãã ããã
Amazon OpenSearch Ingestion パイプラインの作成 - Amazon OpenSearch サービス
Pipelineã®ETLå¦çã«å½ããé¨åã¯ymlã§å®ç¾©ãã¾ãã0ããè¨è¼ããã®ã¯å¤§å¤ãªã®ã§ãå ¬å¼ãç¨æãã¦ããblueprintã使ãã¾ãã blueprintã®ä¸è¦§ã確èªããDynamoDBã®ååãå ¥ã£ã¦ãããã®ãæ¢ãã¾ãã
aws osis list-pipeline-blueprints
AWS-DynamoDBChangeDataCapturePipeline
ã使ãã¾ãããã
blueprintãæã«å ¥ãã¾ãã
aws osis get-pipeline-blueprint --blueprint-name AWS-DynamoDBChangeDataCapturePipeline --query Blueprint.PipelineConfigurationBody --output text > blueprint.yml
blueprintãå ã«ãETL(DynamoDBã®ãã¼ãã«ã®ä¸èº«ãOpenSearchã«ã³ãã¼ãã)ã«å¿ è¦ãªæ å ±ãè¨å®ãã¦ããã¾ãã
hostsã®è¨å®å 容ã«ã¤ãã¦ã¯ãcollectionãä½æå®äºããendpointãæã«å ¥ãã¾ã§ãã°ããå¾ ã¡ã¾ãã 以ä¸ã®ã³ãã³ããCREATINGã ã¨ãendpointãå¾ããã¾ãããACTIVEã«ãªãã¾ã§å¾ ã¡ã¾ãã
aws opensearchserverless batch-get-collection --names $COLLECTION_NAME --query 'collectionDetails[].status'
collectionãå®äºãã¦ããã°ã以ä¸ã使ã£ã¦ymlãæ¸ãã¦ãOKã§ãã(blueprintãç·¨éããå¾ã®å 容ä¾ã§ãã)
TABLE_ARN=$(aws dynamodb describe-table --table-name $TABLE_NAME --query Table.TableArn --output text) && echo $TABLE_ARN IAM_ROLE_ARN=$(aws iam get-role --role-name $IAM_ROLE_NAME --query Role.Arn --output text) && echo $IAM_ROLE_ARN HOST=$(aws opensearchserverless batch-get-collection --names $COLLECTION_NAME --query 'collectionDetails[].collectionEndpoint' --output text) && echo $HOST FILE_INGESTION_DOCUMENT=injestion.yml cat << EOS > $FILE_INGESTION_DOCUMENT version: "2" dynamodb-pipeline: source: dynamodb: acknowledgments: true tables: - table_arn: "${TABLE_ARN}" stream: start_position: "LATEST" export: s3_bucket: "${BUCKET_NAME}" s3_region: "${AWS_DEFAULT_REGION}" s3_prefix: "${PATH_PREFIX1}/" aws: sts_role_arn: "${IAM_ROLE_ARN}" region: "${AWS_DEFAULT_REGION}" sink: - opensearch: hosts: [ "${HOST}" ] index: "\${getMetadata(\"table_name\")}" index_type: custom normalize_index: true document_id: "\${getMetadata(\"primary_key\")}" action: "\${getMetadata(\"opensearch_action\")}" document_version: "\${getMetadata(\"document_version\")}" document_version_type: "external" aws: sts_role_arn: "${IAM_ROLE_ARN}" region: "${AWS_DEFAULT_REGION}" serverless: true dlq: s3: bucket: "${BUCKET_NAME}" key_path_prefix: "${PATH_PREFIX2}/dlq" region: "${AWS_DEFAULT_REGION}" sts_role_arn: "${IAM_ROLE_ARN}" EOS cat $FILE_INGESTION_DOCUMENT
ãã¤ãã©ã¤ã³ãä½æãã¾ãã min/max-unitã¯èªã¿æ¸ãã®capacityã§ãæéãããã®èª²éã«å½±é¿ãã¾ãã OpenSearch Compute Unit (OCU)ã¨è¨ãããåä½ã§ãã
aws osis create-pipeline \ --pipeline-name $PIPELINE_NAME \ --min-units 1\ --max-units 2\ --pipeline-configuration-body file://${FILE_INGESTION_DOCUMENT}
ãã¡ããä½æã«æéãæ°åãããã¾ãã
6. ãã¹ãå®è¡
DynamoDBã«ãã¼ã¿ãæå ¥ãã¦ã¿ã¾ãã
aws dynamodb put-item \ --table-name $TABLE_NAME \ --item '{"name": {"S": "saki"}, "age": {"N": "16"}, "height": {"N": "152"}}' aws dynamodb put-item \ --table-name $TABLE_NAME \ --item '{"name": {"S": "temari"}, "age": {"N": "15"}, "height": {"N": "162"}}' aws dynamodb put-item \ --table-name $TABLE_NAME \ --item '{"name": {"S": "kotone"}, "age": {"N": "15"}, "height": {"N": "156"}}'
OpenSearchã確èªãã¾ããåæ ãããã¾ã§ãå°ãæéããããããããã¾ããã
awscurl --service aoss --region $AWS_DEFAULT_REGION -X GET ${HOST}/_cat/indices awscurl --service aoss --region $AWS_DEFAULT_REGION -X GET ${HOST}/${TABLE_NAME}/_search | jq .
以ä¸ã®ããã«ãDynamoDBã«æå ¥ãããã¼ã¿ãOpenSearchã«åæ ããã¦ããã°æåã§ãï¼
{ "took": 1494, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "ingestion-table", "_id": "temari|15", "_score": 1, "_source": { "name": "temari", "age": 15, "height": 162 } }, { "_index": "ingestion-table", "_id": "kotone|15", "_score": 1, "_source": { "name": "kotone", "age": 15, "height": 156 } }, { "_index": "ingestion-table", "_id": "saki|16", "_score": 1, "_source": { "name": "saki", "age": 16, "height": 152 } } ] } }
ãªã½ã¼ã¹ã®åé¤
以ä¸ã®é ã«ãªã½ã¼ã¹ãåé¤ãã¦ããã¾ãã
Pipeline
aws osis delete-pipeline --pipeline-name $PIPELINE_NAME
Amazon OpenSearch Service Collection
COLLECTION_ID=$( aws opensearchserverless list-collections --query "collectionSummaries[?name=='${COLLECTION_NAME}'].id" --output text) && $COLLECTION_ID aws opensearchserverless delete-collection --id $COLLECTION_ID
Amazon OpenSearch Service 3種ã®ããªã·ã¼
aws opensearchserverless delete-access-policy --name $ACCESS_POLICY_NAME --type data aws opensearchserverless delete-security-policy --name $ENC_POLICY_NAME --type encryption aws opensearchserverless delete-security-policy --name $NET_POLICY_NAME --type network
Amazn DynamoDB
aws dynamodb delete-table --table-name $TABLE_NAME
Amazn S3
aws s3 rm s3://$BUCKET_NAME --recursive aws s3api delete-bucket --bucket $BUCKET_NAME
Pipelineã«ä»ä¸ãã¦ããPolicyã¨Role
aws iam detach-role-policy --role-name $IAM_ROLE_NAME --policy-arn $IAM_POLICY_ARN aws iam delete-policy --policy-arn $IAM_POLICY_ARN aws iam delete-role --role-name $IAM_ROLE_NAME
ä½è«: ChatGPT 㨠AWS CLI
AWS CLI ã CDK ã¯ChatGPTã¨ç¸æ§ããããæ示ãé©åã§ããã°ãªã½ã¼ã¹ä½æã«ããã¦ã¨ã¦ã便å©ã§ããããããè¤æ°ã®ãªã½ã¼ã¹ãçµã¿åãããæ£ç¢ºãªæ§ææé ãä¸åº¦ã«åºåããã®ã¯ã¾ã ã¾ã é£ããããã§ãã
å人çã«ChatGPTã便å©ã ã¨æããã®ã¯ä»¥ä¸ã®ã±ã¼ã¹ã§ãã
- 1ãªã¯ã¨ã¹ãåä½ã§ã®è³ªå(nameãxxã¨ããs3ãã±ãããä½ãæ¹æ³ãæãã¦ããªã©)
--query
ãã©ã¡ã¼ã¿ã®è¨è¿°æ¹æ³ã質åãã- ãªã½ã¼ã¹ä½æãã°ãä¸ããããããã®ãªã½ã¼ã¹ã®åé¤æ¹æ³ãæãã¦ã
AWS CLI ã CDK ã¯ãªã½ã¼ã¹ã®ä½ææé ãæ®ããã¨è¨ãæå³ã§éå®ãã¦ãã¾ããããã©ã¡ã¼ã¿ãªã©ã調ã¹ãã®ãããé¢åã§ãã å人çã«ã¯aws cliã®ãã«ãã¨CDKã®äºæ¸¬å¤æã¨ããã¥ã¡ã³ã(typescript)ãä½µç¨ãã¤ã¤ãChatGPTã«è³ªåããªããæçµçã«CDKã®ã³ã¼ãã«è½ã¨ãè¾¼ãã®ãä¸çªæ¥½ã ã¨æãã¦ãã¾ãã
ã¾ã¨ã
Amazon Dynamodbã¨Amazon OpenSearch Serviceã®zero-ETL integrationãAWS CLIã§æ§ç¯ããæé ãã¾ã¨ãã¾ããã AWSã¯ãªã½ã¼ã¹ãè²ã ãã£ã¦ãããããã§ãããGUIã®ãã¥ã¼ããªã¢ã«ãããªããå¾ã«åããã®ãCLIã§æ§ç¯ãããã¼ãã«ã¾ã¨ãã¦ããã¨ç解ãæ·±ã¾ãã¨æã£ã¦ãã¾ãã CDKã¯CLIã¨åãAPIã®ä¸ã«ä½ããã¦ããã®ã§ãå¾ã CDKãè¨è¿°ããæã楽ã«ãªãã¾ãã