追記: 以下の記事の方法を使った方が楽かも。
Terraformを普通に使うとAssumeRole + MFAが面倒なので、ラッパースクリプトを書いた。
これを ~/bin/mfa_terraform
とかに置けば良い。
#!/bin/bash set -e # It generates json referring to the processing of `AssumeRoleCredentialFetcher` and `_create_cache_key`. # # memo: # * https://github.com/boto/botocore/blob/1.12.162/botocore/credentials.py#L611 # * https://github.com/boto/botocore/blob/1.12.162/botocore/credentials.py#L690-L692 ROLE_ARGS=$(cat - << EOS {"RoleArn": "$(aws configure get role_arn)", "SerialNumber": "$(aws configure get mfa_serial)"} EOS ) CACHE_KEY=$(echo -n "$ROLE_ARGS" | openssl sha1) CACHE_PATH="$HOME/.aws/cli/cache/$CACHE_KEY.json" if [ -e "$CACHE_PATH" ]; then EXPIRATION=$(cat "$CACHE_PATH" | jq --raw-output .Credentials.Expiration) EXPIRATION_UNIX=$(date -u -jf %FT%TZ $EXPIRATION +%s) NOW_UNIX=$(date +%s) if [ $EXPIRATION_UNIX -lt $NOW_UNIX ]; then aws sts get-caller-identity > /dev/null fi else aws sts get-caller-identity > /dev/null fi export AWS_ACCESS_KEY_ID=$(cat $CACHE_PATH | jq -r .Credentials.AccessKeyId) export AWS_SECRET_ACCESS_KEY=$(cat $CACHE_PATH | jq -r .Credentials.SecretAccessKey) export AWS_SESSION_TOKEN=$(cat $CACHE_PATH | jq -r .Credentials.SessionToken) terraform $*
aws-cliと同じく、AWS_PROFILEの環境変数で簡単に切り替えできます。
$ AWS_PROFILE=foo_stg mfa_terraform plan
OSSはコード読んで頑張れば、頑張れるので便利。