[JAWS-UG CLI] CodeBuild: #5 プロジェクトの削除

前提条件

CodeBuildへの権限

CodeBuildに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.57
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <CodeBuildにフル権限のあるプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<CodeBuildにフル権限のあるプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1

1. 事前作業

1.1. プロジェクト名の指定

変数の設定
CODEB_PROJECT_NAME='codebuild-demo-java-20170417'
変数の設定
ARRAY_CODEB_PROJECT_NAMES="${CODEB_PROJECT_NAME}" 
        && echo ${ARRAY_CODEB_PROJECT_NAMES}
コマンド
aws codebuild batch-get-projects 
        --names "${ARRAY_CODEB_PROJECT_NAMES}"

結果(例):

  {
      "projectsNotFound": [],
      "projects": [
          {
              "name": "codebuild-demo-java-20170417",
              "serviceRole": "arn:aws:iam::XXXXXXXXXXXX:role/hoge",
              "tags": [],
              "artifacts": {
                  "namespaceType": "NONE",
                  "packaging": "NONE",
                  "type": "S3 ",
                  "location": "artifact-20170417-XXXXXXXXXXXX",
                  "name": "codebuild-demo-java-20170417"
              },
              "lastModified": 14xxxxxxxx.000,
              "timeoutInMinutes": 60,
              "created": 14xxxxxxxx.000,
              "environment": {
                  "computeType": "BUILD_GENERAL1_SMALL",
                  "image": "aws/codebuild/java:openjdk-8",
                  "type": "LINUX_CONTAINER",
                  "environmentVariables": []
              },
              "source": {
                  "type": "S3",
                  "location": "src-20170417-XXXXXXXXXXXX/MessageUtil.zip"
              },
              "encryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3",
              "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:project/codebuild-demo-java-20170417",
              "description": "codebuild demo (java)"
          }
      ]
  }

2. プロジェクトの削除

変数の確認
cat << ETX

        CODEB_PROJECT_NAME: ${CODEB_PROJECT_NAME}

ETX
コマンド
aws codebuild delete-project 
        --name ${CODEB_PROJECT_NAME}

結果(例):

  (戻り値なし)

3. 事後作業

同名のプロジェクトの不存在確認します。

コマンド
aws codebuild batch-get-projects 
        --names "${ARRAY_CODEB_PROJECT_NAMES}"

結果(例):

  {
    "projectsNotFound": [
      "codebuild-demo-java-20170417"
    ],
    "projects": []
  }

完了

続きを読む

[JAWS-UG CLI] CodeBuild: #4 ビルドの実行

前提条件

CodeBuildへの権限

CodeBuildに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.57
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        CODEB_PROJECT_NAME:  (0.3) ${CODEB_PROJECT_NAME}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  CODEB_PROJECT_NAME:  (0.3) codebuild-demo-java-20170417

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <CodeBuildにフル権限のあるプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<CodeBuildにフル権限のあるプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

0.3. プロジェクト名の指定

変数の設定
CODEB_PROJECT_NAME='codebuild-demo-java-20170417'

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        CODEB_PROJECT_NAME:  (0.3) ${CODEB_PROJECT_NAME}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  CODEB_PROJECT_NAME:  (0.3) codebuild-demo-java-20170417

1. 事前作業

2. Buildの実行

変数の確認
cat << ETX

        CODEB_PROJECT_NAME: ${CODEB_PROJECT_NAME}

ETX
コマンド
aws codebuild start-build 
        --project-name ${CODEB_PROJECT_NAME}

