翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 アカウント。
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 にイメージをプッシュするワークフロー。](images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)
この図表は、以下を示すものです:
1. ユーザーは、Dockerfile テンプレートと Terraform テンプレートを GitHub リポジトリに追加します。
2. これらの追加により、 GitHub アクションワークフローが開始されます。
3. ワークフローは、Amazon ECR リポジトリが存在するかどうかをチェックします。そうでない場合は、 GitHub 組織とリポジトリ名に基づいてリポジトリが作成されます。
4. ワークフローは Dockerfile を構築し、Amazon ECR リポジトリにイメージをプッシュします。
ツール
Amazon サービス
Amazon Elastic Container Registry (Amazon ECR) は、安全でスケーラブル、信頼性の高いマネージドコンテナレジストリサービスです。
その他のツール
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
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
Docker ワークフローを開始するイベントをカスタマイズします。 | このソリューションのワークフローは workflow.yaml | DevOps エンジニア |
ワークフローをカスタマイズします。 | workflow.yaml
| DevOps エンジニア |
Terraform テンプレートをデプロイします。 | ワークフローは、設定した GitHub イベントに基づいて、Amazon ECR リポジトリを作成する Terraform テンプレートを自動的にデプロイします。これらのテンプレートは、Github リポジトリ のルート | AWS DevOps、 DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
Amazon S3 と DynamoDB を Terraform リモートバックエンドとして設定する際の問題またはエラー。 | Terraform ドキュメント |
|
|
関連リソース
ワークフローの再利用
(GitHub ドキュメント) ワークフローのトリガー
(GitHub ドキュメント)