Skip to content

AWS:CLI:Amplify

Help

docker run --rm -it amazon/aws-cli amplify help

create-deployment

수동으로 배포된 Amplify 앱에 대한 배포를 생성합니다. 수동으로 배포된 앱은 리포지토리에 연결되지 않습니다.

docker run --rm -it amazon/aws-cli amplify create-deployment help

SYNOPSIS:

            create-deployment
          --app-id <value>
          --branch-name <value>
          [--file-map <value>]
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]
          [--debug]
          [--endpoint-url <value>]
          [--no-verify-ssl]
          [--no-paginate]
          [--output <value>]
          [--query <value>]
          [--profile <value>]
          [--region <value>]
          [--version <value>]
          [--color <value>]
          [--no-sign-request]
          [--ca-bundle <value>]
          [--cli-read-timeout <value>]
          [--cli-connect-timeout <value>]
          [--cli-binary-format <value>]
          [--no-cli-pager]
          [--cli-auto-prompt]
          [--no-cli-auto-prompt]

file-map

파일 이름을 키로 포함하고 파일 콘텐츠 md5 해시를 값으로 포함하는 선택적 파일 맵입니다. 이 인수가 제공되면 서비스는 파일별로 고유한 업로드 URL을 생성합니다. 그렇지 않으면 서비스에서 압축 파일에 대한 단일 업로드 URL만 생성합니다.

start-deployment

수동으로 배포된 앱의 배포를 시작합니다. 수동으로 배포된 앱은 리포지토리에 연결되지 않습니다.

docker run --rm -it amazon/aws-cli amplify start-deployment help

SYNOPSIS:

            start-deployment
          --app-id <value>
          --branch-name <value>
          [--job-id <value>]
          [--source-url <value>]
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]
          [--debug]
          [--endpoint-url <value>]
          [--no-verify-ssl]
          [--no-paginate]
          [--output <value>]
          [--query <value>]
          [--profile <value>]
          [--region <value>]
          [--version <value>]
          [--color <value>]
          [--no-sign-request]
          [--ca-bundle <value>]
          [--cli-read-timeout <value>]
          [--cli-connect-timeout <value>]
          [--cli-binary-format <value>]
          [--no-cli-pager]
          [--cli-auto-prompt]
          [--no-cli-auto-prompt]

명령행으로 배포하는 방법

AWS IAM 사용자를 생성합니다

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "amplify:StartDeployment",
            "Resource": "arn:aws:amplify:REGION:ACCOUNT_ID:apps/APP_ID/*"
        }
    ]
}

REGION, ACCOUNT_IDAPP_ID를 관련 값으로 바꿔야 합니다. 원하는 경우 더 나아가 특정 분기로 제한할 수도 있습니다.

중요한 점은 ACCOUNT_IDAPP_ID 는 이름이 아니라 UID 이다. 관리 콘솔에서 각각의 ARN 항목을 확인하면 UID를 확인할 수 있다.

한 예시로,

일 경우:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "amplify:StartDeployment",
            "Resource": "arn:aws:amplify:ap-northeast-2:351828347590:apps/d3hmwa8f0z10dn/branches/production/*"
        }
    ]
}

WARNING

중요한 점은 ARN의 마지막에 별표(/*) 와일드 카드를 추가하여 하위 리소스를 모두 포함시켜야 한다.

이며, AWS CLI 명령행은

APP_ID="d3hmwa8f0z10dn"
BRANCH_NAME="production"
SOURCE_URL="https://your.gitlab.address/api/v4/projects/112/jobs/5876/artifacts/archive.zip?private_token=..."

aws amplify start-deployment --app-id $APP_ID --branch-name $BRANCH_NAME --source-url $SOURCE_URL --debug

이다.

GitLab CI/CD 변수 구성

다음 변수를 생성:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION

그리고 로그에 출력되지 않도록 마스킹 설정 추가.

build:
  script:
    - apt-get update
    - apt-get install zip -y
    - echo "JOB_ID=$CI_JOB_ID" > build.env
    - npm run build
    - zip -r -j dist.zip dist 
  artifacts:
    paths:
      - dist.zip
    reports:
      dotenv: build.env

deploy:
  image: 
    name: amazon/aws-cli
    entrypoint: [""]
  variables:
    APP_ID: app_id
    BRANCH_NAME: branch_name
    SOURCE_URL: $CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$JOB_ID/artifacts/dist.zip?job=build&job_token=$CI_JOB_TOKEN
  script:
    - aws amplify start-deployment --app-id $APP_ID --branch-name $BRANCH_NAME --source-url $SOURCE_URL
  needs:
    - build

artifacts:reports:dotenv를 사용할 수 없을 경우 직접 환변경수를 파일로 저장하여 deploy로 전달해야 한다.

Troubleshooting

UnrecognizedClientException

An error occurred (UnrecognizedClientException) when calling the StartDeployment operation: The security token included in the request is invalid.

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY를 다시 확인해 보자.

See also