結果(例):

  {
    "build": {
      "buildComplete": false,
      "initiator": "hoge/hoge-session",
      "artifacts": {
          "location": "arn:aws:s3:::artifact-20170417-XXXXXXXXXXXX/codebuild-demo-java-20170417"
      },
      "projectName": "codebuild-demo-java-20170417",
      "timeoutInMinutes": 60,
      "buildStatus": "IN_PROGRESS",
      "environment": {
          "computeType": "BUILD_GENERAL1_SMALL",
          "image": "aws/codebuild/java:openjdk-8",
          "type": "LINUX_CONTAINER",
          "environmentVariables": []
      },
      "source": {
          "type": "S3",
          "location": "src-20170417-XXXXXXXXXXXX/MessageUtil.zip"
      },
      "currentPhase": "SUBMITTED",
      "startTime": 14xxxxxxxx.000,
      "id": "codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:build/codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
  }

3. 事後作業

3.1. ビルドIDの取得

プロジェクトに存在するビルドのIDを全て取得します。

コマンド
ARRAY_CODEB_BUILD_IDS=$( 
        aws codebuild list-builds-for-project 
          --project-name ${CODEB_PROJECT_NAME} 
          --query 'ids' 
          --output text 
) 
        && echo ${ARRAY_CODEB_BUILD_IDS}

結果(例):

  codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

プロジェクト内のビルドで完了していない(つまり実行中の)もののIDを取得し
ます。

コマンド
CODEB_BUILD_ID=$( 
        aws codebuild batch-get-builds 
          --ids ${ARRAY_CODEB_BUILD_IDS} 
          --query 'builds[?currentPhase != `COMPLETED`].id' 
          --output text 
) 
        && echo ${CODEB_BUILD_ID}

結果(例):

  codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

3.2. ビルドフェイズの確認

コマンド
CODEB_BUILD_PHASE=$( 
        aws codebuild batch-get-builds 
          --ids ${CODEB_BUILD_ID} 
          --query "builds[].currentPhase" 
          --output text 
) 
        && echo ${CODEB_BUILD_PHASE}

結果(例):

  PROVISIONING

3.3. ログの確認

コマンド
LOGS_GROUP_NAME=$( 
        aws codebuild batch-get-builds 
          --ids ${CODEB_BUILD_ID} 
          --query "builds[].logs.groupName" 
          --output text 
) 
        && echo ${LOGS_GROUP_NAME}

結果(例):

  /aws/codebuild/ codebuild-demo-java-20170417
コマンド
LOGS_STREAM_NAME=$( 
        aws codebuild batch-get-builds 
          --ids ${CODEB_BUILD_ID} 
          --query "builds[].logs.streamName" 
          --output text 
) 
        && echo ${LOGS_STREAM_NAME}

結果(例):

  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
コマンド
aws logs get-log-events 
        --log-group-name ${LOGS_GROUP_NAME} 
        --log-stream-name ${LOGS_STREAM_NAME}

3.4. ビルドフェイズの確認

コマンド
CODEB_BUILD_PHASE=$( 
        aws codebuild batch-get-builds 
          --ids ${CODEB_BUILD_ID} 
          --query "builds[].currentPhase" 
          --output text 
) 
        && echo ${CODEB_BUILD_PHASE}

結果(例):

  COMPLETED

3.5. ビルドステータスの確認

コマンド
CODEB_BUILD_STATUS=$( 
        aws codebuild batch-get-builds 
          --ids ${CODEB_BUILD_ID} 
          --query "builds[].buildStatus" 
          --output text 
) 
        && echo ${CODEB_BUILD_STATUS}

結果(例):

  SUCCEEDED

3.6. View Summarized Build Information

コマンド
aws codebuild batch-get-builds 
        --ids ${CODEB_BUILD_ID}

結果(例):

  {
    "buildsNotFound": [],
    "builds": [
      {
          "buildComplete": true,
          "phases": [
              {
                  "phaseStatus": "SUCCEEDED",
                  "endTime": 14xxxxxxxx.543,
                  "phaseType": "SUBMITTED",
                  "durationInSeconds": 0,
                  "startTime": 14xxxxxxxx.977
              },
              {
                  "contexts": [],
                  "phaseType": "PROVISIONING",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 15,
                  "startTime": 14xxxxxxxx.543,
                  "endTime": 14xxxxxxxx.654
              },
              {
                  "contexts": [],
                  "phaseType": "DOWNLOAD_SOURCE",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 4,
                  "startTime": 14xxxxxxxx.654,
                  "endTime": 14xxxxxxxx.34
              },
              {
                  "contexts": [],
                  "phaseType": "INSTALL",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 0,
                  "startTime": 14xxxxxxxx.34,
                  "endTime": 14xxxxxxxx.454
              },
              {
                  "contexts": [],
                  "phaseType": "PRE_BUILD",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 0,
                  "startTime": 14xxxxxxxx.454,
                  "endTime": 14xxxxxxxx.559
              },
              {
                  "contexts": [],
                  "phaseType": "BUILD",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 59,
                  "startTime": 14xxxxxxxx.559,
                  "endTime": 14xxxxxxxx.448
              },
              {
                  "contexts": [],
                  "phaseType": "POST_BUILD",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 0,
                  "startTime": 14xxxxxxxx.448,
                  "endTime": 14xxxxxxxx.541
              },
              {
                  "contexts": [],
                  "phaseType": "UPLOAD_ARTIFACTS",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 0,
                  "startTime": 14xxxxxxxx.541,
                  "endTime": 14xxxxxxxx.329
              },
              {
                  "contexts": [],
                  "phaseType": "FINALIZING",
                  "phaseStatus": "SUCCEEDED",
                  "durationInSeconds": 5,
                  "startTime": 14xxxxxxxx.329,
                  "endTime": 14xxxxxxxx.808
              },
              {
                  "phaseType": "COMPLETED",
                  "startTime": 14xxxxxxxx.808
              }
          ],
          "logs": {
              "groupName": "/aws/codebuild/codebuild-demo-java-20170417",
              "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logEvent:group=/aws/codebuild/codebuild-demo-java-20170417;stream=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "streamName": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          },
          "artifacts": {
              "location": "arn:aws:s3:::artifact-20170417-XXXXXXXXXXXX/codebuild-demo-java-20170417"
          },
          "projectName": "codebuild-demo-java-20170417",
          "timeoutInMinutes": 60,
          "initiator": "hoge/hoge-session",
          "buildStatus": "SUCCEEDED",
          "environment": {
              "computeType": "BUILD_GENERAL1_SMALL",
              "image": "aws/codebuild/java:openjdk-8",
              "type": "LINUX_CONTAINER",
              "environmentVariables": []
          },
          "source": {
              "type": "S3",
              "location": " src-20170417-XXXXXXXXXXXX /MessageUtil.zip"
          },
          "currentPhase": "COMPLETED",
          "startTime": 14xxxxxxxx.977,
          "endTime": 14xxxxxxxx.808,
          "id": "codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:build/codebuild-demo-java-20170417:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    ]
  }

3.7. Get the Build Output Artifact

コマンド
aws s3 ls s3://${S3_BUCKET_ARTIFACTS} --recursive

結果(例):

  2017-04-1700:01:14       2065 codebuild-demo-java-20170417/target/target/messageUtil-1.0.jar

完了

続きを読む

[JAWS-UG CLI] CodeBuild: #3 buildspecの作成 (Java)

前提条件

S3への権限

S3にオブジェクトを書き込む権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.28
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        S3_BUCKET_NAME       (0.3) ${S3_BUCKET_NAME}
        FILE_ZIP             (0.4) ${FILE_ZIP}
        SNS_TOPIC_NAME       (0.5) ${SNS_TOPIC_NAME}
        DIR_WORK             (0.6) ${DIR_WORK}
        PWD                  (0.7) $(pwd)

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <S3にオブジェクトを書き込む権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  S3_BUCKET_NAME       (0.3) source-ap-northeast-1-XXXXXXXXXXXX
  FILE_ZIP             (0.4) MessageUtil.zip
  SNS_TOPIC_NAME       (0.5) handson-20170417
  DIR_WORK             (0.6) ${HOME}/src-codebuild-demo-java
  PWD                  (0.7) ${HOME}/src-codebuild-demo-java

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <S3にオブジェクトを書き込む権限のあるプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<S3にオブジェクトを書き込む権限のあるプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

0.3. ソースコード用S3バケットの指定

変数の設定
S3_BUCKET_NAME=$( 
        aws s3 ls 
          | grep 'source-ap-northeast-1-' 
          | cut -d ' ' -f3 
) 
        && echo ${S3_BUCKET_NAME}

0.4. ZIPファイル名の指定

変数の設定
FILE_ZIP='MessageUtil.zip'

0.5. 通知用SNSトピックの指定

変数の設定
SNS_TOPIC_PREFIX='handson-'
変数の設定
SNS_TOPIC_ARN=$( 
        aws sns list-topics 
          --query "Topics[?contains(TopicArn, `${SNS_TOPIC_PREFIX}`)].TopicArn" 
          --output text 
) 
        && echo ${SNS_TOPIC_ARN}

結果(例):

  arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:handson-20170417

0.6. 作業用ディレクトリの指定

変数の設定
DIR_WORK='${HOME}/src-codebuild-demo-java'

0.7. 作業用ディレクトリへの移動

コマンド
cd ${DIR_WORK}/

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        S3_BUCKET_NAME       (0.3) ${S3_BUCKET_NAME}
        FILE_ZIP             (0.4) ${FILE_ZIP}
        SNS_TOPIC_NAME       (0.5) ${SNS_TOPIC_NAME}
        DIR_WORK             (0.6) ${DIR_WORK}
        PWD                  (0.7) $(pwd)

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <S3にオブジェクトを書き込む権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  S3_BUCKET_NAME       (0.3) source-ap-northeast-1-XXXXXXXXXXXX
  FILE_ZIP             (0.4) MessageUtil.zip
  SNS_TOPIC_NAME       (0.5) handson-20170417
  DIR_WORK             (0.6) ${HOME}/src-codebuild-demo-java
  PWD                  (0.7) ${HOME}/src-codebuild-demo-java

1. 事前作業

1.1. メッセージ表題の指定

変数の設定
SNS_MSG_SUBJECT='AWS CodeBuild - Build Completed'

1.2. メッセージ本文の指定

変数の設定
SNS_MSG_BODY="${CODEB_PROJECT_NAME} build has completed." 
        && echo ${SNS_MSG_BODY}

2. Create the Build Spec

変数の設定
FILE_INPUT="${DIR_WORK}/buildspec.yml"
変数の確認
cat << ETX

        FILE_INPUT:         ${FILE_INPUT}
        AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
        SNS_TOPIC_ARN:      ${SNS_TOPIC_ARN}
        SNS_MSG_SUBJECT:    ${SNS_MSG_SUBJECT}
        SNS_MSG_BODY:       ${SNS_MSG_BODY}

ETX
コマンド
cat << EOF > ${FILE_INPUT}
version: 0.1

environment_variables:
  plaintext:
    AWS_DEFAULT_REGION: "${AWS_DEFAULT_REGION}"
    SNS_TOPIC_ARN: "${SNS_TOPIC_ARN}"
    SNS_MSG_SUBJECT: "${SNS_MSG_SUBJECT}"
    SNS_MSG_BODY: "${SNS_MSG_BODY}"

phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Build started on $(date +%Y-%m-%dZ%H:%M:%S)
      - mvn install
  post_build:
    commands:
      - echo Build completed on $(date +%Y-%m-%dZ%H:%M:%S)
      - aws sns publish --topic-arn ${SNS_TOPIC_ARN} --subject "${SNS_MSG_SUBJECT}" --message "${SNS_MSG_BODY}"
artifacts:
  files:
    - target/messageUtil-1.0.jar
EOF

cat ${FILE_INPUT}

2.2. ZIPファイルの作成

コマンド
PATH_ZIP="${HOME}/${FILE_ZIP}" 
        && echo ${PATH_ZIP}
コマンド
zip -r ${PATH_ZIP} * -x '.*'

結果(例):

  adding: buildspec.yml (deflated 56%)
  adding: pom.xml (deflated 52%)
  adding: src/ (stored 0%)
  adding: src/test/ (stored 0%)
  adding: src/test/java/ (stored 0%)
  adding: src/test/java/TestMessageUtil.java (deflated 60%)
  adding: src/main/ (stored 0%)
  adding: src/main/java/ (stored 0%)
  adding: src/main/java/MessageUtil.java (deflated 58%)

作成したZIPファイルの中身を確認します。

コマンド
unzip -Z ${PATH_ZIP}

結果(例):

  Archive:  /home/taro/MessageUtil.zip
  Zip file size: 2305 bytes, number of entries: 9
  -rw-rw-r--  3.0 unx      418 tx defN 17-Apr-16 23:45 buildspec.yml
  -rw-rw-r--  3.0 unx      625 tx defN 17-Apr-16 12:37 pom.xml
  drwxrwxr-x  3.0 unx        0 bx stor 17-Apr-16 12:36 src/
  drwxrwxr-x  3.0 unx        0 bx stor 17-Apr-16 12:36 src/test/
  drwxrwxr-x  3.0 unx        0 bx stor 17-Apr-16 12:37 src/test/java/
  -rw-rw-r--  3.0 unx      568 tx defN 17-Apr-16 12:37 src/test/java/TestMessageUtil.java
  drwxrwxr-x  3.0 unx        0 bx stor 17-Apr-16 12:36 src/main/
  drwxrwxr-x  3.0 unx        0 bx stor 17-Apr-16 12:37 src/main/java/
  -rw-rw-r--  3.0 unx      345 tx defN 17-Apr-16 12:37 src/main/java/MessageUtil.java
  9 files, 1956 bytes uncompressed, 863 bytes compressed:  55.9%

2.3. S3バケットへの転送

作成したZIPファイルをソースファイル用のS3バケットに転送します。

コマンド
aws s3 cp ${PATH_ZIP} s3://${S3_BUCKET_NAME}/

結果(例):

  upload: ../MessageUtil.zip to s3://source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip

3. 事後作業

3.1. 転送完了の確認

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/${FILE_ZIP}

結果(例):

  2017-04-1701:23:45       3243 MessageUtil.zip

3.2. ZIPファイルの削除

コマンド
rm ${PATH_ZIP}

完了

続きを読む

[JAWS-UG CLI] CodeBuild: #2 プロジェクトの作成

前提条件

CodeBuildへの権限

CodeBuildに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.57
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        FILE_ZIP             (0.3) ${FILE_ZIP}
        IAM_ROLE_ARN        (0.4) ${IAM_ROLE_ARN}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  FILE_ZIP             (0.3) MessageUtil.zip
  IAM_ROLE_ARN         (0.4) arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <CodeBuildにフル権限のあるプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<CodeBuildにフル権限のあるプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

0.3. ソースコードZIPファイルの指定

変数の設定
FILE_ZIP='MessageUtil.zip'
コマンド
aws s3 ls s3://${S3_BUCKET_SOURCE}/${FILE_ZIP}

0.4. IAMロールの指定

変数の設定
IAM_ROLE_NAME='CodeBuildServiceRole'
コマンド
IAM_ROLE_ARN=$( 
        aws iam get-role 
          --role-name ${IAM_ROLE_NAME} 
          --query 'Role.Arn' 
          --output text 
) 
        && echo ${IAM_ROLE_ARN}

結果(例):

  arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        FILE_ZIP             (0.3) ${FILE_ZIP}
        IAM_ROLE_NAME        (0.4) ${IAM_ROLE_NAME}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  FILE_ZIP             (0.3) MessageUtil.zip
  IAM_ROLE_NAME        (0.4) CodeBuildServiceRole

1. 事前作業

1.1. プロジェクト名の指定

変数の設定
CODEB_PROJECT_NAME='codebuild-demo-java-20170417'

同名のプロジェクトの不存在確認します。

変数の設定
ARRAY_CODEB_PROJECT_NAMES="${CODEB_PROJECT_NAME}" 
        && echo ${ARRAY_CODEB_PROJECT_NAMES}

同名のプロジェクトの不存在確認します。

コマンド
aws codebuild batch-get-projects 
        --names "${ARRAY_CODEB_PROJECT_NAMES}"

結果(例):

  {
    "projectsNotFound": [
      "codebuild-demo-java-20170417"
    ],
    "projects": []
  }

1.2. プロジェクトの説明の指定

変数の設定
CODEB_PROJECT_DESC='codebuild demo (java)'

1.3. ソースコードタイプの指定

変数の設定
CODEB_SOURCE_TYPE='S3'

1.4. ソースコード用S3バケットの指定

変数の設定
S3_BUCKET_SOURCE=$( 
        aws s3 ls 
          | grep "source-${AWS_DEFAULT_REGION}" 
          | cut -d ' ' -f3 
) 
        && echo ${S3_BUCKET_SOURCE}

結果(例):

  source-ap-northeast-1-XXXXXXXXXXXX

1.5. source

変数の確認
cat << ETX

        CODEB_SOURCE_TYPE: ${CODEB_SOURCE_TYPE}
        S3_BUCKET_SOURCE:  ${S3_BUCKET_SOURCE}
        FILE_ZIP:          ${FILE_ZIP}

ETX
変数の設定
CODEB_PROJECT_SOURCE="type=${CODEB_SOURCE_TYPE},location=${S3_BUCKET_SOURCE}/${FILE_ZIP}" 
        && echo ${CODEB_PROJECT_SOURCE}

結果(例):

  type=S3,location=source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip

1.6. アーティファクトタイプの指定

変数の設定
CODEB_ARTIFACTS_TYPE='S3'

1.7. アーティファクト用S3バケットの指定

変数の設定
S3_BUCKET_ARTIFACTS=$( 
        aws s3 ls 
          | grep "artifact-${AWS_DEFAULT_REGION}" 
          | cut -d ' ' -f3 
) 
        && echo ${S3_BUCKET_ARTIFACTS}

結果(例):

  artifact-ap-northeast-1-XXXXXXXXXXXX

1.8. artifacts

変数の確認
cat << ETX

        CODEB_ARTIFACTS_TYPE: ${CODEB_ARTIFACTS_TYPE}
        S3_BUCKET_ARTIFACTS:  ${S3_BUCKET_ARTIFACTS}

ETX
変数の設定
CODEB_PROJECT_ARTIFACTS="type=${CODEB_ARTIFACTS_TYPE},location=${S3_BUCKET_ARTIFACTS}" 
        && echo ${CODEB_PROJECT_ARTIFACTS}

結果(例):

  type=S3,location=artifact-ap-northeast-1-XXXXXXXXXXXX

1.9. 環境タイプの指定

変数の設定
CODEB_ENV_TYPE='LINUX_CONTAINER'

1.10. 環境イメージの指定

注釈: http://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html

変数の設定
CODEB_ENV_IMAGE='aws/codebuild/java:openjdk-8'

1.11. 環境コンピュートタイプの指定

変数の設定
CODEB_ENV_COMPUTE_TYPE='BUILD_GENERAL1_SMALL'

1.12. environment

変数の確認
cat << ETX

        CODEB_ENV_TYPE:         ${CODEB_ENV_TYPE}
        CODEB_ENV_IMAGE:        ${CODEB_ENV_IMAGE}
        CODEB_ENV_COMPUTE_TYPE: ${CODEB_ENV_COMPUTE_TYPE}

ETX
変数の設定
CODEB_PROJECT_ENVIRONMENT="type=${CODEB_ENV_TYPE},image=${CODEB_ENV_IMAGE},computeType=${CODEB_ENV_COMPUTE_TYPE}" 
        && echo ${CODEB_PROJECT_ENVIRONMENT}

結果(例):

  type=LINUX_CONTAINER,image=aws/codebuild/java:openjdk-8,computeType=BUILD_GENERAL1_SMALL

2. プロジェクトの作成

変数の確認
cat << ETX

        CODEB_PROJECT_NAME:        ${CODEB_PROJECT_NAME}
        CODEB_PROJECT_DESC:        ${CODEB_PROJECT_DESC}
        CODEB_PROJECT_SOURCE:      ${CODEB_PROJECT_SOURCE}
        CODEB_PROJECT_ARTIFACTS:   ${CODEB_PROJECT_ARTIFACTS}
        CODEB_PROJECT_ENVIRONMENT: ${CODEB_PROJECT_ENVIRONMENT}
        IAM_ROLE_ARN:              ${IAM_ROLE_ARN}

ETX
コマンド
aws codebuild create-project 
        --name ${CODEB_PROJECT_NAME} 
        --description "${CODEB_PROJECT_DESC}" 
        --source ${CODEB_PROJECT_SOURCE} 
        --artifacts ${CODEB_PROJECT_ARTIFACTS} 
        --environment ${CODEB_PROJECT_ENVIRONMENT} 
        --service-role ${IAM_ROLE_ARN}

結果(例):

  {
    "project": {
      "name": "codebuild-demo-java-20170417",
      "serviceRole": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole",
      "created": 14xxxxxxxx.000,
      "source": {
          "type": "S3",
          "location": "source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip"
      },
      "artifacts": {
          "namespaceType": "NONE",
          "packaging": "NONE",
          "type": "S3",
          "location": "artifact-ap-northeast-1-XXXXXXXXXXXX",
          "name": "codebuild-demo-java-20170417"
      },
      "lastModified": 14xxxxxxxx.000,
      "timeoutInMinutes": 60,
      "environment": {
          "computeType": "BUILD_GENERAL1_SMALL",
          "image": "aws/codebuild/java:openjdk-8",
          "type": "LINUX_CONTAINER",
          "environmentVariables": []
      },
      "encryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3",
      "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:project/codebuild-demo-java-20170417"
      "description": "codebuild demo (java)"
    }
  }

3. 事後作業

コマンド
aws codebuild batch-get-projects 
        --names "${ARRAY_CODEB_PROJECT_NAMES}"

結果(例):

  {
      "projectsNotFound": [],
      "projects": [
          {
              "name": "codebuild-demo-java-20170417",
              "serviceRole": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole",
              "tags": [],
              "artifacts": {
                  "namespaceType": "NONE",
                  "packaging": "NONE",
                  "type": "S3 ",
                  "location": "artifact-ap-northeast-1-XXXXXXXXXXXX",
                  "name": "codebuild-demo-java-20170417"
              },
              "lastModified": 14xxxxxxxx.000,
              "timeoutInMinutes": 60,
              "created": 14xxxxxxxx.000,
              "environment": {
                  "computeType": "BUILD_GENERAL1_SMALL",
                  "image": "aws/codebuild/java:openjdk-8",
                  "type": "LINUX_CONTAINER",
                  "environmentVariables": []
              },
              "source": {
                  "type": "S3",
                  "location": "source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip"
              },
              "encryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3",
              "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:project/codebuild-demo-java-20170417",
              "description": "codebuild demo (java)"
          }
      ]
  }

完了

続きを読む

[JAWS-UG CLI] IAM #68 IAMポリシー(カスタマ管理)の削除

.. 後始末4. IAMポリシーの削除

AWS CLIを利用して、IAMポリシを削除してみます。

前提条件

IAMへの権限

  • IAMに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.14
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの確認

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <IAMのフル権限を許可されたプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<IAMのフル権限を許可されたプロファイル>'

再確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

1. 事前作業

1.1. IAMポリシー名の指定

ポリシー名を指定します。

変数の設定
IAM_POLICY_NAME='<削除するIAMポリシー名>'

1.2. IAMポリシーの確認

ポリシのバージョンを取得します。

コマンド
IAM_POLICY_VERSION=$( 
        aws iam list-policies 
          --max-items 1000 
          --query "Policies[?PolicyName==`${IAM_POLICY_NAME}`].DefaultVersionId" 
          --output text 
) 
        && echo ${IAM_POLICY_VERSION}

結果(例)

  v1

ポリシの内容を見てみましょう。

コマンド
aws iam get-policy-version 
        --policy-arn ${IAM_POLICY_ARN} 
        --version-id ${IAM_POLICY_VERSION}

結果(例):

  (略)

1.3. ARNの取得

ARNを取得します。

変数の設定
IAM_POLICY_ARN=$( 
        aws iam list-policies 
          --max-items 1000 
          --query "Policies[?PolicyName==`${IAM_POLICY_NAME}`].Arn" 
          --output text 
) 
        && echo "${IAM_POLICY_ARN}"

結果(例):

  arn:aws:iam::XXXXXXXXXXXX:policy/<削除するIAMポリシー名>

2. 本作業

IAMポリシーの削除

コマンド
aws iam delete-policy 
        --policy-arn ${IAM_POLICY_ARN}

結果(例):

  (戻り値なし)

3. 事後作業

ポリシーが無いことを確認します。

コマンド
aws iam get-policy 
        --policy-arn arn:aws:iam::${AWS_ID}:policy/${IAM_POLICY_NAME}

結果(例)

  An error occurred (NoSuchEntity) when calling the GetPolicy operation: Policy arn:aws:iam::XXXXXXXXXXXX:policy/<削除するIAMポリシー名> does not exist or is not attachable.

完了

続きを読む

[JAWS-UG CLI] IAM #67 IAMロールの削除

前提条件

IAMへの権限

IAMに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.14
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <IAMのフル権限を許可されたプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<IAMのフル権限を許可されたプロファイル>'

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

1. 事前作業

1.1. IAMロール名の指定

変数の設定
IAM_ROLE_NAME='CodeBuildServiceRole'

1.2. IAMロールの確認

コマンド
aws iam get-role 
         --role-name ${IAM_ROLE_NAME}

結果(例):

  {
      "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "codebuild.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Sid": ""
                }
            ]
        },
        "RoleId": "AROAXXXXXXXXXXXXXXXXX",
        "CreateDate": "2017-04-17T01:23:45Z",
        "RoleName": "CodeBuildServiceRole",
        "Path": "/",
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole"
      }
  }

