codecatalyst-runner/pkg/workflows/aws_environment.go (30 lines of code) (raw):
package workflows
import (
"context"
"github.com/aws/codecatalyst-runner-cli/command-runner/pkg/runner"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/rs/zerolog/log"
)
// AWSEnvironment is a feature that will assume a role in AWS.
func AWSEnvironment(profile string) runner.Feature {
return func(ctx context.Context, plan runner.Plan, e runner.PlanExecutor) error {
log.Ctx(ctx).Debug().Msg("ENTER AWSEnvironment")
if plan.EnvironmentConfiguration().Env == nil {
plan.EnvironmentConfiguration().Env = make(map[string]string)
}
env := plan.EnvironmentConfiguration().Env
cfg, err := config.LoadDefaultConfig(ctx, config.WithSharedConfigProfile(profile))
if err != nil {
return err
}
credentials, err := cfg.Credentials.Retrieve(ctx)
if err != nil {
return err
}
env["AWS_ACCESS_KEY_ID"] = credentials.AccessKeyID
env["AWS_SECRET_ACCESS_KEY"] = credentials.SecretAccessKey
env["AWS_SESSION_TOKEN"] = credentials.SessionToken
err = e(ctx)
log.Ctx(ctx).Debug().Msg("EXIT AWSEnvironment")
return err
}
}