JAWS-UG の最大のイベントである JAWS DAYS 2022 ではハンズオンも開催されており、3種類のハンズオンがありました
その中でも個人的に一番気になっていたのが「コンテナサービスをCI/CDパイプラインでデプロイしよう」です
私は今回ボランティアスタッフとして参加したため、イベントの次の日を丸一日使ってハンズオンをやりました
内容や構成を理解することを重視してハンズオンを進めましたが、これがかなり濃密なハンズオンなのです
私にアプリケーション開発の経験がないことも相まってかなり大変でした・・・
ただ、非常に勉強になったため学びを残しておこうと思います
タグの付け方によってコマンドの形態が違う
まず前提として、CLI でのタグ付け操作の方法は以下の2パターンによって異なります
- リソース作成時にタグも一緒に作る
- 既存のリソースへにタグを追加する
ハンズオンでは「リソース作成時にタグを一緒に作る」手順を踏んでいましたが、コマンド形態に注意が必要だと思いました
具体的にそう思ったのは以下の点です
- オプションには、
--tags
ではなく--tag-specifications
を使う - タグの Key-Value 以外に
ResourceType=xxxx
も指定する必要がある
例えば、EBS volume 作成時は以下のようなコマンドになります
aws ec2 create-volume \
--availability-zone us-east-1a \
--volume-type gp2 \
--size 80 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=purpose,Value=production},{Key=cost-center,Value=cc123}]'
対して、AMI にタグを後付けする場合は以下のようなコマンドになります
aws ec2 create-tags \
--resources ami-78a54011 \
--tags Key=Stack,Value=production
ログインしているIAMユーザーとは別に、cloud9にはAWS Managed Temporary Credentialsというポリシーがついている
ハンズオンの中に、cloud9のクレデンシャル情報を編集する手順が出てきました
(画像はハンズオンシナリオから引用しています)
この AWS Managed Temporary Credentials(長いので、以下 AMTC と略します)は cloud9 を作成したときに自動的に作成されるクレデンシャルです
コンソルにログインしている IAM ユーザーが持っている権限と AMTC、両方で許可されていないと AWS リソースに対するコマンドは実行できません
ただ注意点が一つあり、一部制約はあるものの AMTC は Administrator に近い権限を保有しています
ゆえに、セキュリティを考えると AMTC はハンズオンシナリオの通り無効化し、cloud9 のインスタンスに適切な権限を与えた IAM ロールをアタッチすることがベストプラクティスと思われます
ちなみに、CLI 専門支部で使っている cloud9 を確認したら、同じく AMTC はオフになっていました
設定したことを完全に忘れていました。。。
AWS CLI で ECR にログインする時のベストプラクティス
ハンズオンシナリオで ECR にログインする手順があるのですが、ちょっと一工夫加えたコマンドでした
aws ecr get-login-password \
--region ap-northeast-1 | \
docker login \
--username AWS \
--password-stdin `echo ${AccountID}`.dkr.ecr.ap-northeast-1.amazonaws.com
調べてみると、標準出力にパスワードを表示させないために工夫されたコマンドでした
ざっと説明すると、docker login
コマンドには --password-stdin
というオプションがあります
これはパスワードを標準出力に表示させず、ファイルなどからパスワードを取得するためのオプションです
ハンズオンでは ecr get-login-password
コマンドでパスワードを取得し、パイプで docker login
コマンドにパスワードを渡しています
こうすることで、標準出力にパスワードを表示させずに済みます
ECR の VPC エンドポイント作る時は、3種類のエンドポイントが必要
プライベートサブネットなどから ECR リポジトリにアクセスするためには、以下の3種類の VCP エンドポイントが必要です
- com.amazonaws..ecr.dkr
- com.amazonaws..ecr.api
- com.amazonaws..s3(ゲートウェイ型)
ECR のエンドポイントは dkr
と api
の2種類が必要なこと、S3のゲートウェイ型エンドポイントも必要なこと、このあたりで引っかかりそうだと思いました
最後に
AWS CLI、コンテナ、CI/CDパイプライン、Blue/Green デプロイ、このあたりの単語が「完全に理解した」状態な方にとって、理解を深めるのにうってつけのハンズオンだと思いました
この記事が誰かの助けになれば幸いです