2. 本作業

IAMロールの削除

変数の確認
cat << ETX

        IAM_ROLE_NAME: ${IAM_ROLE_NAME}

ETX
コマンド
aws iam delete-role 
        --role-name ${IAM_ROLE_NAME}

結果(例):

  (戻り値なし)

3. 事後作業

IAMロールの不存在確認

IAMロールが存在しないことを確認します。

コマンド
aws iam get-role 
         --role-name ${IAM_ROLE_NAME}

結果(例):

  An error occurred (NoSuchEntity) when calling the GetRole operation: Role not found for CodeBuildServiceRole

完了

続きを読む

[JAWS-UG CLI] IAM #66 IAMポリシーのデタッチ

AWS CLIを利用して、IAMロールからポリシーを削除してみます。

前提条件

IAMへの権限

IAMに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.14
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <IAMのフル権限を許可されたプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<IAMのフル権限を許可されたプロファイル>'

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>

1. 事前作業

1.1. IAMロール名の指定

変数の設定
IAM_ROLE_NAME='<対象となるIAMロール>'

1.2. ロールポリシの確認

コマンド
aws iam list-attached-role-policies 
        --role-name ${IAM_ROLE_NAME}

結果(例):

  {
    "AttachedPolicies": [
      {
        "PolicyName": "<削除対象のIAMポリシー>",
        "PolicyArn": "arn:aws:iam::XXXXXXXXXXXX:policy/<削除対象のIAMポリシー>"
      }
    ]
  }

