aws-amplify / aws-amplify/amplify-hosting

amplify import auth causes build failure - auth headless init is missing the following inputParams userPoolId, webClientId, nativeClientId

Open
#1,271 61 comments 32 reactions 0 assignees View on GitHub
Dominant language
Dockerfile
Stars
481
Forks
123
PR merge metrics
No merged PRs in 30d

Description

Hi,

I used `amplify import auth` to import an existing Cognito UserPool into my project. I committed my code to git and pushed, which kicked off an Amplify Console pipeline, the build of the backend failed with the following error message.
`Error: auth headless init is missing the following inputParams userPoolId, webClientId, nativeClientId`

Since `amplify push` worked fine from the local machine, I expected the build and deployment in the amplify console to work fine as well.

In [this Issue](https://github.com/aws-amplify/amplify-console/issues/206), you will see similar errors for parameters such as facebookAppId, amazonAppId, googleClientId, etc. They had added these parameters as environment variables to amplifyPush.sh. So I added error inputParams as environment variables and the build was successful.

This problem occurs only when I do `amplify import auth` (not `amplify add auth`).
Is it because the environment variables in the shell script are missing, i.e., the shell script does not yet support import auth? Or are there other possible causes?

Here is the actual script (myamplifyPush.sh) that I used.

```diff
#!/usr/bin/env bash
set -e
IFS='|'

help_output () {
echo "usage: amplify-push <--environment|-e > <--simple|-s>"
echo " --environment The name of the Amplify environment to use"
echo " --simple Optional simple flag auto-includes stack info from env cache"
exit 1
}

init_env () {
ENV=$1
AMPLIFY=$2
PROVIDERS=$3
CODEGEN=$4
AWSCONFIG=$5
CATEGORIES=$6

echo "# Start initializing Amplify environment: ${ENV}"
if [[ -z ${STACKINFO} ]];
then
echo "# Initializing new Amplify environment: ${ENV} (amplify init)"
[[ -z ${CATEGORIES} ]] && amplify init --amplify ${AMPLIFY} --providers ${PROVIDERS} --codegen ${CODEGEN} --yes || amplify init --amplify ${AMPLIFY} --providers ${PROVIDERS} --codegen ${CODEGEN} --categories ${CATEGORIES} --yes
echo "# Environment ${ENV} details:"
amplify env get --name ${ENV}
else
echo "STACKINFO="${STACKINFO}
echo "# Importing Amplify environment: ${ENV} (amplify env import)"
amplify env import --name ${ENV} --config "${STACKINFO}" --awsInfo ${AWSCONFIG} --yes;
echo "# Initializing existing Amplify environment: ${ENV} (amplify init)"
[[ -z ${CATEGORIES} ]] && amplify init --amplify ${AMPLIFY} --providers ${PROVIDERS} --codegen ${CODEGEN} --yes || amplify init --amplify ${AMPLIFY} --providers ${PROVIDERS} --codegen ${CODEGEN} --categories ${CATEGORIES} --yes
echo "# Environment ${ENV} details:"
amplify env get --name ${ENV}
fi
echo "# Done initializing Amplify environment: ${ENV}"
}

ENV=""
IS_SIMPLE=false
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"
case ${key} in
-e|--environment)
ENV=$2
shift
;;
-r|--region)
REGION=$2
shift
;;
-s|--simple)
IS_SIMPLE=true
shift
;;
*)
POSITIONAL+=("$1")
shift
;;
esac
done
set -- "${POSITIONAL[@]}"

# if no provided environment name, use default env variable, then user override
if [[ ${ENV} = "" ]];
then
ENV=${AWS_BRANCH}
fi

if [[ ${USER_BRANCH} != "" ]];
then
ENV=${USER_BRANCH}
fi

# strip slashes, limit to 10 chars
ENV=$(echo ${ENV} | sed 's;\\;;g' | sed 's;\/;;g' | cut -c -10)

# Check valid environment name
if [[ -z ${ENV} || "${ENV}" =~ [^a-zA-Z0-9\-]+ ]] ; then help_output ; fi

AWSCONFIG="{\
\"configLevel\":\"project\",\
\"useProfile\":true,\
\"profileName\":\"default\",\
\"AmplifyAppId\":\"${AWS_APP_ID}\"\
}"
AMPLIFY="{\
\"envName\":\"${ENV}\",\
\"appId\":\"${AWS_APP_ID}\"\
}"
PROVIDERS="{\
\"awscloudformation\":${AWSCONFIG}\
}"
CODEGEN="{\
\"generateCode\":false,\
\"generateDocs\":false\
}"
CATEGORIES=""
if [[ -z ${AMPLIFY_FACEBOOK_CLIENT_ID} && -z ${AMPLIFY_GOOGLE_CLIENT_ID} && -z ${AMPLIFY_AMAZON_CLIENT_ID} ]]; then
- CATEGORIES=""
+ AUTHCONFIG="{\
+ \"userPoolId\":\"${AMPLIFY_USERPOOL_ID}\",\
+ \"webClientId\":\"${AMPLIFY_WEBCLIENT_ID}\",\
+ \"nativeClientId\":\"${AMPLIFY_NATIVECLIENT_ID}\"\
+ }"
+ CATEGORIES="{\
+ \"auth\":$AUTHCONFIG\
+ }"
else
AUTHCONFIG="{\
\"facebookAppIdUserPool\":\"${AMPLIFY_FACEBOOK_CLIENT_ID}\",\
\"facebookAppSecretUserPool\":\"${AMPLIFY_FACEBOOK_CLIENT_SECRET}\",\
\"googleAppIdUserPool\":\"${AMPLIFY_GOOGLE_CLIENT_ID}\",\
\"googleAppSecretUserPool\":\"${AMPLIFY_GOOGLE_CLIENT_SECRET}\",\
\"amazonAppIdUserPool\":\"${AMPLIFY_AMAZON_CLIENT_ID}\",\
\"amazonAppSecretUserPool\":\"${AMPLIFY_AMAZON_CLIENT_SECRET}\"\
}"
CATEGORIES="{\
\"auth\":$AUTHCONFIG\
}"
fi
# Handle old or new config file based on simple flag
if [[ ${IS_SIMPLE} ]];
then
echo "# Getting Amplify CLI Cloud-Formation stack info from environment cache"
export STACKINFO="$(envCache --get stackInfo)"
init_env ${ENV} ${AMPLIFY} ${PROVIDERS} ${CODEGEN} ${AWSCONFIG} ${CATEGORIES}
echo "# Store Amplify CLI Cloud-Formation stack info in environment cache"
STACKINFO="$(amplify env get --json --name ${ENV})"
envCache --set stackInfo ${STACKINFO}
echo "STACKINFO="${STACKINFO}
else
# old config file, above steps performed outside of this script
init_env ${ENV} ${AMPLIFY} ${PROVIDERS} ${CODEGEN} ${AWSCONFIG} ${CATEGORIES}
fi
```
In addition, I added three environment variables to the Amplify Console (AMPLIFY_USERPOOL_ID, AMPLIFY_WEBCLIENT_ID, and AMPLIFY_NATIVECLIENT_ID) and wrote `amplify.yml` as follows
```diff
backend:
phases:
build:
commands:
- - '# Execute Amplify CLI with the helper script'
- - amplifyPush --simple
+ - chmod u+x ./myamplifyPush.sh
+ - ./myamplifyPush.sh
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: dist
files:
- '**/*'
cache:
paths:
- node_modules/**/*
```

Any insight is always appreciated.

Contributor guide

Open the contributing guide

Research direction

Start with the reported error from `amplify import auth` in the Amplify Console pipeline, then compare the default `amplifyPush` flow with `myamplifyPush.sh` and the backend commands in `amplify.yml`. Reproduce the failure with the listed auth inputs and determine whether the pipeline handles imported auth configuration; done means the documented or implemented flow succeeds without the custom environment-variable workaround.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, shell
Domain
ci-cd, cloud
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.