質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

CircleCI上でCodeDeploy失敗 (ローカルでは成功するのに。。)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 830

zirou

score 12

 前提・実現したいこと

circleciからAWSのCodedeployでデプロイしたいです。

しかし aws deploy create-deploymentでエラーが出てしまいます

詳しい方いたらご教授いただけると幸いです。

 発生している問題・エラーメッセージ

To deploy with this revision, run:
aws deploy create-deployment --application-name XXX --s3-location bucket=XXXapi,key=XXX_201810260825.zip,bundleType=zip,eTag=2f8e68e7b9877553138be921873c39cd-17,version=h.ITjhSjT6c3LADNNWFuvMQ4zy6optsi --deployment-group-name <deployment-group-name> --deployment-config-name <deployment-config-name> --description <description>
#### deployment revision: XXX_201810260825.zip
#### ETAG: 2f8e68e7b9877553138be921873c39cd-17
None
#### VERSION: h.ITjhSjT6c3LADNNWFuvMQ4zy6optsi
None
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

Unknown options: None
Exited with code 255

 該当のソースコード

deploy:
      working_directory: ~/projects
      docker:
          - image: circleci/ruby:2.5.1-node-browsers
      steps:
          # Log the current branch
          - run:
              name: Show current branch
              command: echo ${CIRCLE_BRANCH}

          - attach_workspace:
              at: .

          - run:
              name: Check files
              command: ls -l -a -R /home/circleci/projects/XXXapi/vendor

          # Install AWS cli
          - run:
              name: Install aws cli
              command: |
                  curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
                  sudo python get-pip.py
                  sudo apt-get install python-dev
                  sudo pip install awscli
                  sudo pip install awscli --upgrade
                  aws --version
          # Set the signature version for the S3 auth
          - run:
              name: Setting Signature Version 4 for S3 Request Authentication
              command: aws configure set default.s3.signature_version s3v4

          # Deploy to the S3 bucket corresponding to the current branch
          - run:
              name: Deploy to S3
              command: |
                  BUILD_DIR=.
                  REGION=us-east-2
                  APP_NAME=XXX
                  DEPLOYMENT_GROUP=XXX
                  DEPLOYMENT_CONFIG=CodeDeployDefault.AllAtOnce
                  S3_BUCKET=XXXapi
                  TAG=`date '+%Y%m%d%H%M'`
                  S3_KEY=${APP_NAME}_$TAG.zip

                  echo "#### create CodeDeploy revision: ${S3_KEY}"


                  aws deploy push --region ${REGION} --application-name ${APP_NAME} \
                         --s3-location s3://${S3_BUCKET}/${S3_KEY} --source ${BUILD_DIR}

                  echo "#### deployment revision: ${S3_KEY}"

                  ETAG=`aws deploy list-application-revisions --region ${REGION} \
                      --application-name ${APP_NAME} --s-3-bucket ${S3_BUCKET} --s-3-key-prefix ${S3_KEY} \
                      --query 'revisions[0].s3Location.eTag' --output text`

                  VERSION=`aws deploy list-application-revisions --region ${REGION} \
                      --application-name ${APP_NAME} --s-3-bucket ${S3_BUCKET} --s-3-key-prefix ${S3_KEY} \
                      --query 'revisions[0].s3Location.version' --output text`

                  echo "#### ETAG: ${ETAG}"
                  echo "#### VERSION: ${VERSION}"
                  aws deploy create-deployment \
                    --region ${REGION} \
                    --application-name ${APP_NAME} \
                    --s3-location bucket=${S3_BUCKET},key=${S3_KEY},bundleType=zip,eTag=${ETAG} \
                    --deployment-group-name ${DEPLOYMENT_GROUP} \
                    --deployment-config-name ${DEPLOYMENT_CONFIG} \
                    --file-exists-behavior OVERWRITE \
                    --description "XXX"
                  echo ""
workflows:
version: 2
build-deploy:
  jobs:
    - build
    - deploy: # deployはbuildのあとに実行
        requires:
          - build
        filters: # masterブランチの場合のみデプロイする
          branches:
            only: master

 試したこと

aws deploy create-deploymentの実行時にエラーが返ってきている。

1.ローカルにaws-cliをインストールしてcircle/config.ymlと同じaws deploy create-deployment を実行する。
→ 実行できた。 しかし実際のcircleci上ではうまくいかない。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ETAGとVERSIONのところでNoneが返ってきてるような気がします。
以下オプションのTypeミスを修正してみてください。

--s-3-bucket
↓
--s3-bucket

--s-3-key-prefix
↓
--s3-key-prefix

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/08 00:45

    ご回答いただきありがとうございます。
    ご教示いただいた通り試してみましたが、結果は同じエラーとなりました。

    ETAGとVERSIONはechoで確認できているので取得はできているみたいです。
    スペルミスをしていたのに普通に取得できていたのはちょっと不思議です。。

    ここで確認しています。
    echo "#### ETAG: ${ETAG}"
    echo "#### VERSION: ${VERSION}"

    #### ETAG: cca54a7f1a125da123bae0ce749afc0d-18
    None
    #### VERSION: GDXrDR67a684bBWps9Bb0jhYQX9SXk_J
    None

    キャンセル

  • 2018/11/08 00:49

    Noneがくっついてきていますね。
    それぞれを取得している部分で、--output textを外してJSONで取得して何が入っているか確認できませんか?

    キャンセル

  • 2018/11/08 17:51

    解決しました。

    ご教示いただいた通り、--output text から
    --output json に変更したところ、通りました。
    --output jsonにしたところ何も出力されずに、期待していたETAGとVERSIONだけが返ってきていました。
    また--output textに戻してみると同じエラーで落ちました。
    不思議に思って--output json 自体も外してみたところ、これでも動きました。
    --output text がいけなかったみたいなのですが、ちょっと不思議です。
    Linuxやaws-cliに慣れていないため現時点ではこの違いが不思議に感じています。

    まとめると

    ETAG= ~~~ --output text これはエラー

    ETAG= ~~~ --output json 成功!

    ETAG= ~~~(---output自体はずす)成功!

    でした。

    本当にありがとうございます。
    またAWS総合1位の方に回答していただき大変勉強になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る