Actions と Terraform を使用して Docker イメージ GitHub を構築して Amazon ECR にプッシュする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Actions と Terraform を使用して Docker イメージ GitHub を構築して Amazon ECR にプッシュする

作成者: R™ka Modi (AWS)

コードリポジトリ: docker-ecr-actions-workflow

環境:本稼働

テクノロジー: DevOps、コンテナとマイクロサービス、インフラストラクチャ

ワークロード:その他すべてのワークロード

AWS サービス: Amazon ECR

[概要]

このパターンでは、再利用可能な GitHub ワークフローを作成して Dockerfile を構築し、その結果のイメージを Amazon Elastic Container Registry (Amazon ECR) にプッシュする方法を説明します。このパターンは、Terraform と GitHub Actions を使用して Dockerfiles の構築プロセスを自動化します。これにより、人為的ミスの可能性が最小限に抑えられ、デプロイ時間が大幅に短縮されます。

GitHub リポジトリのメインブランチへの GitHub プッシュアクションにより、リソースのデプロイが開始されます。ワークフローは、 GitHub 組織とリポジトリ名の組み合わせに基づいて一意の Amazon ECR リポジトリを作成します。次に、Dockerfile イメージを Amazon ECR リポジトリにプッシュします。

前提条件と制限

前提条件

  • アクティブな AWS アカウント。

  • アクティブな GitHub アカウント。

  • GitHub リポジトリ

  • Terraform バージョン 1 以降がインストールされ、設定されている。

  • Terraform バックエンド 用の Amazon Simple Storage Service (Amazon S3) バケット。

  • Terraform 状態ロックと整合性のための Amazon DynamoDB テーブル。テーブルには、タイプが LockIDの という名前のパーティションキーが必要ですString。これが設定されていない場合、状態ロックは無効になります。

  • Terraform の Amazon S3 バックエンドを設定するアクセス許可を持つ AWS Identity and Access Management (IAM) ロール。設定手順については、Terraform ドキュメント を参照してください。

機能制限

この再利用可能なコードは、 GitHub アクションでのみテストされています。

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon ECR リポジトリ

  • GitHub アクション

  • Terraform

ターゲットアーキテクチャ

再利用可能な GitHub ワークフローを作成して Dockerfile を構築し、Amazon ECR にイメージをプッシュするワークフロー。

この図表は、以下を示すものです:

1. ユーザーは、Dockerfile テンプレートと Terraform テンプレートを GitHub リポジトリに追加します。

2. これらの追加により、 GitHub アクションワークフローが開始されます。

3. ワークフローは、Amazon ECR リポジトリが存在するかどうかをチェックします。そうでない場合は、 GitHub 組織とリポジトリ名に基づいてリポジトリが作成されます。

4. ワークフローは Dockerfile を構築し、Amazon ECR リポジトリにイメージをプッシュします。

ツール

Amazon サービス

その他のツール

  • GitHub アクションは GitHub プラットフォームに統合され、 GitHub リポジトリ内でワークフローを作成、共有、実行する際に役立ちます。 GitHub アクションを使用して、コードの構築、テスト、デプロイなどのタスクを自動化できます。

  • Terraform は、クラウドおよびオンプレミスインフラストラクチャの作成と管理 HashiCorp に役立つ のオープンソースの Infrastructure as Code (IaC) ツールです。

コードリポジトリ

このパターンのコードは、 GitHub Docker ECR Actions Workflow リポジトリにあります。

  • GitHub Actions を作成すると、Docker ワークフローファイルはこのリポジトリの /.github/workflows/フォルダに保存されます。このソリューションのワークフローは workflow.yaml ファイルにあります。

  • e2e-test フォルダには、リファレンスとテスト用のサンプル Dockerfile が用意されています。

ベストプラクティス

  • Dockerfiles を記述するためのベストプラクティスについては、Docker ドキュメント を参照してください。

  • Amazon ECR の VPC エンドポイントを使用します。VPC エンドポイントは PrivateLink、プライベート IP アドレスを介して Amazon ECR APIs にプライベートにアクセスできるテクノロジーである AWS を利用しています。Fargate 起動タイプを使用する Amazon ECS タスクの場合、VPC エンドポイントにより、タスクはパブリック IP アドレスをタスクに割り当てることなく、Amazon ECR からプライベートイメージをプルできます。

エピック

タスク説明必要なスキル

OpenID Connect を設定します。

OpenID Connect (OIDC) プロバイダーを作成します。このアクションで使用される IAM ロールの信頼ポリシーでプロバイダーを使用します。手順については、 GitHub ドキュメントの「Amazon Web Services での OpenID Connect の設定」を参照してください。

AWS 管理者、AWS DevOps、AWS 全般

GitHub リポジトリのクローンを作成します。

GitHub Docker ECR Actions Workflow リポジトリをローカルフォルダにクローンします。

$git clone https://github.com/aws-samples/docker-ecr-actions-workflow
DevOps エンジニア
タスク説明必要なスキル

Docker ワークフローを開始するイベントをカスタマイズします。

このソリューションのワークフローは workflow.yaml にあります。このスクリプトは現在、workflow_dispatchイベントを受信したときにリソースをデプロイするように設定されています。イベントを に変更workflow_callし、別の親ワークフローからワークフローを呼び出すことで、この設定をカスタマイズできます。

DevOps エンジニア

ワークフローをカスタマイズします。

workflow.yaml ファイルは、動的で再利用可能な GitHub ワークフローを作成するように設定されています。このファイルを編集してデフォルト設定をカスタマイズすることも、 workflow_dispatchイベントを使用してデプロイを手動で開始する場合は、 GitHub アクションコンソールから入力値を渡すこともできます。

  • 正しい AWS アカウント ID とターゲットリージョンを指定してください。

  • Amazon ECR ライフサイクルポリシーを作成し (サンプルポリシー を参照)、それに応じてデフォルトパス (e2e-test/policy.json) を更新します。

  • ワークフローファイルには、入力として 2 つの IAM ロールが必要です。

    • Terraform の Amazon S3 バックエンドを設定するアクセス許可を持つ IAM ロール (「前提条件」セクションを参照)。それに応じて、 workload-assumable-role yamlファイルのデフォルトのロール名を更新できます。

    • へのアクセス許可を持つ IAM ロール GitHub。このロールは、Amazon ECR ポリシーで Amazon ECR オペレーションを制限するためにも使用されます。詳細については、data.tf ファイル を参照してください。

DevOps エンジニア

Terraform テンプレートをデプロイします。

ワークフローは、設定した GitHub イベントに基づいて、Amazon ECR リポジトリを作成する Terraform テンプレートを自動的にデプロイします。これらのテンプレートは、Github リポジトリ のルートにある.tfファイルとして使用できます。

AWS DevOps、 DevOps エンジニア

トラブルシューティング

問題ソリューション

Amazon S3 と DynamoDB を Terraform リモートバックエンドとして設定する際の問題またはエラー。

Terraform ドキュメントの指示に従って、リモートバックエンド設定に必要なアクセス許可を Amazon S3 および DynamoDB リソースにセットアップします。

workflow_dispatch イベントでワークフローを実行または開始できません。

workflow_dispatch イベントからデプロイするように設定されたワークフローは、ワークフローがメインブランチにも設定されている場合のみ機能します。

関連リソース