1.3. IAMロールポリシーの決定

変数の設定
IAM_POLICY_NAME='<削除対象のIAMポリシー>'

2. ロールポリシーの適用

ロールポリシーの適用

ロールポリシーをIAMロールから削除します。

変数の確認
cat << ETX

        IAM_ROLE_NAME:  ${IAM_ROLE_NAME}
        IAM_POLICY_ARN: ${IAM_POLICY_ARN}

ETX
コマンド
aws iam detach-role-policy 
        --role-name ${IAM_ROLE_NAME} 
        --policy-arn ${IAM_POLICY_ARN}

結果(例):

  (戻り値なし)

3. 事後作業

ロールポリシーの確認

IAMロールのロールポリシーを確認します。

コマンド
aws iam list-attached-role-policies 
        --role-name ${IAM_ROLE_NAME}

結果:

  {
      "AttachedPolicies": [], 
  }

完了

続きを読む

[JAWS-UG CLI] IAM #66 IAMポリシーの追加 (CodeBuildServiceRole)

AWS CLIを利用して、CodeBuild利用に必要な権限をIAMロールに追加してみます。

前提条件

IAMへの権限

IAMに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.14
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        IAM_ROLE_NAME        (0.2) ${IAM_ROLE_NAME}
        IAM_POLICY_ARN       (0.3) ${IAM_POLICY_ARN}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>
  IAM_ROLE_NAME        (0.2) CodeBuildServiceRole
  IAM_POLICY_ARN       (0.3) arn:aws:iam::XXXXXXXXXXXX:policy/CodeBuildServiceRole

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <IAMのフル権限を許可されたプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<IAMのフル権限を許可されたプロファイル>'

