ここまでの例はDockerコンテナを実行させることに焦点を絞ったものでした。そのため、コンテナ内の処理内容は簡素なものです。しかし実際には、コンテナ実行はAWSのサービスと組み合わせることでさらに多様な用途への応用が可能です。
本章では、Fargateによるコンテナ処理と「Amazon S3」を組み合わせた以下の処理の実現方法を解説します。
コンテナ実行時に「Amazon S3」にアクセスするためには、タスクロール(※先述)でS3にアクセスする権限を付与する必要があります。ここではその手順も含めて解説します。
入力ファイルを配置するためのS3バケットを作成し、PDFをアップロードします。
1. 入力ファイル[input.pdf]を用意します。
2. 以下のURLにアクセスし、Amazon S3を開きます。
https://console.aws.amazon.com/s3/
3. 画面左にある左のナビゲーションペインから「汎用バケット」を選択します。
4. ナビゲーションバーでS3バケットを作成するリージョン(※)を選択してください。
(※):
S3に作るバケットは『〔手順4-4〕 AWS ECR上へコンテナをpushする』のリージョンと同一のものにする必要があります。
5. 「バケットを作成」を選択してください。

6. 以下の設定をした後、「バケットを作成」を選択します。
本例のフルバケット名は以下の値となります。
fargate-toolapi-test-bucket-<aws_account_id>-<region>-an
(※1):
名前空間を「グローバル」にすることもできます。しかしその場合は、そのリージョンで唯一無二の名前をつける必要があります。そのため、特別な理由が無い限りは「アカウントのリージョナル名前空間」にする方が無難です。
(※2):
バケット内でフォルダを作る場合は必須です。
例えば、入力PDF用フォルダと出力PDF用フォルダを分けることができます。
7. 画面左にある左のナビゲーションペインから「汎用バケット」を選択し、先ほど作成したバケットの「オブジェクト」タブを選択します。
8. 「アップロード」を選択し、[input.pdf]を選択してAmazon S3にアップロードします。
これでS3へのアップロードが完了しました。
9. 「S3 URI」を取得するために、アップロードが完了した「input.pdf」を選択します。
このとき「S3 URI」は「プロパティ」タブに表示されます。この値を用いて、[input.pdf]を指定することになります。

例えば、今回のS3 URIは以下の値になります。
s3://fargate-toolapi-test-bucket-<aws_account_id>-<region>-an/input.pdf
タスクロールにするために、「Amazon S3」へのアクセス権限を付与したAmazon ECS用のロールが必要です。AWS IAM上で必要なロールを作成します。
1. 以下のURLにアクセスし、「AWS IAM」管理画面を開きます。
https://console.aws.amazon.com/iam/
2. IAMコンソール左側にあるナビゲーションペインから「ロール」を選択します。
3. 「ロールを作成」を選択します。

4. 以下の設定を選び、「次へ」を押します

5. 以下の手順でロールにポリシーを追加し、「次へ」を押します。
(※):
今回はテストのために全アクセス権限許可のポリシーを付与しています。
実業務でS3を扱う場合は用途に応じて適切にポリシーを管理してください。

6. ロール名を記入し、「ロールを作成」を選択します。(本例ではfargate-toolapi-s3-test-taskrole)

