📕

AWS コンテナ設計・構築本格入門で詰まった箇所

2023/08/30に公開

はじめに

2023/8/25~8/30にかけてSB Creative出版の「AWS コンテナ設計・構築本格入門」を一通り行ったので、詰まった箇所について備忘録をして残しておく。
出版日が2021/10/26ということで書籍通りではうまくいかない箇所があったり、書籍の内容が不足しているところがあったためどなたかの役にも立てば幸いです。

注意すべき点

1. 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  

この後、ログインできることを確認できた。

2. IAMロールの権限

指定されたIAMロール「sbcntr-cloud9-role」だとCloud9を起動できない。
「sbcntr-cloud9-role」に「AWSCloud9SSMInstanceProfile」ポリシーをアタッチすることで起動できる。

3. CodeDeployによるデプロイメントエラー

p.326でいつまで経ってもinstallのタスクが終わらずステップ1が終了しない状態になった。すでに公式でもアナウンスがあり、Secret Managerから追加で値を設定することでエラーが解消出来ます。
また、ECSのサービスからタスクを選択し、タスクサービスをStoppedにすることでエラー内容を確認することが出来る。
https://www.sbcr.jp/support/140444/
https://dev.classmethod.jp/articles/codeeploy-install-event-never-ends-on-ecs/

4. CodeBuildの実行

p.350でビルドが失敗する事態が発生した。buildspec.ymlの以下のようにinstall部分をコメントアウトすることでビルドが成功することが確認できた。

buildspec.yml
phases:
    # install:
    #   runtime-versions:  
    #       docker: 19

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/available-runtimes.html

5. 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」をアタッチすることでエラーが解消した。

6. 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.

p.357でタスク定義(taskdef.json)を作成しているが、マネジメントコンソールからコピーしたものだと"image"の値が別のものになっている。それを"<IMAGE1_NAME>"にすることで解消した。
また、コピーしたものだと"tags": []が入っているため、以下のエラーが発生した。

Tags can not be empty.

"tags": []←これを消去することでエラーを回避できる。

終わりに

初めてハンズオンを行った時はよく分からなかったが、今回2回目だったので最後まで完走することができた。
DockerやCICDも学べたのでとても勉強になった。ECSのUIが2023年末に変わる予定とのこと。

Discussion