0.2. IAMロール名の指定

変数の設定
IAM_ROLE_NAME='CodeBuildServiceRole'

0.3. IAMロールポリシーの決定

今回必要となる権限については、すでにカスタマ管理ポリシーで
‘CodeBuildServiceRolePolicy’という名前で作成済みです。

‘CodeBuildServiceRolePolicy’というキーワードでAWS管理ポリシーから検索
してみましょう。

変数の設定
SEARCH_KEYWORD='CodeBuildServiceRolePolicy'
コマンド
aws iam list-policies 
        --scope AWS 
        --max-items 1000 
        --query "Policies[?contains(PolicyName, `${SEARCH_KEYWORD}`)].PolicyName"

結果(例):

  [
    "CodeBuildServiceRolePolicy"
  ]

利用するIAMポリシーを指定します。

変数の設定
IAM_POLICY_NAME='CodeBuildServiceRolePolicy'

ポリシーを特定するためのAWSリソース識別名(ARN)を取得します。

変数の設定
IAM_POLICY_ARN=$( 
        aws iam list-policies 
          --max-items 1000 
          --query "Policies[?PolicyName==`${IAM_POLICY_NAME}`].Arn" 
          --output text 
) 
        && echo "${IAM_POLICY_ARN}"

結果(例):

  arn:aws:iam::XXXXXXXXXXXX:policy/CodeBuildServiceRolePolicy

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        IAM_ROLE_NAME        (0.2) ${IAM_ROLE_NAME}
        IAM_POLICY_ARN       (0.3) ${IAM_POLICY_ARN}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <IAMのフル権限を許可されたプロファイル>
  IAM_ROLE_NAME        (0.2) CodeBuildServiceRole
  IAM_POLICY_ARN       (0.3) arn:aws:iam::XXXXXXXXXXXX:policy/CodeBuildServiceRole