これでS3の操作権限を付与した、タスクロールに指定可能なロールの作成が完了しました。
Fargate用のDockerコンテナを作成します。コンテナには透かしの挿入処理、S3上のファイルを扱う処理を記述します。
(※)
今回は商用利用可能な「IPAGothic」をフォントファイルとして使用します。
以下のURLから取得可能です。
https://moji.or.jp/ipafont/ipa00303/
1. 空のディレクトリを用意し、用意した3つのファイルを配置します。
2. 『〔手順1-1〕 Dockerコンテナの作成』の「2.」「3.」と同じ手順で[entrypoint.sh]を生成・記述します。
このとき、[entrypoint.sh]の内容には以下の変更点があります。
【entrypoint.shの内容】
#!/bin/bash
set -eu
aws s3 cp s3://fargate-toolapi-test-bucket-<aws_account_id>-<region>-an/input.pdf "/tmp/input.pdf"
AHPDFToolCmd80 -setTextWatermark -text textWaterMark -font -name IPAGothic -d /tmp/input.pdf -o /tmp/out_textWatermark.pdf
aws s3 cp /tmp/out_textWatermark.pdf s3://fargate-toolapi-test-bucket-<aws_account_id>-<region>-an/output_only/
3.『〔手順1-1〕 Dockerコンテナの作成』の「4.」「5.」と同じ手順で[Dockerfile]を生成・記述します。
このとき、[Dockerfile]の内容には以下の変更点があります。
【Dockerfileの内容】
FROM public.ecr.aws/amazonlinux/amazonlinux:2023
RUN dnf install -y unzip
COPY AHPDFToolLib80-8.0-MR5.x86_64.rpm /tmp/
RUN rpm -i /tmp/AHPDFToolLib80-8.0-MR5.x86_64.rpm
#AWS CLIのインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \
-o "/tmp/awscliv2.zip" && \
unzip /tmp/awscliv2.zip -d /tmp && \
/tmp/aws/install
# ライセンスファイル[ptalic.dat] をコピー
COPY ptalic.dat /usr/AHPDFToolLib80/License
# ============================
# 環境変数の設定(正しい書式)
# ============================
ENV PTL80_HOME="/usr/AHPDFToolLib80"
ENV PTL80_LIB_FOLDER="${PTL80_HOME}/lib"
ENV PTL80_BIN_FOLDER="${PTL80_HOME}/ToolCmd"
ENV PTL80_LICENSE_FOLDER="${PTL80_HOME}/License"
ENV PTL80_ETC_FOLDER="${PTL80_HOME}/fontconfig"
ENV PTL80_ICC_FOLDER="${PTL80_HOME}/icc"
ENV PTL80_LIC_PATH="${PTL80_LICENSE_FOLDER}"
ENV PTL80_FONT_CONFIGFILE="${PTL80_ETC_FOLDER}/font-config.xml"
ENV PTL80_ICCPROFILE_PATH="${PTL80_ICC_FOLDER}"
ENV LD_LIBRARY_PATH="${PTL80_LIB_FOLDER}"
# PATH 追加
ENV PATH="${PATH}:${PTL80_BIN_FOLDER}"
#Tool API用フォントファイルの追加
WORKDIR /usr/AHPDFToolLib80/fonts
COPY ipag.ttf /usr/AHPDFToolLib80/fonts
# 実行用ファイル追加
COPY entrypoint.sh /tmp/entrypoint.sh
RUN chmod -R 755 /tmp/entrypoint.sh
ENTRYPOINT ["/tmp/entrypoint.sh"]
4. 『〔手順1-1〕 Dockerコンテナの作成』の「6.」と同じ手順でDockerコンテナをビルドします。
このとき、以下の変更点があります。
docker buildx build -t fargate-toolapi-s3-test .
AWS ECR上にリポジトリを作り、今回の処理のコンテナをpushします。
1. 『〔手順2-2〕 AWS ECR上へコンテナをpushする』の「1.」~「5.」の手順と同じ手順でコンテナをpushします。
イメージ名・リポジトリ名の変更を反映したLinuxコンソール実行コマンドは以下の通りです。
aws login
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
aws ecr create-repository --repository-name fargate-toolapi-s3-test-repo --region <region>
docker tag fargate-toolapi-s3-test <aws_account_id>.dkr.ecr.<region>.amazonaws.com/fargate-toolapi-s3-test-repo
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/fargate-toolapi-s3-test-repo
AWS ECRにあるコンテナをAWS Fargate上で実行します。実行に成功するとAmazon S3上に出力PDFがアップロードされます。
1. 『〔手順2-3〕 AWS Fargate上でコンテナを実行する』の「1.」~「7.」と同じ手順でAWS ECSにアクセスし、クラスターを作成します。
このとき、以下の変更点があります。
2. 『〔手順2-3〕 AWS Fargate上でコンテナを実行する』の「8.」~「10.」と同じ手順でタスク定義を作成します。
このとき、以下の変更点があります。

3. 『〔手順2-3〕 AWS Fargate上でコンテナを実行する』の「11.」~「13.」と同じ手順でタスクを実行します。
このとき、以下の変更点があります。
4. 実行後、『〔手順4-1〕 Amazon S3にPDFファイルをアップロードする』で作成したAmazon S3バケットにアクセスします。
5. [output_only/]フォルダが作成されていますので、選択します。これはコンテナによって作成された出力ファイル用フォルダです。
フォルダ内の[out_textWatermark.pdf]を選択してダウンロードします。

ダウンロードしたPDFを確認すると、「textWaterMark」という文字透かしが入っています。
