AWS

AWS Certificate Manager (ACM) で、SSL/TLS サーバー証明書をダウンロードする方法

**秘密鍵(プライベートキー / Private Key)は、ダウンロードできない。**サーバ証明書しかダウンロードできない。

aws acm get-certificate --region us-east-1 --certificate-arn arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012

アウトプットは以下のように証明書と中間証明書が JSON フォーマットに入っている。

続きを読む

AWS EC2 で、VPC 内の NTP を使う

AWS re:Invent 2017 で、AWS の VPC 内で NTP を提供するという地味だが重要なアナウンスがあった。使い方は以下のとおり。

CentOS 系

sudo yum erase ntp*; sudo yum -y install chrony; sudo service chronyd start

Debian/Ubuntu 系

sudo apt-get remove -y ntp*; sudo apt-get -y install chrony; sudo service chronyd start; apt-get autoremove
続きを読む

AWS EC2 で、AMI を自動的に作成するシェルスクリプト

#!/bin/sh

export DATE_CURRENT=`date +%Y-%m-%d`
export TIME_CURRENT=`date +%Y%m%d%H%M%S`
export PURGE_AFTER_DAYS=30
export PURGE_AFTER=`date -d +${PURGE_AFTER_DAYS}days -u +%Y-%m-%d`
export BACKUP_TAG='backup'
 
# 1-1 Get the list of instances that you want to get backup バックアップを作成したい EC2 インスタンス一覧を取得する
INSTANCES=`aws ec2 describe-tags --filters "Name=resource-type,Values=instance" "Name=key,Values=${BACKUP_TAG}" | awk '{print $3}'`

for INSTANCE in ${INSTANCES}; do
 
  BACKUP=`aws ec2 describe-tags --filters "Name=resource-type,Values=instance" "Name=resource-id,Values=${INSTANCE}" "Name=key,Values=${BACKUP_TAG}" | awk '{print $5}'`
 
  # 1-2 Check if the instance is marked as backup or not タグを見てバックアップ対象かどうかチェックする
  if [ "${BACKUP}" == "true" ]; then
 
    # 1-3 Create a backup バックアップを作成する
    AMI_ID=`aws ec2 create-image --instance-id ${INSTANCE} --name "${INSTANCE}_${TIME_CURRENT}" --no-reboot`
 
    # 1-4 Create a tag for search for later use. 検索に使うタグを作成する
    aws ec2 create-tags --resources ${AMI_ID} --tags Key=PurgeAllow,Value=true Key=PurgeAfter,Value=$PURGE_AFTER
  fi
done
 
# 2-1 Search backups by tag タグを条件にして削除可能なバックアップを検索する
AMI_PURGE_ALLOWED=`aws ec2 describe-tags --filters "Name=resource-type,Values=image" "Name=key,Values=PurgeAllow" | awk '{print $3}'`
 
for AMI_ID in ${AMI_PURGE_ALLOWED}; do
  PURGE_AFTER_DATE=`aws ec2 describe-tags --filters "Name=resource-type,Values=image" "Name=resource-id,Values=${AMI_ID}" "Name=key,Values=PurgeAfter"  | awk '{print $5}'`
 
  if [ -n ${PURGE_AFTER_DATE} ]; then
    DATE_CURRENT_EPOCH=`date -d ${DATE_CURRENT} +%s`
    PURGE_AFTER_DATE_EPOCH=`date -d ${PURGE_AFTER_DATE} +%s`
 
    if [[ ${PURGE_AFTER_DATE_EPOCH} < ${DATE_CURRENT_EPOCH} ]]; then
      # 2-2 Delete backup if it is marked as backup タグを見て削除対象か判定を行い、対象であればバックアップを削除する
      aws ec2 deregister-image --image-id ${AMI_ID}
       
      SNAPSHOT_ID=`aws ec2 describe-images --image-ids ${AMI_ID} | grep EBS | awk '{print $4}'`
      aws ec2 delete-snapshot --snapshot-id ${SNAPSHOT_ID}
    fi
  fi
done
続きを読む

AWS SQS を使う

Jenkins 側

#!/bin/bash

export TARGET_HOST='{"hostname":"http://example1.com","username":"user1","password":"pass1"} \
                    {"hostname":"http://example2.com","username":"user2","password":"pass2"}'

export SQS_QUEUE_NAME='eaxmple_queue'

for TARGET_HOST in ${TARGET_HOSTS}; do

  export SQS_QUEUE_URL=$(aws sqs get-queue-url --queue-name ${SQS_QUEUE_NAME} --output text)
  export SQS_MSG_BODY=${TARGET_HOST}
  aws sqs send-message --queue-url ${SQS_QUEUE_URL} --message-body ${SQS_MSG_BODY}

done
続きを読む
AWS を購読