1. 事前作業

1.1. IAMポリシーの確認

IAMポリシのバージョンを取得します。

コマンド
IAM_POLICY_VERSION=$( 
        aws iam list-policies 
          --max-items 1000 
          --query "Policies[?PolicyName==`${IAM_POLICY_NAME}`].DefaultVersionId" 
          --output text 
) 
        && echo ${IAM_POLICY_VERSION}

結果(例)

  v1

ポリシの内容を見てみましょう。

コマンド
aws iam get-policy-version 
        --policy-arn ${IAM_POLICY_ARN} 
        --version-id ${IAM_POLICY_VERSION}

結果(例):

  {
    "PolicyVersion": {
      "CreateDate": "2017-04-17T01:23:45Z",
      "VersionId": "v1",
      "Document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "CloudWatchLogsPolicy",
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource": [
              "*"
            ]
          },
          {
            "Sid": "CodeCommitPolicy",
            "Effect": "Allow",
            "Action": [
              "codecommit:GitPull"
            ],
            "Resource": [
              "*"
            ]
          },
          {
            "Sid": "S3GetObjectPolicy",
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:GetObjectVersion"
            ],
            "Resource": [
              "*"
            ]
          },
          {
            "Sid": "S3PutObjectPolicy",
            "Effect": "Allow",
            "Action": [
              "s3:PutObject"
            ],
            "Resource": [
              "*"
            ]
          },
          {
            "Sid": "SNSSendMessagePolicy",
            "Effect": "Allow",
            "Action": [
              "sns:SendMessage",
              "sns:Publish"
            ],
            "Resource": [
              "*"
            ]
          }
        ]
      },
      "IsDefaultVersion": true
    }
  }

