AWS Amplify JavaScript Gitpod 自动设置
AWS Amplify JavaScript Gitpod automatic setup
我正在尝试使用 Gitpod 设置 AWS Amplify JavaScript 项目,这样当我启动一个新的工作区时,我不必手动完成 amplify-cli
步骤(添加 IAM 用户、生成 aws-exports.js
文件等)。
到目前为止,我已经在机器上成功 install aws-cli
和 amplify-cli
(我将其添加到任务初始化时的 .gitpod.yml
文件中)
$ npm install @aws-amplify/cli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
所以我可以添加
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_DEFAULT_REGION=us-west-2
环境变量到 gitpod variables,但是当 运行 例如 amplify pull
我看不到 [default] 用户,就像我通常 运行 它时那样本地设置。
我已经开始工作了,首先我使用 Gitpod account settings:
为 amplify
设置添加了这些环境变量
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_DEFAULT_REGION=us-west-2
AWS_AMPLIFY_PROJECT_NAME=headlessProjectName
AWS_AMPLIFY_APP_ID=amplifyServiceProjectAppId
前三个是 IAM 用户凭证和配置,后两个是放大特定的,可以在 Amplify 项目的 AWS 控制台中找到。
在那之后,我创建了一个 Dockerfile for the Gitpod Custom Docker Image (as suggested by @Pauline) 和一个 bash 脚本,它创建 ~/.aws
配置文件并在无头模式下运行 amplify pull
。
.gitpod.dockerfile
FROM gitpod/workspace-full
# install aws-cli v2
RUN sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip \
&& sudo ./aws/install
# install amplify-cli
RUN sudo curl -sL https://aws-amplify.github.io/amplify-cli/install | bash && $SHELL
这将在 docker 映像上预安装 aws-cli and amplify-cli,以便它们可以在工作区内使用。也不要忘记将 docker 配置添加到 .gitpod.yml
文件的顶部:
.gitpod.yml
image:
file: .gitpod.Dockerfile
此时,我设置 Amplify 的方式使我不必在启动新工作区时手动选择 amplify-cli
选项。在开始时指定的环境变量的帮助下,魔术发生在自定义 bash 脚本中:
放大-pull.bash
#!/bin/bash
set -e
IFS='|'
# Specify the headless amplify pull parameters
# https://docs.amplify.aws/cli/usage/headless/#amplify-pull-parameters
VUECONFIG="{\
\"SourceDir\":\"src\",\
\"DistributionDir\":\"dist\",\
\"BuildCommand\":\"npm run-script build\",\
\"StartCommand\":\"npm run-script serve\"\
}"
AWSCLOUDFORMATIONCONFIG="{\
\"configLevel\":\"project\",\
\"useProfile\":false,\
\"profileName\":\"default\",\
\"accessKeyId\":\"$AWS_ACCESS_KEY_ID\",\
\"secretAccessKey\":\"$AWS_SECRET_ACCESS_KEY\",\
\"region\":\"$AWS_DEFAULT_REGION\"\
}"
AMPLIFY="{\
\"projectName\":\"$AWS_AMPLIFY_PROJECT_NAME\",\
\"appId\":\"$AWS_AMPLIFY_APP_ID\",\
\"envName\":\"dev\",\
\"defaultEditor\":\"code\"\
}"
FRONTEND="{\
\"frontend\":\"javascript\",\
\"framework\":\"vue\",\
\"config\":$VUECONFIG\
}"
PROVIDERS="{\
\"awscloudformation\":$AWSCLOUDFORMATIONCONFIG\
}"
# Create AWS credential file inside ~/.aws
mkdir -p ~/.aws \
&& echo -e "[default]\naws_access_key_id=$AWS_ACCESS_KEY_ID\naws_secret_access_key=$AWS_SECRET_ACCESS_KEY" \
>> ~/.aws/credentials
# Create AWS config file ~/.aws
echo -e "[default]\nregion=$AWS_DEFAULT_REGION" >> ~/.aws/config
# Run amplify pull in Headless mode,
# this also generates thw aws-exports.js file inside /src
amplify pull \
--amplify $AMPLIFY \
--frontend $FRONTEND \
--providers $PROVIDERS \
--yes
我在前端使用 Vue 作为示例,因此需要根据项目类型更改这些值。其余参数非常简单,如前所述,可以在 amplify pull
命令之前找到有关无头模式的更多信息 here. I'm also creating the aws config files。
这就是最终 .gitpod.yml
文件的样子
.gitpod.yml
image:
file: .gitpod.dockerfile
tasks:
- name: Amplify pull dev
command: |
bash amplify-pull.bash
gp sync-done amplify
- name: Install npm packages, run dev
init: yarn install
command: |
gp sync-await amplify
yarn serve
ports:
- port: 8080
onOpen: open-preview
我也在等待 Amplify pull 在 运行 开发服务器使用 gp sync 之前完成。
我正在尝试使用 Gitpod 设置 AWS Amplify JavaScript 项目,这样当我启动一个新的工作区时,我不必手动完成 amplify-cli
步骤(添加 IAM 用户、生成 aws-exports.js
文件等)。
到目前为止,我已经在机器上成功 install aws-cli
和 amplify-cli
(我将其添加到任务初始化时的 .gitpod.yml
文件中)
$ npm install @aws-amplify/cli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
所以我可以添加
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_DEFAULT_REGION=us-west-2
环境变量到 gitpod variables,但是当 运行 例如 amplify pull
我看不到 [default] 用户,就像我通常 运行 它时那样本地设置。
我已经开始工作了,首先我使用 Gitpod account settings:
为amplify
设置添加了这些环境变量
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_DEFAULT_REGION=us-west-2
AWS_AMPLIFY_PROJECT_NAME=headlessProjectName
AWS_AMPLIFY_APP_ID=amplifyServiceProjectAppId
前三个是 IAM 用户凭证和配置,后两个是放大特定的,可以在 Amplify 项目的 AWS 控制台中找到。
在那之后,我创建了一个 Dockerfile for the Gitpod Custom Docker Image (as suggested by @Pauline) 和一个 bash 脚本,它创建 ~/.aws
配置文件并在无头模式下运行 amplify pull
。
.gitpod.dockerfile
FROM gitpod/workspace-full
# install aws-cli v2
RUN sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip \
&& sudo ./aws/install
# install amplify-cli
RUN sudo curl -sL https://aws-amplify.github.io/amplify-cli/install | bash && $SHELL
这将在 docker 映像上预安装 aws-cli and amplify-cli,以便它们可以在工作区内使用。也不要忘记将 docker 配置添加到 .gitpod.yml
文件的顶部:
.gitpod.yml
image:
file: .gitpod.Dockerfile
此时,我设置 Amplify 的方式使我不必在启动新工作区时手动选择 amplify-cli
选项。在开始时指定的环境变量的帮助下,魔术发生在自定义 bash 脚本中:
放大-pull.bash
#!/bin/bash
set -e
IFS='|'
# Specify the headless amplify pull parameters
# https://docs.amplify.aws/cli/usage/headless/#amplify-pull-parameters
VUECONFIG="{\
\"SourceDir\":\"src\",\
\"DistributionDir\":\"dist\",\
\"BuildCommand\":\"npm run-script build\",\
\"StartCommand\":\"npm run-script serve\"\
}"
AWSCLOUDFORMATIONCONFIG="{\
\"configLevel\":\"project\",\
\"useProfile\":false,\
\"profileName\":\"default\",\
\"accessKeyId\":\"$AWS_ACCESS_KEY_ID\",\
\"secretAccessKey\":\"$AWS_SECRET_ACCESS_KEY\",\
\"region\":\"$AWS_DEFAULT_REGION\"\
}"
AMPLIFY="{\
\"projectName\":\"$AWS_AMPLIFY_PROJECT_NAME\",\
\"appId\":\"$AWS_AMPLIFY_APP_ID\",\
\"envName\":\"dev\",\
\"defaultEditor\":\"code\"\
}"
FRONTEND="{\
\"frontend\":\"javascript\",\
\"framework\":\"vue\",\
\"config\":$VUECONFIG\
}"
PROVIDERS="{\
\"awscloudformation\":$AWSCLOUDFORMATIONCONFIG\
}"
# Create AWS credential file inside ~/.aws
mkdir -p ~/.aws \
&& echo -e "[default]\naws_access_key_id=$AWS_ACCESS_KEY_ID\naws_secret_access_key=$AWS_SECRET_ACCESS_KEY" \
>> ~/.aws/credentials
# Create AWS config file ~/.aws
echo -e "[default]\nregion=$AWS_DEFAULT_REGION" >> ~/.aws/config
# Run amplify pull in Headless mode,
# this also generates thw aws-exports.js file inside /src
amplify pull \
--amplify $AMPLIFY \
--frontend $FRONTEND \
--providers $PROVIDERS \
--yes
我在前端使用 Vue 作为示例,因此需要根据项目类型更改这些值。其余参数非常简单,如前所述,可以在 amplify pull
命令之前找到有关无头模式的更多信息 here. I'm also creating the aws config files。
这就是最终 .gitpod.yml
文件的样子
.gitpod.yml
image:
file: .gitpod.dockerfile
tasks:
- name: Amplify pull dev
command: |
bash amplify-pull.bash
gp sync-done amplify
- name: Install npm packages, run dev
init: yarn install
command: |
gp sync-await amplify
yarn serve
ports:
- port: 8080
onOpen: open-preview
我也在等待 Amplify pull 在 运行 开发服务器使用 gp sync 之前完成。