自动化AWS账户之间的AWS Connect联系流程



是否有人有任何经验或能够自动创建AWS连接帐户之间的联系流?那么aws账户a中的联系人流,以及在aws账户b中创建的联系人流吗?我们一直在通过GUI手动执行此操作,导出联系人流,然后在其他aws帐户中导入,然后必须为其中可能引用的lamdba、lex bots或其他流更新它?

我创建了一个bash脚本,它也进行了一些地形化,我发现虽然它适用于一些简单的接触流,但不适用于其他引用其中其他接触流的人;

DEV_INSTANCE_ID=
STAGING_INSTANCE_ID=
PROD_INSTANCE_ID=
LEX_D=awln_lex_d
LEX_S=awln_lex_s
LEX_P=awln_lex_p
REGION=eu-west-2
DIR=
ACCOUNT_D=d-connect
ACCOUNT_S=s-connect
ACCOUNT_P=p-connect
ACCOUNT_ID_D=
ACCOUNT_ID_S=
ACCOUNT_ID_P=
#Questions to be asked for contact flow
read -p "Please state what contact flow (exact name) you would like to export from dev (d-connect): " export
read -p "Which account would you like this contact flow created in? (d-connect or s-connect): " account
read -p "Please give a description of the contact flow: " description
read -p "What type of contact flow is this (CONTACT_FLOW, CUSTOMER_QUEUE, CUSTOMER_HOLD, CUSTOMER_WHISPER, AGENT_HOLD, AGENT_WHISPER, OUTBOUND_WHISPER, AGENT_TRANSFER, QUEUE_TRANSFER): " contact_flow
# aws cli commands
cli_commands () {
CLI=$(aws connect list-contact-flows --instance-id $DEV_INSTANCE_ID --profile $ACCOUNT_D --region $REGION | grep -C 2 $export | grep Id | awk '{print $2 }' | tr -d ",)
aws connect describe-contact-flow --instance-id $DEV_INSTANCE_ID --contact-flow-id $CLI  --profile $ACCOUNT_D --region $REGION | jq '.ContactFlow.Content | fromjson' > $export.json
}
main () {
if [ "$account" == "$ACCOUNT_S" ];
then
echo "cloning repo"
git clone 
cd /contact-flow-automation/$account/
mv $DIR/$export.json $DIRcontact-flow-automation/$account/
sed -i "s/$ACCOUNT_ID_D/$ACCOUNT_ID_S/g" $DIR/contact-flow-automation/$account/$export.json
sed -i "s/$LEX_D/$LEX_S/g" $DIR/contact-flow-automation/$account/$export.json
sed -i "s/$DEV_INSTANCE_ID/$STAGING_INSTANCE_ID/g" $DIR/contact-flow-automation/$account/$export.json
cat << EOF >> $DIR/contact-flow-automation/$account/main.tf
resource "aws_connect_contact_flow" "$export" {
instance_id  = "$STAGING_INSTANCE_ID"
name         = "$export"
description  = "$description"
type         = "$contact_flow"
filename     = "$export.json"
content_hash = filebase64sha256("$export.json")
}
EOF
terraform init
echo yes | terraform apply --var-file=terraform.tfvars
git add .
git commit -m "automation update for contact flow $export to $account"
git push origin main
elif [ "$account" == "$ACCOUNT_P" ];
then
echo "cloning repo"
git clone 
cd contact-flow-automation/$account/
mv $DIR/$export.json $DIR/contact-flow-automation/$account/
sed -i "s/$ACCOUNT_ID_D/$ACCOUNT_ID_P/g" $DIR/contact-flow-automation/$account/$export.json
sed -i "s/$LEX_D/$LEX_P/g" $DIR/contact-flow-automation/$account/$export.json
sed -i "s/$DEV_INSTANCE_ID/$PROD_INSTANCE_ID/g" $DIR/contact-flow-automation/$account/$export.json
cat << EOF >> $DIR/contact-flow-automation/$account/main.tf
resource "aws_connect_contact_flow" "$export" {
instance_id  = "$PROD_INSTANCE_ID"
name         = "$export"
description  = "$description"
type         = "$contact_flow"
filename     = "$export.json"
content_hash = filebase64sha256("$export.json")
}
EOF
terraform init
echo yes | terraform apply --var-file=terraform.tfvars
git add .
git commit -m "automation update for contact flow $export to $account"
git push origin main
fi
}
cli_commands
main
echo "You need to save/publish the $export contact flow"

因此,问题有时是terraform失败,因为它是一个特定的流,包含对另一个流的引用,并且.json中的ID不正确。只是想知道是否有人能够自动完成这项工作?

感谢

我终于有了一个脚本来实现这一点,这将查看您试图导出/导入的流中的其他联系人流,并获取其ID和任何队列。

#!/bin/bash
DEV_INSTANCE_ID=
STAGING_INSTANCE_ID=
PROD_INSTANCE_ID=
LEX_D=awln_lex_d
LEX_S=awln_lex_s
LEX_P=awln_lex_p
REGION=eu-west-2
DIR=
ACCOUNT_D=d-connect
ACCOUNT_S=s-connect
ACCOUNT_P=p-connect
ACCOUNT_ID_D=
ACCOUNT_ID_S=
ACCOUNT_ID_P=
#Questions to be asked for contact flow
read -p "Please state what contact flow (exact name) you would like to 
export from dev (d-connect): " export
read -p "Which account would you like this contact flow created in? (d-connect , s-connect or p-connect): " account
read -p "Please give a description of the contact flow: " description
# aws cli commands
cli_commands () {
CLI=$(aws connect list-contact-flows --instance-id $DEV_INSTANCE_ID -- 
profile $ACCOUNT_D --region $REGION | grep -C 2 $export | grep Id | awk 
'{print $2 }' | tr -d ",)
aws connect describe-contact-flow --instance-id $DEV_INSTANCE_ID -- 
contact-flow-id $CLI  --profile $ACCOUNT_D --region $REGION | jq 
'.ContactFlow.Content | fromjson' > $export.json
aws connect list-contact-flows --instance-id $DEV_INSTANCE_ID --profile 
$ACCOUNT_D --region $REGION >> dev-contact-flows.json
aws connect list-contact-flows --instance-id $STAGING_INSTANCE_ID -- 
profile $ACCOUNT_S --region $REGION >> staging-contact-flows.json
aws connect list-contact-flows --instance-id $PROD_INSTANCE_ID --profile 
$ACCOUNT_P --region $REGION >> prod-contact-flows.json
aws connect list-queues --instance-id $DEV_INSTANCE_ID --profile 
$ACCOUNT_D --region $REGION >> dev-queues.json
aws connect list-queues --instance-id $STAGING_INSTANCE_ID --profile 
$ACCOUNT_S --region $REGION >> staging-queues.json
aws connect list-queues --instance-id $PROD_INSTANCE_ID --profile 
$ACCOUNT_P --region $REGION >> prod-queues.json
CL_TYPE=$(jq -r --arg export $export 
'.ContactFlowSummaryList[]|select(.Name==$export).ContactFlowType' dev- 
contact-flows.json )
grep -wA 2 "ContactFlow" $export.json | grep text | awk '{print$2}' | tr 
-d " | sort -u >> contact-flows.txt 
grep -wA 2 "queue" $export.json | grep text | awk '{print $2" "$3}' | tr 
-d " | sort -u >> queues.txt
}
queues () {
cat queues.txt | while read -r LINE; do
jq --arg LINE "$LINE" -r '.QueueSummaryList[]| select(.Name==$LINE).Id' 
dev-queues.json >> dev-queues-id.txt 
done
cat queues.txt | while read -r LINE; do
jq --arg LINE "$LINE" -r '.QueueSummaryList[]| select(.Name==$LINE).Id' 
staging-queues.json >> staging-queues-id.txt
done
cat queues.txt | while read -r LINE; do
jq --arg LINE "$LINE" -r '.QueueSummaryList[]| select(.Name==$LINE).Id' 
prod-queues.json >> prod-queues-id.txt
done
}
contact_flows () {
cat contact-flows.txt | while read LINE; do
jq --arg LINE $LINE -r '.ContactFlowSummaryList[]| 
select(.Name==$LINE).I 
d' dev-contact-flows.json >> dev-contact-flow-ids.txt
done
cat contact-flows.txt | while read LINE; do
jq --arg LINE $LINE -r '.ContactFlowSummaryList[]| 
select(.Name==$LINE).Id' staging-contact-flows.json >> staging-contact- 
flow-ids.txt
done
cat contact-flows.txt | while read LINE; do
jq --arg LINE $LINE -r '.ContactFlowSummaryList[]| 
select(.Name==$LINE).Id' prod-contact-flows.json >> prod-contact-flow- 
ids.txt
done
}
main () {
if [ "$account" == "$ACCOUNT_S" ];
then
paste dev-contact-flow-ids.txt staging-contact-flow-ids.txt >>  
combined-contact-flows.txt
cat combined-contact-flows.txt | while read LINE1 LINE2; do 
sed -i "s/$LINE1/$LINE2/g" $export.json
done
paste dev-queues-id.txt staging-queues-id.txt >> combined-queues.txt
cat combined-queues.txt | while read LINE1 LINE2; do 
sed -i "s/$LINE1/$LINE2/g" $export.json
done
echo "cloning repo"
git clone git@github.com:
cd /contact-flow-automation/$account/
mv $DIR/$export.json $DIR/contact-flow- 
automation/$account/
sed -i -e "s/$ACCOUNT_ID_D/$ACCOUNT_ID_S/g" -e "s/$LEX_D/$LEX_S/g" -e 
"s/$DEV_INSTANCE_ID/$STAGING_INSTANCE_ID/g" $DIR/ 
contact-flow-automation/$account/$export.json
cat << EOF >> $DIR/contact-flow-automation/$account/main.tf
resource "aws_connect_contact_flow" "$name" {
instance_id  = "$STAGING_INSTANCE_ID"
name         = "$export"
description  = "$description"
type         = "$CL_TYPE"
filename     = "$export.json"
content_hash = filebase64sha256("$export.json")
}
EOF
terraform init
terraform apply --var-file=terraform.tfvars -auto-approve
git add .
git commit -m "automation update for contact flow $export to $account"
git push origin main
elif [ "$account" == "$ACCOUNT_P" ];
then
paste dev-contact-flow-ids.txt prod-contact-flow-ids.txt >>  combined- 
contact-flows.txt
cat combined-contact-flows.txt | while read LINE1 LINE2; do 
sed -i "s/$LINE1/$LINE2/g" $export.json
done
paste dev-queues-id.txt prod-queues-id.txt >> combined-queues.txt
cat combined-queues.txt | while read LINE1 LINE2; do 
sed -i "s/$LINE1/$LINE2/g" $export.json
done
echo "cloning repo"
git clone git@github.com:
cd contact-flow-automation/$account/
mv $DIR/$export.json $DIR/contact-flow-automation/$account/
sed -i -e "s/$ACCOUNT_ID_D/$ACCOUNT_ID_P/g" -e "s/$LEX_D/$LEX_P/g" -e 
"s/$DEV_INSTANCE_ID/$PROD_INSTANCE_ID/g" $DIR/contact-flow- 
automation/$account/$export.json
cat << EOF >> $DIR/contact-flow-automation/$account/main.tf
resource "aws_connect_contact_flow" "$export" {
instance_id  = "$PROD_INSTANCE_ID"
name         = "$export"
description  = "$description"
type         = "$CL_TYPE"
filename     = "$export.json"
content_hash = filebase64sha256("$export.json")
}
EOF
terraform init
terraform apply --var-file=terraform.tfvars -auto-approve 
git add .
git commit -m "automation update for contact flow $export to $account"
git push origin main
fi
}
cli_commands
queues
contact_flows
main
#clean-up
cd $DIR
rm -rf dev-contact-flows.json staging-contact-flows.json prod-contact- 
flows.json dev-queues.json staging-queues.json prod-queues.json contact- 
flows.txt queues.txt dev-queues-id.txt staging-queues-id.txt prod- 
queues-id.txt dev-contact-flow-ids.txt staging-contact-flow-ids.txt 
prod-contact-flow-ids.txt combined-contact-flows.txt combined-queues.txt 
echo "You need to save/publish the $export contact flow"

最新更新