1.2. IAMロールの確認

コマンド
aws iam get-role 
         --role-name ${IAM_ROLE_NAME}

結果(例):

  {
      "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "codepipeline.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Sid": ""
                }
            ]
        },
        "RoleId": "AROAXXXXXXXXXXXXXXXXX",
        "CreateDate": "2017-04-17T01:23:45Z",
        "RoleName": "CodeBuildServiceRole",
        "Path": "/",
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole"
      }
  }

1.3. ロールポリシーの確認

IAMロールのロールポリシーを確認します。

コマンド
aws iam list-attached-role-policies 
        --role-name ${IAM_ROLE_NAME}

結果:

  {
      "AttachedPolicies": [], 
  }

2. ロールポリシーの適用

ロールポリシーの適用

ロールポリシーをIAMロールに適用します。

変数の確認
cat << ETX

        IAM_ROLE_NAME:  ${IAM_ROLE_NAME}
        IAM_POLICY_ARN: ${IAM_POLICY_ARN}

ETX
コマンド
aws iam attach-role-policy 
        --role-name ${IAM_ROLE_NAME} 
        --policy-arn ${IAM_POLICY_ARN}

結果:

  (戻り値なし)

3. 事後作業

ロールポリシの確認

コマンド
aws iam list-attached-role-policies 
        --role-name ${IAM_ROLE_NAME}

