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

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

ただいまの
回答率

90.42%

  • JavaScript

    18022questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Python

    9750questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • AWS(Amazon Web Services)

    2239questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • bash

    714questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

AWSにおいてEBSスナップショットを作成してEC2を復元させるシェルスクリプトについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 78

momo2

score 7

宜しくお願いします。
現在、AWSのEC2でwindows server 2016を作成しております。
複数台作成はできるのですが、そのscriptについて教えていただきたいです。
aws cliでは、コマンドを作れるのですが、スクリプトで書けず、止まっています。
~やりたい内容~

  1.   インスタンス作成(original)
    (大本となるインスタンスを完成させる)
  2.   2-1
    大本のインスタンスを作った、ボリュームからスナップショットを作成する。
    2-2
    そのスナップショットから複製に使うボリュームを作成する。
    (必要分だけ、ボリュームを作成する)
  3.   3-1.
    新しくインスタンスを作成する(これは、複製するインスタンスになる)
    (必要分だけ、インスタンスを作成する)
    (*これに関しては、事前に手動での作成も考えている)
    3-2.
    全てボリュームをデタッチする。
  4.   2.で作ったボリュームを新しい3.で作ったインスタンスにアタッチする。
  5.   4.でアタッチした後、インスタンスを起動する。
  6.   新インスタンスに接続する。
    AWS cli のコマンドはありますが、.shのファイルにそのまま記載しても、当たり前ではありますが、実行はされず、
    困っています。
    纏めて、1つのファイル実行で、複数(~10数台)を起動させたい。
    cronなどは使わず。
#!/usr/bin/env bash
_INSTANCE_ID="${i-xxxxxxxxxxx}"
_ROOT_DEVICE="/dev/sda1"
_CHECK_INTERVAL=60
echo "処理を続行しますか? [Y/n]"
read ANSWER
case ${ANSWER} in
  [yY]) echo "処理を続行します..."
        ;;
  [nN]) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..."
        exit 0 ;;
     *) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..."
        exit 0 ;;
esac
if [ -f tmp/snapshot_ids ];then
  rm tmp/snapshot_ids
fi
for ebs in $(aws ec2 describe-instances --filters Name=instance-id,Values=${_INSTANCE_ID} --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId' --output text);
do
  _SNAPSHOT_ID=$(aws ec2 create-snapshot --volume-id ${ebs} | jq -r .SnapshotId)
  echo ${_SNAPSHOT_ID} >> tmp/snapshot_ids
  _DEVICE=$(aws ec2 describe-volumes --volume-ids ${ebs} --query Volumes[].Attachments[].Device --output text)
  if [ "${_DEVICE}" == "${_ROOT_DEVICE}" ];then
    aws ec2 create-tags --resources ${_SNAPSHOT_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="OS"
  else
    aws ec2 create-tags --resources ${_SNAPSHOT_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="DATA"
  fi
done
if [ `-f tmp/snapshot_ids -a $(wc -l tmp/snapshot_ids | awk '{print $1}') == 2` ];then


↑ここの行で
wc: tmp/snapshot_ids: そのようなファイルやディレクトリはありません
./snapshot.sh: 行 34: -f: コマンドが見つかりません
スナップショットの作成に失敗しました.処理を中断します.
このように表示されてしまいます。(2-1.解決済)
どうかご教示頂きたいです。
宜しくお願いします。
以下、参考にしているURLになります。
リンク内容

*1

<new ver>

#!/usr/bin/env bash
_INSTANCE_ID="i-xxxxxxxxxxxx"
_ROOT_DEVICE="/dev/sda1"
_CHECK_INTERVAL="60"
_OS1="OS1"
_OS1_restore="OS1_restore"

echo "処理を続行しますか? [Y/n]"
read ANSWER
case ${ANSWER} in
  [yY]) echo "処理を続行します..."
        ;;
  [nN]) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..."
        exit 0 ;;
     *) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..."
        exit 0 ;;
