AWS コンテナ設計・構築本格入門の書籍をやってみた
目次
こんにちは!スカイアーチHRソリューションズのKotaroです。
今回は書籍「AWS コンテナ設計・構築本格入門」を一通り行ったので、エラーが出た箇所について記載していきます。
こちらの記事で紹介させていただいた通り、初学者には難しい内容となっています。特にコンテナの仕組みが分からないと何をやっているのか分からなくなるため、Dockerについて知らない方は、以下の書籍が図があり分かりやすいため事前に見ておくといいと思います。
エラー発生箇所
では早速ですがエラー発生箇所について記載していきます。(2023年8月に実施)
Dockerへの認証
P.242「Dockerへの認証」のところで以下のエラーが発生。
auth error An error occurred (UnrecognizedClientException) when calling the GetAuthorizationToken operation: The security token included in the request is invalid. Error: Cannot perform an interactive login from a non TTY device
エラー内容から推測すると権限周りのエラーだということは分かったので、直前に変えたIAMロールやAMTCをオフにした設定が怪しいと思いました。
Cloud9の場合、デフォルトではCloud9環境を作成したIAMユーザのCredential情報が入っています。
Name | Value | Type | Location |
profile | <not set> | None | None |
access_key | ****************S3GS | shared-credentials-file | |
secret_key | ****************MFDa | shared-credentials-file | |
region | ap-northeast-1 | config-file | ~/.aws/config |
AMTCをオフにしても上記のアクセスキーなどの情報が変わらなかったので、~/.aws/credentialsに記載があるアクセスキーなどの情報をコメントアウトしたところ下記のように変わりました(変更したIAMロールに書き換わった)。
Name | Value | Type | Location |
profile | <not set> | None | None |
access_key | ****************N3IO | iam-role | |
secret_key | ****************yTLK | iam-role | |
region | ap-northeast-1 | imds |
自動では変わらなかったため注意が必要(リロードや再起動などで変わるのかもしれません)。
この後、ログインできることを確認出来た。
IAMロールの権限
指定されたIAMロール「sbcntr-cloud9-role」だとCloud9を起動できないエラーが発生。
「sbcntr-cloud9-role」に「AWSCloud9SSMInstanceProfile」ポリシーをアタッチすることで起動出来た。
CodeDeployによるデプロイメントエラー
P.326でいつまで経ってもinstallのタスクが終わらずステップ1が終了しないエラーが発生した。すでに公式でもアナウンスがあり、以下の記事のSecret Managerの設定手順の追加で値を設定することでエラーが解消出来た。
また、ECSのサービスからタスクを選択し、タスクサービスをStoppedにすることでエラー内容を確認することが出来る。
CodeBuildの実行
P.350でビルドが失敗するエラーが発生した。buildspec.ymlの以下のようにinstall部分をコメントアウトすることでビルドが成功することが確認出来た。
phases:
# install:
# runtime-versions:
# docker: 19
runtime-versionでdockerは指定できなくなっているので注意が必要。
CodePipelineの実行(IAMPolicy)
P.360でCodePipelineを実行したところ、sourceのところで失敗した。
The provided role cannot be assumed: 'Access denied when attempting to assume the role 'arn:aws:iam::[AWS_ACCOUNT_ID]:role/service-role/sbcntr-pipeline-role''
sbcntr-pipeline-roleに以前作成した「sbcntr-AccessingCodeCommitPolicy」をアタッチすることでエラーが解消した。
CodePipelineの実行(taskdef.json)
P.360でCodePipelineを実行したところ、deployのところで失敗した。
Image URI container named: <IMAGE1_NAME> does not match any of the missing containers in the task definition file provided.
<IMAGE1_NAME>がマッチしないという事でした。P.357でタスク定義(taskdef.json)を作成しているが、マネジメントコンソールからjsonをコピーしたものだと”image”の値が別のものになっている。それを”<IMAGE1_NAME>”にすることで解消した。
また、マネジメントコンソールからjsonをコピーしたものだと”tags”: []が入っているため、以下のエラーが発生した。
Tags can not be empty.
“tags”: []←これを消去することでエラーを回避できた。
実際に行ってみて
初めてハンズオンを行った時はよく分からなかったが、今回2回目だったので最後まで完走することができた。
DockerやCICDも学べたのでとても勉強になった。ECSのUIが2023年末に変わる予定とのことですので、同じマネジメントコンソール上で実施したい方は2023年中にやるのがいいと思いました。
以上、エラーで詰まった方の参考になれば幸いです。