Open61

awsの勉強。とりあえずblue/green deployやるつもり

kajirikajirikajirikajiri

このエラーに2時間くらい苦戦しているがこれをみるといいらしい。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

service test231 was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster. For more information, see the Troubleshooting section.

ってstackoverflowに書いてた
https://stackoverflow.com/questions/55120107/aws-ecs-unable-to-place-a-task-because-no-container-instance-met-all-of-its-requ

kajirikajirikajirikajiri

なんかわからんけど、ec2インスタンス起動したらdefaultっていうクラスターが増えたなって思ったけど、そういうことか。

By default, your container instance launches into your default cluster. To launch into a non-default cluster, choose the Advanced Details list. Then, paste the following script into the User data field, replacing your_cluster_name with the name of your cluster.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

kajirikajirikajirikajiri

てことはこれですね

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
kajirikajirikajirikajiri

your_clustrer_nameを書き換えて。インスタンス作成。
おっ、コンテナインスタンスができました

kajirikajirikajirikajiri

サービスを更新してみた。codedeployが実行された。成功するかな

kajirikajirikajirikajiri

30分くらい待機したけど終わらない。
というか何で失敗してるのか不明。logでないんですかcodedeploy

kajirikajirikajirikajiri

blue/greenのためにtarget group2つ作ったんだけど、これloadbalancerに紐付けるのって、私ですか?codedeployが勝手にやるのかとおもってるんですが。
やってみよう

kajirikajirikajirikajiri

さっき使ったやつと合体
region変えてねって書いてありますね。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
wget https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py
wget https://s3.amazonaws.com/aws-codedeploy-us-east-1/cloudwatch/codedeploy_logs.conf
chmod +x ./awslogs-agent-setup.py
python awslogs-agent-setup.py -n -r REGION -c s3://aws-codedeploy-us-east-1/cloudwatch/awslogs.conf
mkdir -p /var/awslogs/etc/config
cp codedeploy_logs.conf /var/awslogs/etc/config/
service awslogs restart
kajirikajirikajirikajiri

うーん、起動するときに勝手に実行されるやつだとよくわからん。sshをできるようにしてそれでやろう

kajirikajirikajirikajiri

何回も行ったり来たりしてるから操作は慣れてきた
ただ、既存のポリシーと作る必要があるポリシーがあったりして、めんどい
ドキュメントも全ての箇所にこれは作ってくださいとか書いてないから、ちょっと別のドキュメントみて作る必要あったりで大変

kajirikajirikajirikajiri

あと、元からあったロールに色々足してたら、元とは違うロールになっててよくわかんなくなってきた。コピーして作成みたいなのあったからそれでやろう

kajirikajirikajirikajiri

現状把握、ecsのblue/greenデプロイをしようとしていた。
しかし、うまくいかない、そしてログが見れないのがつらい。
どうやら、cloudwatchのagentとやらを入れると見れる
入れようとしてるがドキュメントが結構大量で辛い
て感じ

kajirikajirikajirikajiri
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  更新します              : amazon-ssm-agent-3.1.127.0-1.x86_64             1/2
  整理中                  : amazon-ssm-agent-3.0.1124.0-1.amzn2.x86_64      2/2
Failed to execute operation: File exists
  検証中                  : amazon-ssm-agent-3.1.127.0-1.x86_64             1/2
  検証中                  : amazon-ssm-agent-3.0.1124.0-1.amzn2.x86_64      2/2

更新:
  amazon-ssm-agent.x86_64 0:3.1.127.0-1

version 3.1がinstallされたっぽいので2.2は超えてるので大丈夫だろう

Amazon EC2 インスタンスでは、CloudWatch エージェントを使用するにはバージョン 2.2.93.0 以降のインスタンスが実行されている必要があります。CloudWatch エージェントをインストールする前に、SSM エージェントを更新するか、インスタンスにインストールしてください (まだの場合)。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-CloudWatch-Agent-on-EC2-Instance-SSM-first.html

kajirikajirikajirikajiri

(オプション) Systems Manager の前提条件を確認する
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-CloudWatch-Agent-on-EC2-Instance-SSM-first.html
ってやつにこれ読んでねってあったら頑張って読んだけど、マジで全部読むしかなかった。
省略できることない。めっちゃ時間かかる
https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html#systems-manager-prereqs

kajirikajirikajirikajiri

インスタンスの一覧がssmのRun commandに表示されていなかったので、頑張ってドキュメント読んでちゃんとやったらやっぱりちゃんと表示されました。いつも通りでした。読み飛ばすなよっていう。はい
https://zenn.dev/link/comments/91c49157f352ec

kajirikajirikajirikajiri

とりあえず ecsが動いてることを確認した。
ログは今の段階で出てるのかな

kajirikajirikajirikajiri

今は出てない。
これで再度codedeployでデプロイすれば出るはず

kajirikajirikajirikajiri

一つ思った。今私がやっているのはblue/greenデプロイ。
今起動しているインスタンスと新しく立ち上げているインスタンスがある。
今起動している方にagentを色々入れていた。
が、新しく立ち上げた方がうまく起動しない、だからログが欲しいのではないか?
ならば、新しく立ち上げ方にagentを入れるべきでは?
しかし、今の方法だと起動済みのインスタンスにしかagentを入れることができない。
やっぱり起動する時のコマンドでうまいことやらないとダメかな。

kajirikajirikajirikajiri

一応これやったらcloudwatch agentがインスタンスに入ってた

#!/bin/bash
sudo yum install amazon-cloudwatch-agent -y
kajirikajirikajirikajiri

思ってたやつじゃない。私が何かを始めたとか、監査ログの雰囲気だった。証跡の作成って書いてあるしな。