結果(例):

  {
    "AttachedPolicies": [
      {
        "PolicyName": "CodeBuildServiceRolePolicy",
        "PolicyArn": "arn:aws:iam::XXXXXXXXXXXX:policy/CodeBuildServiceRolePolicy"
      }
    ]
  }

完了

続きを読む

[JAWS-UG CLI] S3: #19 バケットの削除

AWS CLIでS3バケットを削除してみます。

前提条件

S3への権限

S3に対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.28
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <s3のフル権限を許可されているプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <s3のフル権限を許可されているプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<s3のフル権限を許可されているプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <s3のフル権限を許可されているプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1

1. 事前作業

1.1. バケット名の指定

削除するバケット名を指定します。

変数の設定
S3_BUCKET_PREFIX='<削除するバケット名を特定する文字列>'
コマンド
S3_BUCKET_NAME=$( 
        aws s3api list-buckets 
          --query "Buckets[?contains(Name,`${S3_BUCKET_PREFIX}`)].Name" 
          --output text 
) 
        && echo ${S3_BUCKET_NAME}

結果(例):

  <削除するバケット名>

1.2. バケットのリージョン確認

バケットのリージョンを確認します。

コマンド
aws s3api get-bucket-location 
        --bucket ${S3_BUCKET_NAME}

結果(例):

  {
    "LocationConstraint": "ap-northeast-1"
  }

1.3. バケットの中身の確認

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/

結果(例):

  (戻り値なし)

もしオブジェクトが存在する場合は、削除します。

コマンド
aws s3 rm s3://${S3_BUCKET_NAME} 
        --recursive

結果(例):

  delete: s3://<削除するバケット名>/<削除するオブジェクト名>

2. バケットの削除

コマンド
aws s3api delete-bucket 
        --bucket ${S3_BUCKET_NAME}

結果(例):

  (戻り値なし)

3. 事後確認

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/

結果(例):

  A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist

完了

続きを読む

[JAWS-UG CLI] S3: #18 ソースコード用バケットの作成

.. 事前作業2. S3バケットの作成 (ソースコード保存用)

前提条件

S3への権限

S3に対してフル権限があること。

STSへの権限

STSに対してget-caller-identityサブコマンドの実行権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.28
コマンド
aws --version

結果(例):

  aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        AWS_ID               (0.3) ${AWS_ID}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <s3にフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  AWS_ID               (0.3) XXXXXXXXXXXX

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials 
       | grep '[' 
       | sed 's/[//g' | sed 's/]//g'

結果(例):

  iamFull-prjz-mbpr13
  <s3にフル権限のあるプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<s3にフル権限のあるプロファイル>'

0.2. リージョンの指定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

0.3. AWS IDの取得

変数の設定
AWS_ID=$( 
        aws sts get-caller-identity 
          --query 'Account' 
          --output text 
) && echo ${AWS_ID}

結果(例)

  XXXXXXXXXXXX

最終確認

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        AWS_ID               (0.3) ${AWS_ID}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <s3にフル権限のあるプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  AWS_ID               (0.3) XXXXXXXXXXXX

1. 事前作業

1.1. バケット名の指定

変数の設定
S3_BUCKET_NAME="source-${AWS_DEFAULT_REGION}-${AWS_ID}" 
        && echo ${S3_BUCKET_NAME}

同名バケットが存在しないことを確認します。

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/

結果(例):

  A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist

2. バケットの作成

変数の確認
cat << ETX

        S3_BUCKET_NAME:     ${S3_BUCKET_NAME}
        AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}

ETX
コマンド
aws s3api create-bucket 
        --bucket ${S3_BUCKET_NAME} 
        --create-bucket-configuration "LocationConstraint=${AWS_DEFAULT_REGION}"

結果(例):

  {
    "Location": "http://source-northeast-1-XXXXXXXXXXXX.s3.amazonaws.com/"
  }

3. 事後確認

3.1. バケットの存在の確認

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/

結果(例):

  (戻り値なし)

エラーが出なければOKです。

3.2. バケットのリージョンの確認

コマンド
aws s3api get-bucket-location 
        --bucket ${S3_BUCKET_NAME}

結果(例):

  {
    "LocationConstraint": "ap-northeast-1"
  }

完了

続きを読む