Вы можете извлечь это в файл bash и затем использовать source <bash-file>.sh
на каждом этапе.
Например, вы можете вызвать файл init.sh
и иметь следующее содержимое:
#!/usr/bin/env bash
unset AWS_SESSION_TOKEN
unset AWS_SESSION_TOKEN
unset AWS_SECRET_ACCESS_KEY
unset AWS_ACCESS_KEY_ID
CREDENTIALS=`aws sts assume-role --role-arn arn:aws:iam::0123456789123:role/POGI --role-session-name RoleSession`
export AWS_ACCESS_KEY_ID=`echo $CREDENTIALS | jq -r '.Credentials.AccessKeyId'`
export AWS_SECRET_ACCESS_KEY=`echo $CREDENTIALS | jq -r '.Credentials.SecretAccessKey'`
export AWS_SESSION_TOKEN=`echo $CREDENTIALS | jq -r '.Credentials.SessionToken'`
Например, таким образом этап CHECK AVAILABLE BEANSTALK PLATFORMS
станет следующим:
source init.sh
aws elasticbeanstalk describe-environment-resources --environment-name pogi
aws elasticbeanstalk list-platform-versions
И если на разных этапах есть переменные, вы можете использовать что-то вроде source init.sh var1 var2
и var1
будет $1
в init.sh
и var2
будет $2
.
В качестве отступления, вы можете избавиться от jq
dep и просто использовать awk
вместо этого.Это для MFA (но тот же подход может быть использован для предположительной роли) с использованием формата AWS text
вместо JSON.
# output format "CREDENTIALS <spaces> <access-key-id> <expiry> <secret-access-key> <session-token>"
CREDENTIALS=`aws sts get-session-token --output text \
--serial-number <mfa-arn> \
--token-code <otp> \
--duration-seconds 43200`
export AWS_ACCESS_KEY_ID=$(echo $CREDENTIALS | awk '{print $2}')
export AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | awk '{print $4}')
export AWS_SESSION_TOKEN=$(echo $CREDENTIALS | awk '{print $5}')