esac
if [ -f tmp/snapshot_ids ];then
  rm tmp/snapshot_ids
fi
for ebs in $(aws ec2 describe-instances --filters Name=instance-id,Values=${_INSTANCE_ID} --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId' --output text);
do
  _SNAPSHOT_ID=$(aws ec2 create-snapshot --volume-id ${ebs} | jq -r .SnapshotId)
  echo ${_SNAPSHOT_ID} >> tmp/snapshot_ids
  _DEVICE=$(aws ec2 describe-volumes --volume-ids ${ebs} --query Volumes[].Attachments[].Device --output text)
  if [ "${_DEVICE}" = "${_ROOT_DEVICE}" ];then
    aws ec2 create-tags --resources ${_SNAPSHOT_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value=${_OS1}
  else
    aws ec2 create-tags --resources ${_SNAPSHOT_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="DATA"
  fi
done
#if [ -f tmp/snapshot_ids -a $(cat tmp/snapshot_ids | wc -l) = "2" ];then
#  echo ${_SLACK_CHANNEL} "スナップショットの作成を開始しました..."
#else
#  echo ${_SLACK_CHANNEL} "スナップショットの作成に失敗しました.処理を中断します."
#  exit 1
#fi
aws ec2 wait snapshot-completed --snapshot-ids $(cat tmp/snapshot_ids)
if [ $? == 0 ]; then
  echo "スナップショットの作成が完了しました."
fi
# tmp/snapshot_ids のチェック
if [ ! -f tmp/snapshot_ids ];then
  echo "tmp/snapshot_ids が存在しません.マネジメントコンソールにて処理を継続して下さい."
  exit 1
fi
# ボリュームの作成
echo "スナップショットからボリュームを作成します..."
while read snapshot_id
do
  _DEVICE=$(aws ec2 describe-tags --filters "Name=resource-id,Values=${snapshot_id}" "Name=key,Values=device" --query Tags[].Value --output text)
  _VOLUME_ID=$(aws ec2 create-volume --availability-zone ap-northeast-1a --snapshot-id ${snapshot_id} --volume-type gp2 --query VolumeId --output text)
  if [ "${_DEVICE}" = "/dev/sda1" ];then
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value=${_OS1_restore}
    [ $? == 0 ] && _RESULT_1=0 || _RESULT_1=1
  else
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="DATA_restore"
    [ $? == 0 ] && _RESULT_2=0 || _RESULT_2=1
  fi
done < tmp/snapshot_ids
_RESULT=${_RESULT_1}${_RESULT_2}
if [ "${_RESULT}" == "00" ];then
  echo "ボリュームを作成しました. 引続き処理を続行します."
else
  echo "ボリュームの作成に失敗しました."
fi

*2

if [ $? -eq 0 ]; then
  echo "スナップショットの作成が完了しました."
fi

# tmp/snapshot_ids のチェック
if [ ! -f tmp/snapshot_ids ];then
  echo "tmp/snapshot_ids が存在しません.マネジメントコンソールにて処理を継続して下さい."
  exit 1
fi
# ボリュームの作成
echo "スナップショットからボリュームを作成します..."
while read snapshot_id
do
  _DEVICE=$(aws ec2 describe-tags --filters "Name=resource-id,Values=${snapshot_id}" "Name=key,Values=device" --query Tags[].Value --output text)
  _VOLUME_ID=$(aws ec2 create-volume --availability-zone ap-northeast-1a --snapshot-id ${snapshot_id} --volume-type gp2 --query VolumeId --output text)
  if [ "${_DEVICE}" = "/dev/sda1" ];then
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value=${_OS1_restore}
    [ $? -eq 0 ] && _RESULT_1=0 || _RESULT_1=1
  else
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="DATA_restore"
    [ $? -eq 0 ] && _RESULT_2=0 || _RESULT_2=1
  fi
done < tmp/snapshot_ids
_RESULT=${_RESULT_1}${_RESULT_2}
if [ "${_RESULT}" = "00" ];then
  echo "ボリュームを作成しました. 引続き処理を続行します."
else
  echo "ボリュームの作成に失敗しました."
fi

*3

  _DEVICE=$(aws ec2 describe-tags --filters "Name=resource-id,Values=${snapshot_id}" "Name=key,Values=device" --query Tags[].Value --output text)
  _VOLUME_ID=$(aws ec2 create-volume --availability-zone ap-northeast-1a --snapshot-id ${snapshot_id} --volume-type gp2 --query VolumeId --output text)
  if [ "${_DEVICE}" = "/dev/sda1" ];then
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value=${_OS1_restore}
    [ $? -eq 0 ] && _RESULT_1=0 || _RESULT_1=1
  else
    aws ec2 create-tags --resources ${_VOLUME_ID} --tags Key=device,Value=${_DEVICE} Key=Name,Value="DATA_restore"
    [ $? -eq 0 ] && _RESULT_2=0 || _RESULT_2=1
  fi
done < tmp/snapshot_ids
#_RESULT=${_RESULT_1}${_RESULT_2}
#if [ "${_RESULT}" = "00" ];then
if [ _RESULT_1=0,_RESULT_2=0 ];then
#~set により解読~
++ aws ec2 describe-tags --filters Name=resource-id,Values=snap-xxx Name=key,Values=device --query 'Tags[].Value' --output text
+ _DEVICE=/dev/sda1
++ aws ec2 create-volume --availability-zone ap-northeast-1a --snapshot-id snap-xxx --volume-type gp2 --query VolumeId --output text
+ _VOLUME_ID=vol-xxx
+ '[' /dev/sda1 = /dev/sda1 ']'
+ aws ec2 create-tags --resources vol-xxx --tags Key=device,Value=/dev/sda1 Key=Name,Value=OS1_restore
+ '[' 0 -eq 0 ']'
+ _RESULT_1=0
+ read snapshot_id
+ '[' _RESULT_1=0,_RESULT_2=0 ']'

*4

#条件変更(インスタンス停止したいIDを_INSTANCE1_IDとしました)
#!/usr/bin/env bash
#original#########################
_INSTANCE_ID="i-xxx"
#create instance################## 
_INSTANCE1_ID="i-yyy"
#tag##############################
_OS="OS1"
_OS_restore="OS1_restore"
######################################
_ROOT_DEVICE="/dev/sda1"
_CHECK_INTERVAL="60"
#~~~~~前回のresultの続きボリューム作成後になります。
# インスタンスの停止
echo "インスタンスを停止します..."
aws ec2 stop-instances --instance-ids ${_INSTANCE1_ID}
echo "インスタンスの停止まで待機します..."
aws ec2 wait instance-stopped --instance-ids ${_INSTANCE1_ID}
if [ $? -eq 0 ];then
  echo "インスタンスの停止が完了しました. 引続き処理を続行します."
else
  echo "インスタンスの停止に失敗しました."
  exit 1
fi
# インスタンスからボリュームをデタッチ
echo "インスタンスからボリュームをデタッチします..."
for ebs in $(aws ec2 describe-instances --filters Name=instance-id,Values=${_INSTANCE1_ID} --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId' --output text);
do
  aws ec2 detach-volume --volume-id ${ebs}
done
echo "インスタンスからボリュームをデタッチしました. 引続き処理を続行します."
# インスタンスに付与するボリュームの情報を取得
echo "インスタンスに付与するボリュームの情報を取得します..."
if [ -f tmp/volume_info ];then
  rm tmp/volume_info
fi
for _NAME in _OS_restore DATA_restore
do
  aws ec2 describe-volumes \
    --filters Name=tag-key,Values="Name" Name=tag-value,Values="${_NAME}" \
    | jq -r '[.Volumes[]|.VolumeId,(.Tags[] | select(.Key=="device").Value)]|@csv' >> tmp/volume_info
done
echo "インスタンスに付与するボリュームの情報を取得しました. 引続き処理を続行します."
echo "インスタンスにボリュームをアタッチします..."
_VOLUME_IDS=()
OLDIFS=${IFS}
while read volume_info
do
  IFS=','
  set -- $volume_info
  _VOLUME_ID=$(echo $1 | tr -d '"')
  _DEVICE=$(echo $2 | tr -d '"')
  echo ${_VOLUME_ID}
  _VOLUME_IDS=("${_VOLUME_IDS[@]}" ${_VOLUME_ID})
  aws ec2 attach-volume --volume-id ${_VOLUME_ID} --instance-id ${_INSTANCE1_ID} --device ${_DEVICE}
done < tmp/volume_info
IFS=${OLDIFS}
# インスタンスにボリュームがアタッチされるまで待機する
aws ec2 wait volume-in-use --volume-ids "${_VOLUME_IDS[@]}"
if [ $? -eq 0 ];then
  echo "ボリュームのアタッチが完了しました. 引続き処理を続行します."
else
  echo "ボリュームのアタッチに失敗しました. 処理を中断します."
  exit 1
fi


上記の続きをしました所、アタッチする部分で躓きました。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

インスタンスIDは${}で囲まなくても良いのでは?
環境変数としてi-xxxxxxxxxxxにインスタンスIDが入っているのであればそのままでいいです。

_INSTANCE_ID="${i-xxxxxxxxxxx}"
↓
_INSTANCE_ID="i-xxxxxxxxxxx"

bashでの文字列比較演算子は=です。==ではありません。

if [ "${_DEVICE}" == "${_ROOT_DEVICE}" ];thenif [ "${_DEVICE}" = "${_ROOT_DEVICE}" ];then

以下は、tmp/snapshot_idsが存在し、かつ2行であることを判定したいのですね?
wcコマンドは標準入力から読み込ませるとファイル名を出力しないので、awkコマンドを省略できます。
また、文字列の比較は=であり、2"2"としましょう。

if [ `-f tmp/snapshot_ids -a $(wc -l tmp/snapshot_ids | awk '{print $1}') == 2` ];thenif [ -f tmp/snapshot_ids -a $(cat tmp/snapshot_ids | wc -l) = "2" ];then

以下追記

数値の判定は-eqです

if [ $? == 0 ]; then
  echo "スナップショットの作成が完了しました."
fiif [ $? -eq 0 ]; then
  echo "スナップショットの作成が完了しました."
fi

文字列の比較は=です。

if [ "${_RESULT}" == "00" ];thenif [ "${_RESULT}" = "00" ];then

追記19011

if構文エラーについて

以下は構文間違えています。必ずTrueになります。
やりたいことは_RESULT_1と_RESULT_2が共に0であることですか?

if [ _RESULT_1=0,_RESULT_2=0 ];thenif [ "${_RESULT_1}${_RESULT_2}" = "00" ];then

AWS関係なく、まずはシェルのif構文について正確に理解してください。

aws: error: argument --volume-id: expected one argumentについて

--volume-idに複数のパラメータを渡しているのでしょう。
何が渡されているかset xechoなどで確認してください。

Waiter VolumeInUse failed: Max attempts exceededについて

このエラーが出た場合は再度コマンドを実行します。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/09 22:06 編集

    お返事ありがとうございます。
    ご指摘頂いた箇所につきまして、エラー解決できました。3-1まで、進めることが出来ました。
    ありがとうございます。

    その後、スナップショットまでは、作成出来ましたが、また、そこからボリューム作成しようとするとエラーが表示されます。
    1*以降の部分、また一部ご指摘頂いた箇所訂正し、コードの追加をし、検証しながら、進めていますが、以下のようなエラーが表示されてしまいます。


    処理を続行しますか? [Y/n]
    y
    処理を続行します...
    スナップショットの作成が完了しました.
    スナップショットからボリュームを作成します...
    ボリュームの作成に失敗しました.

    最後のここの箇所が悪いと思うのですが・・・分からず。
    done < tmp/snapshot_ids
    _RESULT=${_RESULT_1}${_RESULT_2}
    if [ "${_RESULT}" == "00" ];then

    キャンセル

  • 2019/01/10 00:02 編集

    追記有難うございます。
    *2のように修正致しましたが、まだ以下のエラーが出てしまいます。

    処理を続行しますか? [Y/n]
    y
    処理を続行します...
    スナップショットの作成が完了しました.
    スナップショットからボリュームを作成します...
    ボリュームの作成に失敗しました.

    ボリューム自体は作成できているようです。
    キー   値
    Name  OS1_restore
    device  /dev/sda1

    上記のようになっています。

    キャンセル

  • 2019/01/10 01:45

    #_RESULT=${_RESULT_1}${_RESULT_2}
    #if [ "${_RESULT}" = "00" ];then
    if [ _RESULT_1=0,_RESULT_2=0 ];then
    echo "ボリュームを作成しました. 引続き処理を続行します."
    else
    echo "ボリュームの作成に失敗しました."
    fi

    上記のように作成しましたら、以下のように成功文が出ました。

    処理を続行しますか? [Y/n]
    y
    処理を続行します...
    スナップショットの作成が完了しました.
    スナップショットからボリュームを作成します...
    ボリュームを作成しました. 引続き処理を続行します.

    コード文が合っているのかは分かりませんが、result1.2共に0であれば成功として処理したつもりです。

    キャンセル

  • 2019/01/10 09:41

    シェルの冒頭で
    set x
    して実行すると実行した(評価した)コードが出力されるので、エラーとなっている箇所や変数に想定しているものが設定されているか確認してください。

    私のほうでは入力値がわからないので、while read snapshot_idループで_RESULT_1と_RESULT_2に0が設定される条件かどうかについてわかりません。

    キャンセル

  • 2019/01/10 22:17 編集

    ありがとうございます。
    *3に追記します。

    if文で、result1で条件が合致した為、result1のみでよかったのかなと思います。
    有難うございます。

    キャンセル

  • 2019/01/10 22:47 編集

    その先も進めておりましたが、最後に起動する前のアタッチするところで躓いてしまいました。
    *4で記載しました。

    この文にあるようにボリュームのIDがおかしいでしょうか?
    error: argument --volume-id: expected one argument
    instance1というものは、途中から別途作成したものを使用し、それを停止させる所から使用する。
    そのinstance1をデタッチして、事前にスナップショットから作成しておいたボリュームをアタッチさせたいのです。

    以下が*4のスクリプトを回した答えになります。
    処理を続行しますか? [Y/n]
    y
    処理を続行します...
    スナップショットの作成が完了しました.
    スナップショットからボリュームを作成します...
    ボリュームを作成しました. 引続き処理を続行します.
    インスタンスを停止します...
    {
    "StoppingInstances": [
    {
    "InstanceId": "i-yyy",
    "CurrentState": {
    "Code": 64,
    "Name": "stopping"
    },
    "PreviousState": {
    "Code": 16,
    "Name": "running"
    }
    }
    ]
    }
    インスタンスの停止まで待機します...
    インスタンスの停止が完了しました. 引続き処理を続行します.
    インスタンスからボリュームをデタッチします...
    {
    "AttachTime": "2019-01-10T11:42:26.000Z",
    "InstanceId": "i-yyy",
    "VolumeId": "vol-zzz",
    "State": "detaching",
    "Device": "/dev/sda1"
    }
    インスタンスからボリュームをデタッチしました. 引続き処理を続行します.
    インスタンスに付与するボリュームの情報を取得します...
    インスタンスに付与するボリュームの情報を取得しました. 引続き処理を続行します.
    インスタンスにボリュームをアタッチします...

    usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
    To see help text, you can run:

    aws help
    aws <command> help
    aws <command> <subcommand> help
    aws: error: argument --volume-id: expected one argument

    usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
    To see help text, you can run:

    aws help
    aws <command> help
    aws <command> <subcommand> help
    aws: error: argument --volume-id: expected one argument

    Waiter VolumeInUse failed: Max attempts exceeded
    ボリュームのアタッチに失敗しました. 処理を中断します.

    キャンセル

  • 2019/01/11 11:38

    ありがとうございます。
    1.
    if構文エラーについて
    以下は構文間違えています。必ずTrueになります。
    やりたいことは_RESULT_1と_RESULT_2が共に0であることですか?
    →いえ、私の間違いです。if文で、if内が合致するならば、else文にはいかないはずなので、if文にあるresult1=0のみで良かったです。
    ですが仰る内容で、
    if [ "${_RESULT_1}${_RESULT_2}" = "00" ];then
    こちらはresult1.2のどちらかが0ならば条件合致すると考えていいのでしょうか?

    2.
    aws: error: argument --volume-id: expected one argumentについて
    --volume-idに複数のパラメータを渡しているのでしょう。
    何が渡されているかset xやechoなどで確認してください。
    →早速、set xで試しながら確認したところ、tagに入っている情報が上手く入手されてないことがわかり、修正しましたら、上手く最後まで進めました。ありがとうございます。

    3.
    Waiter VolumeInUse failed: Max attempts exceededについて
    このエラーが出た場合は再度コマンドを実行します。
    →分かりました。こちらのエラー文については、無視して進めます。

    キャンセル

  • 2019/01/11 13:06

    _RESULT_1または_RESULT_2が"0"かを判定する(or)は-oです。
    if [ "${_RESULT_1}" = "0" -o "${_RESULT_2}" = "0" ];then

    キャンセル

  • 2019/01/11 19:44

    有難うございます。

    + '[' 0 -eq 0 ']'
    + _RESULT_1=0
    + read snapshot_id
    + '[' 0 = 0 -o '' = 0 ']'
    + echo 'ボリュームを作成しました. 引続き処理を続行します.'
    ボリュームを作成しました. 引続き処理を続行します.

    以下のようになり、問題なく動作出来ました。
    ありがとうございます!

    キャンセル

  • 2019/01/11 19:56 編集

    IFS=','
    set -- $volume_info
    _VOLUME_ID=$(echo $1 | tr -d '"')
    _DEVICE=$(echo $2 | tr -d '"')
    echo ${_VOLUME_ID}
    _VOLUME_IDS=("${_VOLUME_IDS[@]}" ${_VOLUME_ID})
    aws ec2 attach-volume --volume-id ${_VOLUME_ID} --instance-id ${_INSTANCE1_ID} --device ${_DEVICE}

    一応、最後までは動作出来ました。本当にありがとうございます!

    それで、すいません、ここの部分について、どのように動作しているのか
    完全には分かっておりません。勉強として、教えていただきたいのですが・・・
    1.
    私の認識では、ここの部分で全ての_VOLUME_IDの引数を集める。
    set -- $volume_info
    _VOLUME_ID=$(echo $1 | tr -d '"')
    _DEVICE=$(echo $2 | tr -d '"')
    echo ${_VOLUME_ID}
    _VOLUME_IDS=("${_VOLUME_IDS[@]}" ${_VOLUME_ID})
    2.
    ここの部分で、その集めてきた_VOLUME_IDを_INSTANCE1_IDにアタッチすると認識してます。
    aws ec2 attach-volume --volume-id ${_VOLUME_ID} --instance-id ${_INSTANCE1_ID} --device ${_DEVICE}
    done < tmp/volume_info

    キャンセル

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

  • JavaScript

    18022questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Python

    9750questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • AWS(Amazon Web Services)

    2239questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • bash

    714questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。