マネジメントコンソールからIdentity and Access Management (IAM)を探します。
メニューのユーザーをクリックします。
「ユーザーの作成」をクリックします。
ユーザー名を入力します。
ここでは「admin」としています。
「次へ」をクリックします。
「ポリシーを直接アタッチする」をクリックします。
許可ポリシーで「AdministratorAccess」を探しチェックします。
「次へ」をクリックします。
「ユーザーの作成」をクリックします。
ユーザーが作成されました。
ユーザー名をクリックします。
「セキュリティ認証情報」をクリックします。
「アクセスキーを作成」をクリックします。
「コマンドラインインターフェイス (CLI)」をクリックします。
「上記のレコメンデーションを理解し、アクセスキーを作成します。」をチェックします。
「次へ」をクリックします。
「アクセスキーを作成」をクリックします。
アクセスキーが作成されました。
アクセスキーとシークレットアクセスキーを控えておきます。
マネジメントコンソールからElastic Container Registryを探します。
Private registryのRepositoriesをクリックしプライベートレポジトリに移動します。
「リポジトリを作成」をクリックします。
リポジトリ名を入力します。
ここでは「point-cloud」としています。
「リポジトリを作成」をクリックします。
リポジトリが作成されました。
作成されたリポジトリ名をクリックします。
リポジトリを作成しただけで中のイメージは何もない状態です。
「プッシュコマンドの表示」をクリックします。
プッシュコマンドが表示されます。
1〜4のコマンドを控えておきます。
以降を行うためにはローカルマシンにAWS CLIとDockerがインストールされている必要があります。
以下を参照してインストールを行ってください。
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/getting-started-cli.html
ローカルからコンテナイメージのプッシュを行います。
まずはローカルでコンテナイメージを作成する準備をします。
以下のディレクトリ構成でファイルを用意します
docker/Dockerfile
docker/build/configure.sh
docker/entrypoint.sh
Dockerfile
FROM --platform=linux/x86_64 public.ecr.aws/ubuntu/ubuntu:22.04_stable
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update &&\
apt-get install -y curl unzip jq &&\
apt-get install -y git-core vim binutils &&\
apt-get install -y cmake g++ gcc &&\
apt-get install -y libgdal-dev libfreenect-dev \
libeigen3-dev libtbb-dev \
libavcodec-dev libavformat-dev \
libavutil-dev libboost-thread-dev \
libboost-program-options-dev \
libcgal-dev libcgal-qt5-dev \
libdlib-dev libswscale-dev \
libtbb-dev libqt5opengl5-dev \
qtbase5-dev qt5-qmake \
qttools5-dev qtwebengine5-dev \
qttools5-dev-tools libqt5svg5-dev \
libproj-dev libdlib-dev \
libqt5websockets5-dev xvfb &&\
apt-get clean
WORKDIR /tmp
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" &&\
unzip awscliv2.zip && ./aws/install && rm ./awscliv2.zip
ENV DISPLAY=:1
RUN nohup Xvfb -ac ${DISPLAY} -screen 0 1280x780x24 &
RUN git clone --branch version_2.12.4 --single-branch --recursive https://github.com/cloudcompare/CloudCompare.git
COPY build /tmp/CloudCompare/build
RUN chmod 755 /tmp/CloudCompare/build/configure.sh
RUN cd /tmp/CloudCompare/build &&\
./configure.sh &&\
make &&\
make install &&\
make clean
ENV QT_QPA_PLATFORM=offscreen
COPY entrypoint.sh ./script/entrypoint.sh
RUN chmod 755 ./script/entrypoint.sh
ENTRYPOINT /tmp/script/entrypoint.sh
build/configure.sh
#!/bin/bash
cmake -DCMAKE_BUILD_TYPE=Release\
-DEIGEN_ROOT_DIR=/usr/include/eigen3\
-DCOMPILE_CC_CORE_LIB_WITH_TBB=ON\
-DOPTION_USE_DXF_LIB=ON\
-DOPTION_USE_SHAPE_LIB=ON\
-DINSTALL_EXAMPLE_PLUGIN=ON\
-DINSTALL_EXAMPLE_GL_PLUGIN=ON\
-DINSTALL_EXAMPLE_IO_PLUGIN=ON\
-DINSTALL_QADDITIONAL_IO_PLUGIN=ON\
-DINSTALL_QANIMATION_PLUGIN=ON\
-DINSTALL_QBROOM_PLUGIN=ON\
-DINSTALL_QCOMPASS_PLUGIN=ON\
-DINSTALL_QCANUPO_PLUGIN=ON\
-DDLIB_ROOT=/usr/include\
-DINSTALL_QCSF_PLUGIN=ON\
-DINSTALL_QEDL_PLUGIN=ON\
-DINSTALL_QFACETS_PLUGIN=ON\
-DINSTALL_QHOUGH_NORMALS_PLUGIN=ON\
-DINSTALL_QHPR_PLUGIN=ON\
-DINSTALL_QM3C2_PLUGIN=ON\
-DINSTALL_QPCV_PLUGIN=ON\
-DINSTALL_QPHOTOSCAN_IO_PLUGIN=ON\
-DINSTALL_QPOISSON_RECON_PLUGIN=ON\
-DINSTALL_QSRA_PLUGIN=ON\
-DINSTALL_QSSAO_PLUGIN=ON\
-DBUILD_TESTING=ON\
${PWD}/..
以下のソースコードの中では点群処理を行うソフトウェアであるCloudCompareを利用しています。
CloudCompareはオープンソースでGNU General Public License(GPL)です。
よって以下のソースコードもGNU General Public License(GPL)とします。
entrypoint.sh
#!/bin/bash
set -e
set -x
function error_handler() {
echo 'Task failed'
exit 1
}
trap error_handler ERR
cd /tmp || exit
readonly DATE=$(date +%Y%m%d%H%M%s)
readonly INPUT_FILE_PATH="input-${DATE}"
mkdir "$INPUT_FILE_PATH"
PUT_BODY=$(printf '{"type":"start"}')
PUT_RESPONSE=$(curl -X PUT -s "$POINT_CLOUD_API_URL"/tasks/"$TASK_ID" -H 'Content-Type: application/json' \
-d "$PUT_BODY" -s)
curl -o ./"$INPUT_FILE_PATH"/"$FILE_NAME" "$DOWNLOAD_URL"
cd "$INPUT_FILE_PATH" || exit
eval timeout 5m CloudCompare -SILENT -O "$FILE_NAME" "$CC_OPTION"
for x in *.{las,csv,txt,e57,xyz}
do
if [ -f "$x" ]; then
OUTPUT_FILE_NAME=$x
fi
done
UPLOAD_BODY=$(printf '{"name":"%s"}' "$TASK_ID"/"$OUTPUT_FILE_NAME")
UPLOAD_RESPONSE=$(curl -X POST "$IMAGE_UPLOAD_API_URL" -H 'Content-Type: application/json' \
-d "$UPLOAD_BODY" -s)
PUT_URL=$(echo "$UPLOAD_RESPONSE" | jq -r .signedUrl)
PUT_RESPONSE=$(curl -X PUT -s --upload-file /tmp/"$INPUT_FILE_PATH"/"$OUTPUT_FILE_NAME" "$PUT_URL")
PUT_STATUS=$(echo "$PUT_RESPONSE" | tail -n 1)
FINISH_BODY=$(printf '{"type":"finish","path":"%s"}' "$TASK_ID"/"$OUTPUT_FILE_NAME")
FINISH_RESPONSE=$(curl -X PUT -s "$POINT_CLOUD_API_URL"/tasks/"$TASK_ID" -H 'Content-Type: application/json' \
-d "$FINISH_BODY" -s)%
dockerディレクトリで先ほど控えたプッシュコマンドを1から4まで順番に実行します。
実行に時間がかかる場合があります。
コンテナイメージのプッシュに成功すると、イメージが追加されていることが確認できます。
イメージタグ「latest」をクリックします。
URIをコピーして控えておきます。
後で別の画面で利用します。
マネジメントコンソールからAmazon Elastic Container Serviceを探します。
メニューから「タスク定義」に移動し、「新しいタスク定義の作成」をクリックします。
タスク定義ファミリーを入力します。
ここでは「PointCloudTask」とします。
コンテナの設定をします。
名前を入力します。ここでは「point-cloud」としています。
イメージURIに控えておいたECRのイメージのURIを入力します。
一番下の「作成」をクリックします。
タスク定義が作成されました。
次にクラスターを作成します。
「クラスター」メニューから「クラスターの作成」をクリックします。
クラスター名を入力します。ここでは「PointCloudCluster」としています。
インフラストラクチャはAWS Fargateのままで「作成」をクリックします。
クラスターが作成されました。
作成したクラスター名をクリックします。
サービスを一度作成してみます。
「作成」をクリックします。
サービスを一度作成してみます。
「作成」をクリックします。
デプロイ設定で「タスク」を選択します。
タスク定義のファミリーで作成したタスク定義を選択します。
ネットワーキングで「サブネット」と「セキュリティグループ」に表示されている文字列を控えておきます。
「作成」をクリックします。
タスクが起動します。
起動したタスクは自動的に終了します。
これでメイン処理実行ECSの設定は完了です。